Replica set เป็นคำที่ใช้สำหรับการกำหนดคลัสเตอร์ฐานข้อมูลของโหนดหลายโหนดที่มีการจำลองแบบและการกำหนดค่า failover อัตโนมัติระหว่างกัน โครงสร้างดังกล่าวมักต้องการสมาชิกจำนวนคี่ไม่ว่าจะมี link # Arbiter node หรือไม่ก็ตามเพื่อให้แน่ใจว่ามีการคัดเลือกฐานข้อมูลหลักที่ถูกต้อง ฐานข้อมูลที่เลือกนี้จะประมวลผลการดำเนินการเขียนที่เข้ามาทั้งหมดโดยจัดเก็บข้อมูลเกี่ยวข้องภายใน oplog ซึ่งสามารถเข้าถึงและจำลองแบบโดยสมาชิก SECONDARY replica เพื่อนำไปใช้กับชุดข้อมูล ด้วยวิธีนี้เซิร์ฟเวอร์ทั้งหมดจะแสดงเนื้อหาเดียวกันและรับรองความพร้อมใช้งาน
ในกรณีที่เกิดปัญหาที่ไม่คาดคิดซึ่งทำให้ฐานข้อมูลหลักหยุดทำงาน (เช่น เนื่องจากฮาร์ดแวร์ล้มเหลวหรือการเชื่อมต่อถูกรบกวน) กระบวนการคัดเลือกใหม่จะเริ่มต้นโดยอัตโนมัติเพื่อช่วยคืนค่าการทำงานของแอปพลิเคชันตามปกติโดยไม่จำเป็นต้องมีการลงมือจัดการด้วยตนเอง
ด้วยวิธีนี้ชุดข้อมูลจำลองจะสืบทอดประโยชน์ของ link # usual replication (เช่น ความล้มเหลวซ้ำซ้อน, ความพร้อมใช้งานของข้อมูลและความสามารถในการอ่านที่เพิ่มขึ้น, การกู้คืนระบบ ฯลฯ ) และกำจัดความซับซ้อนในการจัดการฐานข้อมูลจำนวนมากแยกกันไปพร้อม ๆ กัน
ดังนั้นนี่คือคำแนะนำง่าย ๆ ที่จะแสดงวิธีการสร้างและกำหนดค่าชุดจำลอง MongoDB ที่มีสมาชิกทั้ง 3 – ลักษณะดังกล่าวได้รับการพิจารณาเพื่อให้แน่ใจว่ามีความปลอดภัยของข้อมูลเพียงพอและเพียงพอที่จะจัดการกับปริมาณการดำเนินการ I/O ที่ต้องการสำหรับแอปพลิเคชันส่วนใหญ่ที่ใช้กันทั่วไป ด้านล่างนี้เราทราบถึงวิธีเตรียม Env ที่เหมาะสมตั้งค่าการตรวจสอบสิทธิ์ระหว่างโหนดฐานข้อมูล กำหนดค่าการจำลองตัวเองและตรวจสอบให้แน่ใจว่าทุกอย่างได้รับการปรับแต่งอย่างเหมาะสม
การสร้าง Environment
ในการเริ่มต้นคุณจะต้องมี MongoDB node อย่างน้อย 3 โหนดเพื่อกำหนดค่าชุดการจำลอง ดังนั้นเรามา create such an environment กัน ในตัวอย่างนี้เราจะจัดสรร MongoDB instance ของเวอร์ชัน 4.0.10 ภายใน Env เดียว
หากจำเป็นให้เปลี่ยน Env name และ link # Region ปลายทาง เมื่อการติดตั้งเสร็จสิ้นคุณต้องดูแลเกี่ยวกับความปลอดภัยของ nodes communication ด้วยความช่วยเหลือของไฟล์ authentication key
เพิ่มไฟล์ Authentication Key
การพิสูจน์ตัวตนเป็นกระบวนการประกันความปลอดภัยที่สำคัญซึ่งบังคับให้สมาชิกแต่ละคนของชุดแบบจำลองระบุตัวตนระหว่างการสื่อสารภายในโดยใช้ไฟล์ authentication key แบบพิเศษเฉพาะ มาสร้างเพื่อป้องกันข้อมูลภายในฐานข้อมูลของคุณจากการเข้าถึงที่ผิดกฎหมายกัน:
1. ล็อกอินเข้าสู่โหนดฐานข้อมูลผ่าน Web SSH
2. ใช้ไฟล์คีย์ของคุณเองหรือสร้างไฟล์ด้วย link # openssl (ขนาดคีย์เป็นไบต์เช่น 741 และตั้งชื่อเช่น my.key) ด้วยคำสั่ง:
openssl rand -base64 741 > my.key
3. ตอนนี้คุณต้องแจกจ่าย key ไฟล์ที่เพิ่งสร้างใน MongoDB instance ทั้งหมด:
- คลิกที่ปุ่ม Config ถัดจากโหนดฐานข้อมูลของคุณเพื่อเข้าถึง link # File Manager
- ในแท็บ configuration ที่เปิดอยู่ให้ค้นหาไฟล์ my.key ใต้พาธ : /home/jelastic/my.key แล้วทำการเปิด จากนั้นคัดลอกเนื้อหาลงในคลิปบอร์ด
- ในไดเร็กทอรี keys (พาธแบบเต็มคือ / var/lib jelastic/keys) สร้างไฟล์ที่ MongoDB instance จะใช้เพื่อพิสูจน์ตัวตนซึ่งกันและกัน เช่น mongo-set.key
- วางเนื้อหาคลิปบอร์ดลงไปและเปลี่ยนแปลงโดยการ Save instance ทั้งหมด ดังนั้นไฟล์ mongo-set.key จึงถูกแจกจ่ายไปยัง MongoDB node ทั้งหมด
กำหนดค่า MongoDB Replication
เนื่องจากความปลอดภัยเป็นหนึ่งในหลักการจัดการข้อมูลหลักจึงสามารถมั่นใจได้ ในที่สุดคุณสามารถดำเนินการกำหนดค่าชุดข้อมูลจำลองได้ด้วยตนเอง
1. สลับไปที่ไฟล์ mongod.conf ภายในโฟลเดอร์ etc ภายในแท็บ configuration เดียวกันสำหรับ MongoDB node เลื่อนลงไปที่ส่วน replication จากนั้นยกเลิกการคอมเมนต์และเพิ่มสตริงต่อไปนี้ที่ระบุชื่อเฉพาะสำหรับชุดการจำลองของคุณ (ตัวอย่าง db-replication):
replSetName: db-replication
2. เพิ่มพารามิเตอร์ keyFile ในส่วน security ซึ่งควรระบุพาธไปยัง key ไฟล์ของคุณ (ซึ่งในกรณีของเราคือ /var/lib/jelastic/keys/mongo-set.key)
3. Save การเปลี่ยนแปลงสำหรับ instance ทั้งหมดทันที โดยใช้ปุ่ม appropriate ในหน้าต่าง editor
4. รีสตาร์ทโหนดฐานข้อมูลของคุณเพื่อใช้พารามิเตอร์คอนฟิกูเรชันใหม่
หมายเหตุ :
โปรดทราบว่าเมื่อคุณตั้งค่าการจำลองเสร็จแล้วกระบวนการคัดเลือกฐานข้อมูลหลักใหม่จะถูกเรียกใช้ในระหว่างการรีสตาร์ทโหนดทั้งหมดหรือการรีสตาร์ทโหนดหลัก (เช่น การหยุดทำงานของฐานข้อมูลหลัก)
5. จากนั้นเข้าถึงเซิร์ฟเวอร์ MongoDB ซึ่งคุณคิดว่าจะใช้เป็นตัวหลักผ่านโปรโตคอล SSH
หมายเหตุ :
หลังจากเลือกฐานข้อมูลหลักแล้วสมาชิกของชุดข้อมูลจำลองอื่น ๆ จะไม่สามารถเข้าถึงได้สำหรับการดำเนินการเขียนโดยตรง ซึ่งหมายความว่าการเปลี่ยนแปลง การกำหนดค่าและอื่น ๆ (รวมถึงการเข้าถึงพาเนลผู้ดูแลระบบเว็บ) สามารถดำเนินการได้สำหรับโหนดหลักปัจจุบันเท่านั้น ดังนั้นคุณจะต้องเปลี่ยนสตริงการเชื่อมต่อในแอปพลิเคชันของคุณเป็นโหนดหลักใหม่เว้นแต่คุณจะจัดลำดับความสำคัญสำหรับสมาชิกชุดการจำลองทั้งหมดที่ระบุหนึ่งโหนดเป็นโหนดหลัก
6. เข้าถึงฐานข้อมูลซึ่งควรจำลองแบบด้วยข้อมูลรับรองผู้ใช้งานของผู้ดูแลระบบที่เหมาะสม:
mongo -u {user} -p {password} {DB_name}
โดยที่ :
- {user} – ชื่อผู้ใช้ของผู้ดูแลระบบ (ส่งไปยังอีเมลของคุณโดยปกติค่าเริ่มต้นจะเป็น admin)
- {password} – รหัสผ่านสำหรับผู้ใช้ฐานข้อมูลที่เกี่ยวข้อง (สามารถพบได้ในอีเมลเดียวกัน)
- {DB_name} –ชื่อฐานข้อมูลที่คุณต้องการจำลองภายในชุดการจำลองนี้ (เราจะใช้ admin เป็นค่าเริ่มต้น)
หมายเหตุ :
ในกรณีที่การคัดเลือกใหม่เกิดขึ้น ข้อมูลประจำตัวผู้ใช้ของผู้ดูแลระบบเพื่อใช้ในการเข้าสู่ระบบฐานข้อมูลหลักอันใหม่จะเหมือนกับที่คุณใช้กับฐานข้อมูลเก่า
7. เมื่อสร้างการเชื่อมต่อแล้วให้ดำเนินการบรรทัดถัดไปเพื่อกำหนดพารามิเตอร์สำหรับ MongoDB node ในปัจจุบัน และเริ่มต้น replicat set:
config = {_id : "{replica_set}", members : [{_id : 0, host:"{current_db_ip}:27017"},]}
rs.initiate()
Obviously, the values in brackets should be substituted with the appropriate data, namely:
- {replica_set} – name of your replicating database group, specified at the beginning of this section (db-replication in our case)
- {current_db_ip} – IP address of the chosen database container
ตัวอย่าง :
config = {_id : "db-replication", members : [{_id : 0, host:"10.100.2.203:27017"},]}
และต่อมาก็ป้อนคำสั่ง
rs.initiate()
8. ดำเนินการคำสั่งต่อไปนี้สำหรับฐานข้อมูลที่เหลือโดยที่ {db_ip} คือที่ IP address แต่ละฐานข้อมูล:
rs.add("{db_ip}:27017")
9. หลังจากที่คุณเพิ่มสมาชิกการจำลองทั้งหมดแล้ว คุณจะได้ชุดการจำลองที่ใช้งานได้อย่างสมบูรณ์ ในกรณีที่คุณต้องการให้แน่ใจว่าทุกอย่างได้รับการกำหนดค่าอย่างถูกต้องให้รันคำสั่ง rs.status() เพื่อรับข้อมูลทั้งหมดเกี่ยวกับชุดข้อมูลจำลองของคุณ
ReplicaSet Arbiter
การจำลองแบบมีความน่าเชื่อถือมากขึ้นหากมีสมาชิกจำนวนคี่อยู่ในชุดการจำลอง ในกรณีที่คุณสร้างสมาชิกจำนวนเท่ากัน (โหนด) จะเป็นการดีกว่าที่จะเพิ่ม Arbiter node ซึ่งรักษาองค์ประกอบโดยตอบสนองต่อการเต้นของหัวใจและคำขอการคัดเลือกจากผู้เข้าร่วมชุดการจำลองอื่น
- Arbiter ไม่ได้เก็บข้อมูลไว้ในนั้นและจะต้องโหวตในการคัดเลือกเมื่อโหนดใดล้มเหลว
- Arbiter เป็นกระบวนการที่มีความเบาดังนั้นจึงไม่ใช้ทรัพยากรมากนัก
- Arbiter เพียงแค่แลกเปลี่ยนข้อมูลรับรองของผู้ใช้ระหว่างชุดของแบบจำลองที่เข้ารหัส
- ขอแนะนำให้เรียกใช้ Arbiter บนโหนดแยกต่างหากเพื่อให้ได้ความพร้อมใช้งานสูง
มาเพิ่ม Arbiter node เพิ่มเติมในชุดข้อมูลจำลองของเรากันดีกว่า:
1. ขยายคลัสเตอร์ฐานข้อมูลในแนวนอนด้วยโหนดเดียว:
2. ในไดเร็กทอรี keys ให้สร้าง key ไฟล์ mongo-set.key และวางเนื้อหาของไฟล์ที่คล้ายกันจากโหนดฐานข้อมูลอื่น ๆ ที่กำหนดค่าไว้ก่อนหน้านี้
3. เปลี่ยน mongod.conf:
- ยกเลิกการคอมเมนต์ในส่วนการจำลองแบบและเพิ่ม replSetName (เช่น replSetName: db-replication)
- เพิ่มพารามิเตอร์ keyFile ในส่วน security (ในกรณีของเราคือ /var/lib/jelastic/keys/mongo-set.key)
4. รีสตาร์ทโหนดที่เพิ่มใหม่เพื่อใช้พารามิเตอร์การกำหนดค่า
หมายเหตุ :
อย่ารีสตาร์ทโหนดทั้งหมดเนื่องจากจะทำให้เกิดการคัดเลือกตัวหลักใหม่ เว้นแต่คุณจะระบุลำดับความสำคัญเพื่อบังคับให้โหนดเฉพาะถูกเลือกเป็นโหนดฐานข้อมูลหลัก
5. ตอนนี้ Arbiter พร้อมที่จะเพิ่มลงในชุดการจำลองแล้ว ที่คำสั่ง PRIMARY node issue เพื่อเพิ่ม arbiter ในคลัสเตอร์:
rs.addArb("{db_ip}:27017")
โดยที่ {db_ip} คือที่ IP address ของโหนดที่เพิ่มใหม่
6. สุดท้ายให้ตรวจสอบว่าโหนดที่เพิ่มเข้ามาใหม่กลายเป็น Arbiter หรือไม่ ในการล็อกอินเข้าสู่โหนดใหม่ผ่าน SSH และเชื่อมต่อ MongoDB instance ด้วยข้อมูลประจำตัวจากอีเมลที่คุณได้รับเมื่อสร้างโหนด
ดังที่คุณเห็นโหนดที่เพิ่มใหม่ทำหน้าที่เป็น Arbiter ของ db-replication เพื่อให้มั่นใจว่าจะครบองค์ประกอบในทุกสถานการณ์
การทดสอบความพร้อมใช้งานคลัสเตอร์ฐานข้อมูล
คลัสเตอร์ MongoDB ขั้นสูงที่กำหนดค่าไว้ของเราช่วยให้คุณสามารถเชื่อมต่อและดำเนินการต่าง ๆ กับมันได้จากระยะไกล ตัวอย่างเช่นเรามาดูสถานะจริงโดยการเชื่อมต่อและดำเนินการคำสั่งตรวจสอบ 2-3 คำสั่งโดยใช้ PHP applet
เห็นได้ชัดว่าคุณต้องมีแอปพลิเคชันเซิร์ฟเวอร์สำหรับสิ่งนั้น (เช่น Apache) ดังนั้นให้เพิ่มเซิร์ฟเวอร์ลงใน Env ของคุณ (ตามที่เราทำ) หรือเพียงแค่สร้างขึ้นภายใน Env ที่แยกต่างหาก
1. กดปุ่ม Change Environment Topology และเพิ่มเซิร์ฟเวอร์
2. เปิดแท็บ Configuration Manager สำหรับเซิร์ฟเวอร์ Apache ที่เพิ่มเข้ามาโดยเลือกไอคอน Config ที่อยู่ข้าง ๆ
3. ไปที่ไดเร็กทอรี /var/www/webroot/ROOT เปิดไฟล์ index.php และวางโค้ดต่อไปนี้แทนส่วนเริ่มต้น:
<?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} – ผู้ดูแลระบบของฐานข้อมูลหลักที่เลือก (ค่าเริ่มต้นคือ admin)
- {db_password} – รหัสผ่านของผู้ใช้ที่ระบุข้างต้น
- {NodeID} – หมายเลขประจำตัวของโหนดที่เกี่ยวข้องซึ่งสามารถพบได้ที่แดชบอร์ด Ruk-Com
- {environment_domain} – โดเมน Env ที่สามารถพบได้ที่แดชบอร์ด Ruk-Com
หมายเหตุ :
คุณต้องระบุ ID ของทุกโหนดที่รวมอยู่ในชุดการจำลองของคุณภายในส่วน mongodbConnectionURI ที่เหมาะสม
ด้วยเหตุนี้คุณจะได้รับชุดสตริงที่คล้ายกัน:
อย่าลืม Save ไฟล์นี้
4. Apache ต้องการโมดูลพิเศษเพื่อให้สามารถ interact with the MongoDB server ได้ ดังนั้นคุณต้องเพิ่มเข้าไปภายในการกำหนดค่า
จากนั้นไปที่โฟลเดอร์ etc และเปิดไฟล์ php.ini ค้นหาส่วน [mongodb] และลบเซมิโคลอนก่อนบรรทัด extension=mongodb.so เพื่อเปิดใช้งานส่วนขยายนี้
5. ในการใช้การกำหนดค่าใหม่ให้คลิก Save ภายในหน้าต่าง editor และกดปุ่ม Restart Nodes ถัดจากแอปพลิเคชันเซิร์ฟเวอร์ของคุณ
6. สุดท้ายคลิกไอคอน Open in Browser ที่อยู่ใกล้ ๆ
ด้วยเหตุนี้ภายในแท็บเบราว์เซอร์ใหม่คุณจะเห็นข้อมูลเกี่ยวกับสมาชิกชุดการจำลองของคุณและความสามารถในการเข้าถึง
บรรทัดแรกแสดงผลการตรวจสอบความพร้อมใช้งานของชุดข้อมูลจำลองซึ่งดำเนินการโดยคำสั่ง “ping” (บรรทัดที่ 6 ของ index.php):
object(stdClass)#11 (3) { ["ok"]=> float(1) }
ซึ่งหมายความว่าชุดการจำลองได้รับการทดสอบเรียบร้อยแล้ว
ในบล็อกถัดไปของเอาต์พุตข้อมูลทั้งหมดเกี่ยวกับโฮสต์ชุดการจำลองจะปรากฏขึ้น ซึ่งได้มาจากฟังก์ชัน getServers (บรรทัดที่ 11 ของ index.php) ตัวอย่างเช่นคุณสามารถตรวจสอบค่าบางอย่างที่กำหนดระหว่างขั้นตอนการสร้างชุดข้อมูลจำลองนี้:
- host – IP address ของฐานข้อมูลเฉพาะ
- port – พอร์ตสมาชิกจำลองปัจจุบัน
- [“is_primary”] และ [“is_secondary”] – พารามิเตอร์ที่ระบุสถานะของเซิร์ฟเวอร์ (ค่า correspondent สำหรับเซิร์ฟเวอร์ MongoDB อันหลักที่เลือกเป็นจริง/เท็จและสำหรับเซิร์ฟเวอร์ MongoDB อีกสองเซิร์ฟเวอร์ – เท็จ/จริงตามลำดับ)
นอกจากนี้คุณสามารถเริ่มและหยุดโหนดฐานข้อมูลของคุณและรีเฟรชหน้านี้เพื่อติดตามการเปลี่ยนแปลง ด้วยวิธีนี้คุณสามารถตรวจสอบให้แน่ใจว่าคลัสเตอร์ MongoDB ของคุณพร้อมใช้งานและทำงานได้ตามที่ตั้งใจไว้ ดังนั้นจึงสามารถนำไปใช้กับกรณีจริงได้ในขณะนี้
รับชุด MongoDB replica ที่พร้อมใช้งานสูงของคุณเองด้วย Ruk-Com Cloud เพียงสมัคร free trial at one of the service providers แล้วทำตามคำแนะนำ