การทำ Cluster อัตโนมัติให้กับ MongoDB
คู่มือนี้เรียบเรียงสำหรับ Ruk-Com PaaS หน้าจอและตัวเลือกอาจแตกต่างตามเวอร์ชันและสิทธิ์ของบัญชี
ตรวจสอบ Environment, Region, สิทธิ์บัญชี และสำรองค่าปัจจุบันก่อนดำเนินการกับระบบจริง
ตรวจสอบชื่อเมนู ตัวเลือก และข้อกำหนดล่าสุดจากเนื้อหาภาษาอังกฤษในหน้าเดียวกันก่อนดำเนินการกับระบบจริง
วัตถุประสงค์
บทความนี้อธิบายการทำ Cluster อัตโนมัติให้กับ MongoDB บน Ruk-Com Cloud PaaS โดยจัดลำดับขั้นตอนและจุดตรวจสอบสำหรับการนำไปใช้งานจริง
ก่อนเริ่มดำเนินการ
- เข้าสู่ระบบด้วยบัญชีที่มีสิทธิ์จัดการ Environment ที่เกี่ยวข้อง
- ตรวจสอบชื่อ Environment, Region และ Resource เป้าหมายก่อนบันทึกการเปลี่ยนแปลง
- สำรองข้อมูลหรือกำหนดแผนย้อนกลับก่อนแก้ไขระบบ Production
Ruk-Com Cloud จัดเตรียม Cluster อัตโนมัติสำหรับ MongoDB stack ซึ่งช่วยให้คุณสร้างชุดจำลองที่เชื่อถือได้สำหรับ Database ของคุณด้วยการคลิกเพียงครั้งเดียว วิธีแก้ที่นำไปใช้มีประโยชน์มากมาย:
- ความซ้ำซ้อนและความพร้อมใช้งานของข้อมูลสูง – ทำสำเนาข้อมูลหลาย ๆ ชุดบน ServerDatabase ที่แตกต่างกันช่วยให้สามารถรับความผิดพลาดในระดับสูงต่อการสูญหายของข้อมูลได้
- ความสามารถในการปรับสเกลและการค้นหาอัตโนมัติ – Node ใหม่ที่เพิ่มเข้ามาระหว่างการHorizontal Scalingจะเชื่อมต่อกับ Cluster โดยจะใช้การปรับเปลี่ยนที่จำเป็นทั้งหมดโดยอัตโนมัติ
- การล้มเหลวอัตโนมัติ – NodeDatabase ที่ไม่สามารถใช้งานได้ชั่วคราวหรือมีเวลาแฝงสูงจะถูกแยกออกจาก Cluster โดยอัตโนมัติและจะเพิ่มเข้าไปใหม่เมื่อการเชื่อมต่อกลับคืนมา
ประโยชน์ทั้งหมดนี้สามารถทำได้เพียงไม่กี่คลิกภายใน topology wizard สำรวจขั้นตอนด้านล่างเพื่อเปิดใช้งานการทำ Cluster อัตโนมัติสำหรับ Database MongoDB ของคุณใน Ruk-Com PaaS
ข้อมูลจำเพาะของ MongoDB Auto-Clustering
Link # replica set คือกลุ่มของ MongoDB instance อย่างน้อย 3 instance ที่เก็บรักษาข้อมูลเดียวกัน มี Node หนึ่งของชุดถือเป็น Node หลักและรับผิดชอบการดำเนินการเขียนทั้งหมด บันทึกการเปลี่ยนแปลงทั้งหมดใน oplog เพื่อให้ Node ที่เหลือ (ลำดับที่สอง) สามารถสะท้อนถึงข้อมูลหลักได้อย่างถูกต้อง หากตัวหลักไม่พร้อมใช้งานรายการใหม่จะถูกเลือกโดยอัตโนมัติจากตำแหน่งรองที่ใช้งานอยู่หลังจากมีการล่าช้าไปสักครู่หนึ่ง
ค่าเริ่มต้นสำหรับการการตั้งค่าของ Cluster ที่กำหนดค่าโดยอัตโนมัติมีดังต่อไปนี้:
- "chainingAllowed" : true - อนุญาตให้สมาชิกรองสามารถจำลองแบบจากลำดับรองอื่น ๆ ได้
- "heartbeatIntervalMillis" : 2000 - ความถี่ในหน่วยมิลลิวินาทีสำหรับการเต้นของหัวใจ
- "heartbeatTimeoutSecs" : 10 - การหมดเวลาเป็นหน่วยวินาทีที่สมาชิกตั้งค่าแบบจำลองรอให้การเต้นของหัวใจสำเร็จก่อนที่จะทำเครื่องหมาย Node ที่เหมาะสมว่าไม่สามารถเข้าถึงได้
- "electionTimeoutMillis" : 10000 - การหมดเวลาเป็นมิลลิวินาทีสำหรับการตรวจสอบว่าสมาชิกหลักไม่สามารถเข้าถึงได้หรือไม่
- "catchUpTimeoutMillis" : -1 - การหมดเวลาเป็นมิลลิวินาที (-1 สำหรับเวลาที่ไม่มีที่สิ้นสุด) สำหรับตัวหลักที่เพิ่งได้รับการคัดเลือกเพื่อติดต่อกับสมาชิกที่มีการเขียนล่าสุด
- "catchUpTakeoverDelayMillis" : 30000 – การหมดเวลาเป็นมิลลิวินาทีของ Node รองซึ่งอยู่ข้างหน้า Node หลักในปัจจุบันให้การติดตามก่อนที่จะเริ่มการคัดเลือกเพื่อเป็น Node หลักใหม่
เคล็ดลับ:
หากจำเป็นคุณสามารถกำหนดค่าการตั้งค่าเหล่านี้ใหม่ได้ด้วยตนเองหลังจากการติดตั้ง Cluster โดยใช้คำสั่ง rs.re กำหนดค่า() ตรวจสอบส่วนด้านล่างเพื่อเรียนรู้วิธีเชื่อมต่อกับ Cluster MongoDB ของคุณผ่าน SSH และรันคำสั่งที่จำเป็น
จุดสำคัญอีกประการหนึ่งคือความปลอดภัยและการป้องกันจากการเข้าถึงที่ไม่ต้องการ ด้วยเหตุนี้การรับรองความถูกต้องเป็นกระบวนการประกันความปลอดภัยที่สำคัญ ซึ่งบังคับให้สมาชิกของแต่ละชุดจำลองระบุตัวตนระหว่างการสื่อสารภายในโดยใช้คีย์ไฟล์การพิสูจน์ตัวตนพิเศษ Platform จะใช้การกำหนดค่าที่จำเป็นโดยอัตโนมัติ (ใน /etc/mongod.conf) และสร้างคีย์ (อยู่ที่ /home/Ruk-Com PaaS/mongodb.key) ในระหว่างการกำหนดค่า Cluster นอกจากนี้เพื่อให้แน่ใจว่ามีความสอดคล้องกัน ไฟล์จะถูกเพิ่มลงในไฟล์ link # redeploy.conf เพื่อให้ไฟล์ยังคงอยู่ตลอดการดำเนินการตลอดอายุการใช้งาน Container
MongoDB ใช้เครื่องมือจัดเก็บข้อมูล WiredTiger ตามค่าเริ่มต้น ช่วยให้มั่นใจได้ถึงประสิทธิภาพที่สูง (เนื่องจากอัลกอริทึม non-locking) และการใช้ต้นทุน / Resource ที่มีประสิทธิภาพ ตัวเลือกเริ่มต้นสำหรับ WiredTiger ได้รับการปรับให้เหมาะกับการรัน mongod instance เดียวต่อ Server ซึ่งเหมาะสำหรับ Container Ruk-Com PaaS, MongoDB ใช้ทั้ง Cache ภายใน WiredTiger และ Cache ของ filesystem ขนาด Cache ภายในคือ 50% ของ RAM ทั้งหมดลบ 1 GB (แต่ไม่น้อยกว่า 256 MB) ในขณะที่ Cache ของ filesystem ทำงานในหน่วยความจำว่างที่ไม่ได้ใช้โดย WiredTiger หรือกระบวนการอื่น ๆ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่า WiredTigerโปรดดูเอกสาร MongoDB อย่างเป็นทางการ
อีกหนึ่งคุณลักษณะที่เป็นเอกลักษณ์ของ MongoDB auto-cluster คือการตรวจหา Node ใหม่ที่เพิ่มเข้ามาโดยอัตโนมัติผ่านHorizontal Scalingและการรวมไว้ในชุดการจำลองโดยไม่ต้องดำเนินการใด ๆ ด้วย
ตนเอง ในทำนองเดียวกัน Node จะถูกแยกออกจาก Cluster ในขณะที่ขยายสเกล
เปิดใช้งานการทำ Cluster อัตโนมัติสำหรับ Database
กระบวนการทั้งหมดของการสร้าง Cluster อัตโนมัติของ MongoDB สามารถทำได้ในไม่กี่คลิก
1. เปิด topology wizard ด้วยปุ่ม New Environment ที่มุมบนซ้ายของ Dashboard เลือก Database MongoDB และเปิดใช้งาน Auto-Clustering ผ่านตัวสวิตซ์สลับที่เหมาะสม

