คู่มือการกำหนดค่า MongoDB Replication และ Automated Failover
คู่มือนี้เรียบเรียงสำหรับ Ruk-Com PaaS หน้าจอและตัวเลือกอาจแตกต่างตามเวอร์ชันและสิทธิ์ของบัญชี
ตรวจสอบ Environment, Region, สิทธิ์บัญชี และสำรองค่าปัจจุบันก่อนดำเนินการกับระบบจริง
วัตถุประสงค์
บทความนี้อธิบายการใช้งาน คู่มือการกำหนดค่า MongoDB Replication และ Automated Failover บน Ruk-Com Cloud PaaS โดยจัดลำดับขั้นตอนและจุดตรวจสอบสำหรับการนำไปใช้งานจริง
ก่อนเริ่มดำเนินการ
- เข้าสู่ระบบด้วยบัญชีที่มีสิทธิ์จัดการ Environment ที่เกี่ยวข้อง
- ตรวจสอบชื่อ Environment, Region และ Resource เป้าหมายก่อนบันทึกการเปลี่ยนแปลง
- สำรองข้อมูลหรือกำหนดแผนย้อนกลับก่อนแก้ไขระบบ Production
Replica set เป็นคำที่ใช้สำหรับการกำหนด ClusterDatabase ของ Node หลาย Node ที่มีการจำลองแบบและการกำหนดค่า failover อัตโนมัติระหว่างกัน โครงสร้างดังกล่าวมักต้องการสมาชิกจำนวนคี่ไม่ว่าจะมี link # Arbiter node หรือไม่ก็ตามเพื่อให้แน่ใจว่ามีการคัดเลือก Database หลักที่ถูกต้อง Database ที่เลือกนี้จะประมวลผลการดำเนินการเขียนที่เข้ามาทั้งหมดโดยจัดเก็บข้อมูลเกี่ยวข้องภายใน oplog ซึ่งสามารถเข้าถึงและจำลองแบบโดยสมาชิก SECONDARY replica เพื่อนำไปใช้กับชุดข้อมูล ด้วยวิธีนี้ Server ทั้งหมดจะแสดงเนื้อหาเดียวกันและรับรองความพร้อมใช้งาน
ในกรณีที่เกิดปัญหาที่ไม่คาดคิดซึ่งทำให้ Database หลักหยุดทำงาน (เช่น เนื่องจาก Hardware ล้มเหลวหรือการเชื่อมต่อถูกรบกวน) กระบวนการคัดเลือกใหม่จะเริ่มต้นโดยอัตโนมัติเพื่อช่วยคืนค่าการทำงานของ Application ตามปกติโดยไม่จำเป็นต้องมีการลงมือจัดการด้วยตนเอง
ด้วยวิธีนี้ชุดข้อมูลจำลองจะสืบทอดประโยชน์ของ link #การจำลองแบบปกติ(เช่น ความล้มเหลวซ้ำซ้อน, ความพร้อมใช้งานของข้อมูลและความสามารถในการอ่านที่เพิ่มขึ้น, การกู้คืนระบบ ฯลฯ ) และกำจัดความซับซ้อนในการจัดการ Database จำนวนมากแยกกันไปพร้อม ๆ กัน
ดังนั้นนี่คือคำแนะนำง่าย ๆ ที่จะแสดงวิธีการสร้างและกำหนดค่าชุดจำลอง MongoDB ที่มีสมาชิกทั้ง 3 - ลักษณะดังกล่าวได้รับการพิจารณาเพื่อให้แน่ใจว่ามีความปลอดภัยของข้อมูลเพียงพอและเพียงพอที่จะจัดการกับปริมาณการดำเนินการ I/O ที่ต้องการสำหรับ Application ส่วนใหญ่ที่ใช้กันทั่วไป ด้านล่างนี้เราทราบถึงวิธีเตรียม Env ที่เหมาะสมตั้งค่าการตรวจสอบสิทธิ์ระหว่าง NodeDatabase กำหนดค่าการจำลองตัวเองและตรวจสอบให้แน่ใจว่าทุกอย่างได้รับการปรับแต่งอย่างเหมาะสม
การสร้าง Environment
ในการเริ่มต้นคุณจะต้องมี MongoDB node อย่างน้อย 3 Node เพื่อกำหนดค่าชุดการจำลอง ดังนั้นเรามาสร้าง Environment ดังกล่าวกัน ในตัวอย่างนี้เราจะจัดสรร MongoDB instance ของเวอร์ชัน 4.0.10 ภายใน Env เดียว

