หลาย Mongos บนเซิร์ฟเวอร์เดียว


11

ฉันไม่ได้พูดคุยเกี่ยวกับsharding เรามีเซิร์ฟเวอร์ทดสอบ (linux) และมีอยู่แล้วmongoซึ่งเป็นของโปรเจ็กต์ย่อย / อื่น เป็นไปได้ไหมที่จะใช้งานอินสแตนซ์ที่แยกได้หลายตัวของmongodbเครื่องเดียว ฉันจะทำมันได้อย่างไร

คำตอบ:


14

ใช่คุณสามารถทำได้โดยการระบุหมายเลขพอร์ตที่แตกต่างกันและไดเรกทอรีข้อมูลสำหรับอินสแตนซ์อื่น ๆ ของmongodแล้วระบุหมายเลขพอร์ตใหม่ในไคลเอนต์

ตัวอย่างเช่น:

./mongod --dbpath /foo/bar/otherpath --port some_other_port

คุณยังสามารถเปลี่ยนเซิร์ฟเวอร์ชาร์ดและกำหนดหมายเลขพอร์ตเซิร์ฟเวอร์ได้หากต้องการ


1
เป็นไปได้ไหมที่จะระบุสิ่งนี้ภายใน mongodb.conf? หรือฉันจะต้องสร้างสคริปต์เพื่อทำเช่นนั้น? (ใน * ระวัง)
Justin

@Justin คุณอย่างแน่นอนสามารถระบุตัวเลือกเหล่านี้ภายในไฟล์ config - ดูmongodb.org/display/DOCS/File+Based+Configuration แต่คุณยังต้องส่งไฟล์ปรับแต่งต่าง ๆ ไปยังอินสแตนซ์อื่น
dsolimano

ขอบคุณ @dsolimano ฉันมีสคริปต์สองตัวใน rc.d สำหรับ Mongo สองอินสแตนซ์ ฉันได้ระบุเส้นทางที่แตกต่างกันสำหรับ db, pid, การบันทึกและกำหนดพอร์ตต่าง ๆ ให้พวกเขาฟัง มันกำลังถูกแยกด้วยและเมื่อสคริปต์ตัวที่สองรันมันจะล้มเหลวเนื่องจาก mongo กำลังทำงานอยู่ (อินสแตนซ์แรก) ดังนั้นฉันเดาว่าคำถามจริงของฉันคือ (ครั้งที่สองไม่ได้โชคดีมากที่พบสิ่งนี้บนเว็บ) คุณสามารถมีอินสแตนซ์ที่แยกสองอันทำงานพร้อมกันได้หรือไม่? ขอบคุณ
Justin

@ จัสตินฉันคิดว่าสิ่งนี้อาจเพิ่มขึ้นถึงระดับของคำถามใหม่บางทีคุณควรถามคำถามในเว็บไซต์นี้ ดูเหมือนว่ามีบางอย่างเกี่ยวกับวิธีที่คุณเริ่ม Mongo ซึ่งเป็นสาเหตุของปัญหา
dsolimano

3

ขั้นตอนที่ฉันทำคือ:

  1. คัดลอกไฟล์ conf /etc/mongod.conf ไปยัง mongod2.conf และไปยัง mongod3.conf
  2. แก้ไขไฟล์ conf เพื่อมีพอร์ตที่แตกต่างกันและเส้นทางของฐานข้อมูลที่แตกต่างกัน
  3. คัดลอกสคริปต์เริ่มต้น init.d /etc/init.d/mongod ไปยัง mongod2 และไปยัง mongod3
  4. คัดลอกไบนารี mongod / usr / bin / mongod ไปยัง / usr / bin / mongod2 และไปยัง / usr / bin / mongod3
  5. แก้ไขสคริปต์เริ่มต้น init.d และเปลี่ยนแปลงรายการต่อไปนี้:

    กำหนดค่า = "/ etc / mongod2.conf" (mongod3.conf ตามลำดับ)

    ....

    mongod = $ {MONGOD- / usr / bin / mongod2} (mongod3 ตามลำดับ)

แทนที่ / var / lock / subsys / mongod ด้วย / var / lock / subsys / mongod2 (mongod3 ตามลำดับ) ทุกที่ที่ฉันพบ

ต้านทานการล่อลวงเพื่อแทนที่ mongod.lock ด้วย mongod2.lock (หรือเพื่อ mongod3.lock ตามลำดับ) พวกเขาอยู่ในโฟลเดอร์ที่แตกต่างกัน (โฟลเดอร์ฐานข้อมูลแตกต่างกัน) และจะไม่ขัดแย้งกัน

ตอนนี้ฉันสามารถ

service mongod start|stop|status

service mongod2 start|stop|status

service mongod3 start|stop|status

และนอกจากนี้ยังมี

mongo --port <port_number> 

สำหรับแต่ละอินสแตนซ์ mongo (จดจำการตั้งค่าพอร์ตจากไฟล์ conf)

ฉันไม่ได้ตระหนักถึงผลข้างเคียงใด ๆ ของการเปลี่ยนชื่อ mongod ไบนารี ..

หวังว่านี่จะช่วยได้

[แก้ไขในภายหลัง] หากต้องการเริ่มต้นอินสแตนซ์โดยอัตโนมัติเพียงแค่ ln -s /etc/init.d/mongod2 /etc/rc.d/rc3.d/S86mongod และ ln -s /etc/init.d/mongod3 / etc / rc .d / rc3.d / S87mongod :)


อาดี! ทำแบบเดียวกันโดยไม่โชคดีมาก่อนเพราะฉันไม่คิดว่าเราควรทำสำเนา Mongo ด้วยซ้ำ ทั้งหมดนี้ดี
Bach

ในกรณีของฉันใช้Ubuntu 16.01ไม่มีinit.dสคริปต์ คุณสามารถให้init.dเนื้อหาสคริปต์ได้หรือไม่
Shubham A.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.