เคล็ดลับ:
ข้อมูล Topology บางส่วนของ Cluster MongoDB มีดังต่อไปนี้:
- รองรับการทำ Cluster อัตโนมัติตั้งแต่เวอร์ชัน 4.x.x
- แนะนำให้ใช้ RAM 4 GiB (32 cloudlets) เพื่อการทำงานที่เหมาะสมของ Node ชุดจำลอง ตามค่าเริ่มต้นจำนวน cloudlets เหล่านี้จะถูกเพิ่มเป็นลิมิตการปรับสเกลแบบไดนามิก ดังนั้นคุณจะไม่ถูกเรียกเก็บเงินเว้นแต่จะใช้ Resource จริง
- จำนวน Node ขั้นต่ำที่จำเป็นสำหรับ MongoDB auto-cluster คือ 3

- กำหนดค่า Parameter อื่น ๆ ตามความต้องการของคุณ (link # public IPs, link # region ฯลฯ ) แล้วคลิก Create
2. รอสักครู่เพื่อให้ Platform กำหนดค่า Cluster ให้คุณ

3. หลังจากติดตั้งสำเร็จคุณจะได้รับอีเมลเกี่ยวกับการกำหนดค่าชุดข้อมูลจำลองที่ประสบความสำเร็จ:

คุณสามารถใช้ข้อมูลรับรองเหล่านี้เพื่อเข้าถึงแอดมินพาเนลหรือเพื่อสร้างการเชื่อมต่อจาก Application ของคุณไปยัง Node หลักของชุดข้อมูลจำลอง
เคล็ดลับ:
ตามที่กล่าวไว้ Node รองใด ๆ อาจกลายเป็น Node หลักในกรณีที่เกิดการล้มเหลว การคัดเลือกอีกครั้งจะเกิดขึ้นหาก Cluster เริ่มต้นใหม่ดั งนั้นจึงมีความเป็นไปได้ค่อนข้างมากที่ Node หลักใหม่จะเกิดขึ้น ดังนั้นสตริงการเชื่อมต่อ Application จึงกลายเป็นไม่ถูกต้อง เพื่อหลีกเลี่ยงปัญหาเหล่านี้สตริงการเชื่อมต่อควรมีชื่อ Host ของสมาชิกชุดการจำลองทั้งหมด ชื่อชุดแบบจำลองและการตั้งค่าการอ่านจำเป็น เพื่อยกเลิกการโหลด Node หลักเพื่อจัดการการอ่านหรือเพื่อให้แน่ใจว่า Cluster มีความพร้อมใช้งานสูงและเกิดความล้มเหลว
นี่คือตัวอย่างสตริงการเชื่อมต่อในกรณีของ Application node.js:
client = new MongoClient(
"mongodb://admin:[email protected]:27017,
node.example.ruk-com.cloud:27017,
node.example.ruk-com.cloud:27017/admin",
{
useUnifiedTopology: true,
readPreference:'primaryPreferred',
replicaSet:'rs0'
}
);
โดยที่ :
- useUnifiedTopology: true - บังคับให้ mongodb ใช้เครื่องมือค้นหาและตรวจสอบ Server ใหม่
- readPreference:'primaryPreferred' - ส่วนใหญ่ดำเนินการอ่านจากตัวหลัก แต่ถ้าไม่พร้อมใช้งานการดำเนินการจะอ่านจากสมาชิกรอง
- replicaSet:'rs0' - โดยค่าเริ่มต้นชื่อชุดการจำลองคือ rs0 ใน Ruk-Com คุณอาจสังเกตชื่อชุดการจำลองที่ cluster node ในไฟล์ mongod.conf หรือใน mongo shell prompt
การเชื่อมต่อ Application ที่ระบุไว้ข้างต้นถือเป็นการสร้างขึ้นภายใน Platform one hosting แต่ถ้าจำเป็นคุณสามารถเชื่อมต่อ Application ภายนอกกับแบบจำลองที่ตั้งค่าผ่านเอสแอลบีได้ ในกรณีนี้คุณต้องรักษาการเชื่อมต่อกับ Node หลักสำหรับการอ่าน / เขียนผ่าน link # Ruk-Com Endpoints เท่านั้น

หากคุณต้องการอ่านจากลำดับที่สองคุณต้องปรับแต่ง CodeApplication ของคุณเพื่ออ่านจากลำดับที่สองในเธรดแยกเช่นเดียวกับที่คุณทำสำหรับไฟล์หลัก อย่างไรก็ตามสำหรับกรณีดังกล่าวคุณต้องลบ Parameter replicaSet ออกจากสตริงการเชื่อมต่อ สามารถดูได้ตามอีเมลด้านบน:
client = new MongoClient(
"mongodb://admin:[email protected]:11035/admin",
{ useUnifiedTopology: true }
);
4. โดยค่าเริ่มต้น auto-cluster จะใช้พาเนลแอดมิน Mongo Express มีมาให้กับแพคเกจ

5. นอกจากนี้คุณสามารถเชื่อมต่อกับ Database ของคุณผ่าน mongo shell ได้โดยตรงในเทอร์มินัลของคุณ (ตัวอย่างเช่นการใช้ตัวเลือกเว็บ SSHแบบบิวท์อิน)
mongo -u {user} -p {password} {DB_name}

โดยที่ :
- {user} – ชื่อผู้ใช้ของผู้ดูแลระบบ (ส่งไปยังอีเมลของคุณโดยค่าเริ่มต้นคือ admin)
- {password} – รหัสผ่านสำหรับผู้ใช้ Database ที่เกี่ยวข้อง (สามารถพบได้ในอีเมลเดียวกัน)
- {DB_name} – ชื่อ Database ที่คุณต้องการเข้าถึง (เราจะใช้ admin เป็นค่าเริ่มต้น)
6. คุณสามารถตรวจสอบสถานะชุดการจำลองด้วยคำสั่งที่เหมาะสม:
rs.status()

อย่างที่คุณเห็นชุดการจำลอง (ที่มีชื่อ rs0 เป็นค่าเริ่มต้น) พร้อมใช้งานแล้ว สามารถดูคำสั่งชุดแบบจำลองอื่น ๆ ได้ที่เอกสารของออฟฟิเชียล ตัวอย่างเช่นใช้การดำเนินการ rs.conf() หากคุณต้องการดูการกำหนดค่าชุดการจำลอง
รับชุด MongoDB replica ที่มีความพร้อมใช้งานสูงของคุณเองด้วย Ruk-Com Cloud