หากจำเป็นให้เปลี่ยน Env name และ link # Region ปลายทาง เมื่อการติดตั้งเสร็จสิ้นคุณต้องดูแลเกี่ยวกับความปลอดภัยของ nodes communication ด้วยความช่วยเหลือของไฟล์ authentication key
เพิ่มไฟล์ Authentication Key
การพิสูจน์ตัวตนเป็นกระบวนการประกันความปลอดภัยที่สำคัญซึ่งบังคับให้สมาชิกแต่ละคนของชุดแบบจำลองระบุตัวตนระหว่างการสื่อสารภายในโดยใช้ไฟล์ authentication key แบบพิเศษเฉพาะ มาสร้างเพื่อป้องกันข้อมูลภายใน Database ของคุณจากการเข้าถึงที่ผิดกฎหมายกัน:
1. เข้าสู่ระบบเข้าสู่ NodeDatabase ผ่านเว็บ SSH

2. ใช้ไฟล์คีย์ของคุณเองหรือสร้างไฟล์ด้วย link # openssl (ขนาดคีย์เป็นไบต์เช่น 741 และตั้งชื่อเช่น my.key) ด้วยคำสั่ง:
openssl rand -base64 741 > my.key
3. ตอนนี้คุณต้องแจกจ่าย key ไฟล์ที่เพิ่งสร้างใน MongoDB instance ทั้งหมด:
- คลิกที่ปุ่ม Config ถัดจาก NodeDatabase ของคุณเพื่อเข้าถึง link # File Manager

- ในแท็บ กำหนดค่า uration ที่เปิดอยู่ให้ค้นหาไฟล์ my.key ใต้พาธ : /home/Ruk-Com PaaS/my.key แล้วเปิด จากนั้นคัดลอกเนื้อหาลงในคลิปบอร์ด

- ใน Directory keys (พาธแบบเต็มคือ / var/lib Ruk-Com PaaS/keys) สร้างไฟล์ที่ MongoDB instance จะใช้เพื่อพิสูจน์ตัวตนซึ่งกันและกัน เช่น mongo-set.key

- วางเนื้อหาคลิปบอร์ดลงไปและเปลี่ยนแปลงโดยการ Save instance ทั้งหมด ดังนั้นไฟล์ mongo-set.key จึงถูกแจกจ่ายไปยัง MongoDB node ทั้งหมด

กำหนดค่า MongoDB Replication
เนื่องจากความปลอดภัยเป็นหนึ่งในหลักการจัดการข้อมูลหลักจึงสามารถมั่นใจได้ ในที่สุดคุณสามารถดำเนินการกำหนดค่าชุดข้อมูลจำลองได้ด้วยตนเอง
1. สลับไปที่ไฟล์mongod.confภายในโฟลเดอร์ etc ภายในแท็บ กำหนดค่า uration เดียวกันสำหรับ MongoDB node เลื่อนลงไปที่ส่วน replication จากนั้นยกเลิกการคอมเมนต์และเพิ่มสตริงต่อไปนี้ที่ระบุชื่อเฉพาะสำหรับชุดการจำลองของคุณ (ตัวอย่าง db-replication):
replSetName: db-replication
2. เพิ่ม Parameter keyFile ในส่วน security ซึ่งควรระบุพาธไปยัง key ไฟล์ของคุณ (ซึ่งในกรณีของเราคือ /var/lib/Ruk-Com PaaS/keys/mongo-set.key)

3. Save การเปลี่ยนแปลงสำหรับ instance ทั้งหมดทันที โดยใช้ปุ่ม appropriate ในหน้าต่าง editor

