คู่มือการกำหนดค่า MongoDB Replication และ Automated Failover

Replica set เป็นคำที่ใช้สำหรับการกำหนดคลัสเตอร์ฐานข้อมูลของโหนดหลายโหนดที่มีการจำลองแบบและการกำหนดค่า failover อัตโนมัติระหว่างกัน โครงสร้างดังกล่าวมักต้องการสมาชิกจำนวนคี่ไม่ว่าจะมี link # Arbiter node หรือไม่ก็ตามเพื่อให้แน่ใจว่ามีการคัดเลือกฐานข้อมูลหลักที่ถูกต้อง ฐานข้อมูลที่เลือกนี้จะประมวลผลการดำเนินการเขียนที่เข้ามาทั้งหมดโดยจัดเก็บข้อมูลเกี่ยวข้องภายใน oplog ซึ่งสามารถเข้าถึงและจำลองแบบโดยสมาชิก SECONDARY replica เพื่อนำไปใช้กับชุดข้อมูล ด้วยวิธีนี้เซิร์ฟเวอร์ทั้งหมดจะแสดงเนื้อหาเดียวกันและรับรองความพร้อมใช้งาน

mongodb replica set

ในกรณีที่เกิดปัญหาที่ไม่คาดคิดซึ่งทำให้ฐานข้อมูลหลักหยุดทำงาน (เช่น เนื่องจากฮาร์ดแวร์ล้มเหลวหรือการเชื่อมต่อถูกรบกวน) กระบวนการคัดเลือกใหม่จะเริ่มต้นโดยอัตโนมัติเพื่อช่วยคืนค่าการทำงานของแอปพลิเคชันตามปกติโดยไม่จำเป็นต้องมีการลงมือจัดการด้วยตนเอง

ด้วยวิธีนี้ชุดข้อมูลจำลองจะสืบทอดประโยชน์ของ 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

mongodb replica set restart node

หมายเหตุ :
หลังจากเลือกฐานข้อมูลหลักแล้วสมาชิกของชุดข้อมูลจำลองอื่น ๆ จะไม่สามารถเข้าถึงได้สำหรับการดำเนินการเขียนโดยตรง ซึ่งหมายความว่าการเปลี่ยนแปลง การกำหนดค่าและอื่น ๆ (รวมถึงการเข้าถึงพาเนลผู้ดูแลระบบเว็บ) สามารถดำเนินการได้สำหรับโหนดหลักปัจจุบันเท่านั้น ดังนั้นคุณจะต้องเปลี่ยนสตริงการเชื่อมต่อในแอปพลิเคชันของคุณเป็นโหนดหลักใหม่เว้นแต่คุณจะจัดลำดับความสำคัญสำหรับสมาชิกชุดการจำลองทั้งหมดที่ระบุหนึ่งโหนดเป็นโหนดหลัก

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. ขยายคลัสเตอร์ฐานข้อมูลในแนวนอนด้วยโหนดเดียว:

mongodb replica set add arbiter

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 ที่อยู่ข้าง ๆ

mongodb replica set configure replication

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 ที่เหมาะสม

ด้วยเหตุนี้คุณจะได้รับชุดสตริงที่คล้ายกัน:

mongodb replica set strings

อย่าลืม 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 แล้วทำตามคำแนะนำ