4. RestartNodeDatabase ของคุณเพื่อใช้ ParameterConfiguration ใหม่
หมายเหตุ :
โปรดทราบว่าเมื่อคุณตั้งค่าการจำลองเสร็จแล้วกระบวนการคัดเลือก Database หลักใหม่จะถูกเรียกใช้ในระหว่างการ RestartNode ทั้งหมดหรือการ RestartNode หลัก (เช่น การหยุดทำงานของ Database หลัก)
5. จากนั้นเข้าถึง Server MongoDB ซึ่งคุณคิดว่าจะใช้เป็นตัวหลักผ่าน Protocol SSH
หมายเหตุ :
หลังจากเลือก Database หลักแล้วสมาชิกของชุดข้อมูลจำลองอื่น ๆ จะไม่สามารถเข้าถึงได้สำหรับการดำเนินการเขียนโดยตรง ซึ่งหมายความว่าการเปลี่ยนแปลง การกำหนดค่าและอื่น ๆ (รวมถึงการเข้าถึงพาเนลผู้ดูแลระบบเว็บ) สามารถดำเนินการได้สำหรับ Node หลักปัจจุบันเท่านั้น ดังนั้นคุณจะต้องเปลี่ยนสตริงการเชื่อมต่อใน Application ของคุณเป็น Node หลักใหม่เว้นแต่คุณจะจัดลำดับความสำคัญสำหรับสมาชิกชุดการจำลองทั้งหมดที่ระบุหนึ่ง Node เป็น Node หลัก
6. เข้าถึง Database ซึ่งควรจำลองแบบด้วยข้อมูลรับรองผู้ใช้งานของผู้ดูแลระบบที่เหมาะสม:
mongo -u {user} -p {password} {DB_name}

โดยที่ :
- {user} – ชื่อผู้ใช้ของผู้ดูแลระบบ (ส่งไปยังอีเมลของคุณโดยปกติค่าเริ่มต้นจะเป็น admin)
- {password} – รหัสผ่านสำหรับผู้ใช้ Database ที่เกี่ยวข้อง (สามารถพบได้ในอีเมลเดียวกัน)
- {DB_name} –ชื่อ Database ที่คุณต้องการจำลองภายในชุดการจำลองนี้ (เราจะใช้ admin เป็นค่าเริ่มต้น)
หมายเหตุ:
ในกรณีที่การคัดเลือกใหม่เกิดขึ้น ข้อมูลประจำตัวผู้ใช้ของผู้ดูแลระบบเพื่อใช้ในการเข้าสู่ระบบ Database หลักอันใหม่จะเหมือนกับที่คุณใช้กับ Database เก่า
7. เมื่อสร้างการเชื่อมต่อแล้วให้ดำเนินการบรรทัดถัดไปเพื่อกำหนด Parameter สำหรับ MongoDB node ในปัจจุบัน และเริ่มต้น replicat set:
config = {_id : "{replica_set}", members : [{_id : 0, host:"{current_db_ip}:27017"},]}
rs.initiate()
แน่นอนว่าค่าในวงเล็บควรแทนที่ด้วยข้อมูลที่เหมาะสม กล่าวคือ:
- {replica_set}– ชื่อของกลุ่ม Database การจำลองของคุณ ระบุไว้ที่จุดเริ่มต้นของส่วนนี้ (การจำลองแบบ db ในกรณีของเรา)
- {ปัจจุบัน_db_ip}– ที่อยู่ IP ของ ContainerDatabase ที่เลือก

ตัวอย่าง :
config = {_id : "db-replication", members : [{_id : 0, host:"10.100.2.203:27017"},]}

และต่อมาก็ป้อนคำสั่ง
rs.initiate()

8. ดำเนินการคำสั่งต่อไปนี้สำหรับ Database ที่เหลือโดยที่ {db_ip} คือที่ IP address แต่ละ Database:
rs.add("{db_ip}:27017")

9. หลังจากที่คุณเพิ่มสมาชิกการจำลองทั้งหมดแล้ว คุณจะได้ชุดการจำลองที่ใช้งานได้อย่างสมบูรณ์ ในกรณีที่คุณต้องการให้แน่ใจว่าทุกอย่างได้รับการกำหนดค่าอย่างถูกต้องให้รันคำสั่งrs.สถานะ()เพื่อรับข้อมูลทั้งหมดเกี่ยวกับชุดข้อมูลจำลองของคุณ

ReplicaSet Arbiter
การจำลองแบบมีความน่าเชื่อถือมากขึ้นหากมีสมาชิกจำนวนคี่อยู่ในชุดการจำลอง ในกรณีที่คุณสร้างสมาชิกจำนวนเท่ากัน (Node) จะเป็นการดีกว่าที่จะเพิ่ม Arbiter node ซึ่งรักษาองค์ประกอบโดยตอบสนองต่อการเต้นของหัวใจและคำขอการคัดเลือกจากผู้เข้าร่วมชุดการจำลองอื่น
- Arbiter ไม่ได้เก็บข้อมูลไว้ในนั้นและจะต้องโหวตในการคัดเลือกเมื่อ Node ใดล้มเหลว
- Arbiter เป็นกระบวนการที่มีความเบาดังนั้นจึงไม่ใช้ Resource มากนัก
- Arbiter เพียงแค่แลกเปลี่ยนข้อมูลรับรองของผู้ใช้ระหว่างชุดของแบบจำลองที่เข้ารหัส
- ขอแนะนำให้เรียกใช้ Arbiter บน Node แยกต่างหากเพื่อให้ได้ความพร้อมใช้งานสูง
มาเพิ่ม Arbiter node เพิ่มเติมในชุดข้อมูลจำลองของเรากันดีกว่า:
1. ขยาย ClusterDatabase ในแนวนอนด้วย Node เดียว:

2. ใน Directoryกุญแจให้สร้าง key ไฟล์mongo-set.keyและวางเนื้อหาของไฟล์ที่คล้ายกันจาก NodeDatabase อื่น ๆ ที่กำหนดค่าไว้ก่อนหน้านี้
3. เปลี่ยนmongod.conf:
- ยกเลิกการคอมเมนต์ในส่วนการจำลองแบบและเพิ่ม replSetName (เช่น replSetName: db-replication)
- เพิ่ม Parameter keyFile ในส่วน security (ในกรณีของเราคือ /var/lib/Ruk-Com PaaS/keys/mongo-set.key)
4. RestartNode ที่เพิ่มใหม่เพื่อใช้ Parameter การกำหนดค่า

หมายเหตุ :
อย่า RestartNode ทั้งหมดเนื่องจากจะทำให้เกิดการคัดเลือกตัวหลักใหม่ เว้นแต่คุณจะระบุลำดับความสำคัญเพื่อบังคับให้ Node เฉพาะถูกเลือกเป็น NodeDatabase หลัก
5. ตอนนี้ Arbiter พร้อมที่จะเพิ่มลงในชุดการจำลองแล้ว ที่คำสั่ง PRIMARY node issue เพื่อเพิ่ม arbiter ใน Cluster:
rs.addArb("{db_ip}:27017")
โดยที่ {db_ip} คือที่ IP address ของ Node ที่เพิ่มใหม่

6. สุดท้ายให้ตรวจสอบว่า Node ที่เพิ่มเข้ามาใหม่กลายเป็น Arbiter หรือไม่ ในการเข้าสู่ระบบเข้าสู่ Node ใหม่ผ่าน SSH และเชื่อมต่อ MongoDB instance ด้วยข้อมูลประจำตัวจากอีเมลที่คุณได้รับเมื่อสร้าง Node

ดังที่คุณเห็น Node ที่เพิ่มใหม่ทำหน้าที่เป็น Arbiter ของการจำลองแบบ dbเพื่อให้มั่นใจว่าจะครบองค์ประกอบในทุกสถานการณ์
การทดสอบความพร้อมใช้งาน ClusterDatabase
Cluster MongoDB ขั้นสูงที่กำหนดค่าไว้ของเราช่วยให้คุณสามารถเชื่อมต่อและดำเนินการต่าง ๆ กับมันได้จากระยะไกล ตัวอย่างเช่นเรามาดูสถานะจริงโดยการเชื่อมต่อและดำเนินการคำสั่งตรวจสอบ 2-3 คำสั่งโดยใช้ PHP applet
เห็นได้ชัดว่าคุณต้องมี Application Server สำหรับสิ่งนั้น (เช่น Apache) ดังนั้นให้เพิ่ม Server ลงใน Env ของคุณ (ตามที่เราทำ) หรือเพียงแค่สร้างขึ้นภายใน Env ที่แยกต่างหาก
1. กดปุ่มเปลี่ยน TopologyEnvironmentและเพิ่ม Server


2. เปิดแท็บ Configuration Manager สำหรับ Server Apache ที่เพิ่มเข้ามาโดยเลือกไอคอน Config ที่อยู่ข้าง ๆ
3. ไปที่ Directory/var/www/webroot/ROOTเปิดไฟล์ index.php และวาง Code ต่อไปนี้แทนส่วนเริ่มต้น:
<?php
try{
$mongodbConnectionURI= "mongodb://{db_username}:{db_password}@node{NodeID}-{environment_domain}:27017,node{NodeID}-{environment_domain}:27017,node{NodeID}-{environment_domain}:27017,node{NodeID}-{environment_domain}:27017/?replicaSet={replica_set_name}&readPreference=primary";
$manager = new MongoDB\Driver\Manager($mongodbConnectionURI);
$command = new MongoDB\Driver\Command(['ping' => 1]);
$cursor = $manager->executeCommand('db', $command);
$response = $cursor->toArray()[0];
var_dump($response);
echo'<br><br>';
var_dump($manager->getServers());
} catch (Exception $e){
echo $e->getMessage();
}
?>
โดยที่ควรแทนที่ค่าต่อไปนี้ด้วยข้อมูลที่เกี่ยวข้อง:
- {replica_set_name} – ชื่อชุดการจำลองของคุณ
- {db_username} – ผู้ดูแลระบบของ Database หลักที่เลือก (ค่าเริ่มต้นคือ admin)
- {db_password} – รหัสผ่านของผู้ใช้ที่ระบุข้างต้น
- {NodeID} – หมายเลขประจำตัวของ Node ที่เกี่ยวข้องซึ่งสามารถพบได้ที่ Dashboard Ruk-Com
- {environment_domain} – Domain Env ที่สามารถพบได้ที่ Dashboard Ruk-Com

หมายเหตุ :
คุณต้องระบุ ID ของทุก Node ที่รวมอยู่ในชุดการจำลองของคุณภายในส่วน mongodbConnectionURI ที่เหมาะสม
ด้วยเหตุนี้คุณจะได้รับชุดสตริงที่คล้ายกัน:
อย่าลืม Save ไฟล์นี้
4. Apache ต้องการโมดูลพิเศษเพื่อให้สามารถโต้ตอบกับ Server MongoDBได้ ดังนั้นคุณต้องเพิ่มเข้าไปภายในการกำหนดค่า
จากนั้นไปที่โฟลเดอร์ etc และเปิดไฟล์php.iniค้นหาส่วน[mongodb]และลบเซมิโคลอนก่อนบรรทัดส่วนขยาย=mongodb.soเพื่อเปิดใช้งานส่วนขยายนี้

5. ในการใช้การกำหนดค่าใหม่ให้คลิกบันทึกภายในหน้าต่าง editor และกดปุ่มRestartNodeถัดจาก Application Server ของคุณ

6. สุดท้ายคลิกไอคอน Open in Browser ที่อยู่ใกล้ ๆ

ด้วยเหตุนี้ภายในแท็บ Browser ใหม่คุณจะเห็นข้อมูลเกี่ยวกับสมาชิกชุดการจำลองของคุณและความสามารถในการเข้าถึง

บรรทัดแรกแสดงผลการตรวจสอบความพร้อมใช้งานของชุดข้อมูลจำลองซึ่งดำเนินการโดยคำสั่ง "ping" (บรรทัดที่ 6 ของดัชนี.php):
object(stdClass)#11 (3) { ["ok"]=> float(1) }
ซึ่งหมายความว่าชุดการจำลองได้รับการทดสอบแล้ว
ในบล็อกถัดไปของเอาต์พุตข้อมูลทั้งหมดเกี่ยวกับ Host ชุดการจำลองจะปรากฏขึ้น ซึ่งได้มาจากฟังก์ชันรับ Server(บรรทัดที่ 11 ของดัชนี.php) ตัวอย่างเช่นคุณสามารถตรวจสอบค่าบางอย่างที่กำหนดระหว่างขั้นตอนการสร้างชุดข้อมูลจำลองนี้:
- Host– IP address ของ Database เฉพาะ
- Port– Port สมาชิกจำลองปัจจุบัน
- ["is_primary"] และ ["is_secondary"] - Parameter ที่ระบุสถานะของ Server (ค่า correspondent สำหรับ Server MongoDB อันหลักที่เลือกเป็นจริง/เท็จและสำหรับ Server MongoDB อีกสอง Server – เท็จ/จริงตามลำดับ)
นอกจากนี้คุณสามารถเริ่มและหยุด NodeDatabase ของคุณและ Refresh หน้านี้เพื่อติดตามการเปลี่ยนแปลง ด้วยวิธีนี้คุณสามารถตรวจสอบให้แน่ใจว่า Cluster MongoDB ของคุณพร้อมใช้งานและทำงานได้ตามที่ตั้งใจไว้ ดังนั้นจึงสามารถนำไปใช้กับกรณีจริงได้ในขณะนี้
รับชุดแบบจำลอง MongoDBที่พร้อมใช้งานสูงของคุณเองด้วยรักคอม Cloudเพียงสมัครทดลองใช้ฟรีที่หนึ่งในผู้ให้บริการแล้วทำตามคำแนะนำ
