簡體   English   中英

單機MongoDB副本集

[英]MongoDB replica set on single machine

我有一個在服務器上運行的 Linux 實例(即沒有虛擬化)。 我有一個正在運行的mongod實例。 轉向生產我想實現副本集。 我讀過的所有內容都是關於在多台機器上運行mongod

我知道這可能不是最佳實踐,但是是否可以運行同一台機器的副本集。 此外,該機器有兩個硬盤驅動器。 我希望主數據庫位於第一個 HD 上,副本集位於第二個硬盤驅動器上。

這個設置可以嗎?

是的,可以在一台機器上設置和運行副本,這就是我進行測試的方式:

  1. 按照官方說明在您的機器上安裝 mongodb-org 並確保它正常啟動。
  2. 然后停止實例進程: sudo systemctl stop mongod
  3. 您現在可以通過以下鏈接使用 --replSet 選項啟動一個新實例。 此外,為了讓它在后台運行,您可以使用 --fork 和 --logpath 創建子進程:
     mongod --fork --port 27017 --dbpath /var/lib/mongodb --logpath /var/log/mongodb/mongo_0.log --replSet rs0 --bind_ip localhost,<Your machine's IP address>
  4. 然后連接到實例並在 Mongo shell 中啟動副本集:
     mongo --port 27017 >rs.initiate()
  5. 如果您想停止該過程,請執行ps aux | grep mongod ps aux | grep mongod然后kill -9 <pid>

這是我在 Ubuntu 上的做法。 我想在第二個實例中使用 systemd。

復制我們現有的 MongoDB 配置:

sudo cp /etc/mongod.conf /etc/mongod_repl.conf

sudo pico /etc/mongod_repl.conf

更改這些行:

storage:
  dbPath: /var/lib/mongodb_repl

systemLog:
  path: /var/log/mongodb/mongod_repl.log

net:
  port: 27018

replication:
  replSetName: rs0

創建目錄和文件,並分配權限

sudo mkdir /var/lib/mongodb_repl
sudo chown mongodb:mongodb /var/lib/mongodb_repl
sudo touch /var/log/mongodb/mongod_repl.log
sudo chown mongodb:mongodb /var/log/mongodb/mongod_repl.log

復制我們現有的啟動文件:

sudo cp /lib/systemd/system/mongod.service /etc/systemd/system/mongod_repl.service

如果找不到 mongod.service,請sudo systemctl status mongod 看起來像:

已加載:已加載(/lib/systemd/system/mongod.service;已禁用;供應商預設:已啟用)

sudo pico /etc/systemd/system/mongod_repl.service

更改這些行:

ExecStart=/usr/bin/mongod --config /etc/mongod_repl.conf
PIDFile=/var/run/mongodb/mongod_repl.pid

讓 systemctl 知道我們做了一些改變: sudo systemctl daemon-reload

嘗試啟動我們的第二台服務器:

sudo systemctl start mongod_repl
sudo systemctl status mongod_repl

如果它沒有運行,請查看日志:

sudo tail -n100 /var/log/mongodb/mongod_repl.log
sudo journalctl -n100 -u mongod_repl

(您可以向其中任何一行添加-f以拖尾日志)

登錄mongo --port 27018

偉大的! 現在您已經啟動並運行了第二個 MongoDB 服務器。

配置您的原始服務器以使用相同的復制集: sudo pico /etc/mongod.conf

添加這個:

replication:
   replSetName: rs0

重啟 MongoDB sudo systemctl restart mongod

現在您應該能夠在主服務器上完成 rs.initiate() 的過程,然后將127.0.0.1:27018添加為您的輔助服務器。

對的,這是可能的。

  1. 創建腳本: sudo nano mongod.sh
  2. 復制和粘貼:
sudo mongod --port 27017 --dbpath /var/lib/mongodb --replSet rs0 --bind_ip_all &
sudo mongod --port 27018 --dbpath /var/lib/mongodb2 --replSet rs0 --bind_ip_all &
sudo mongod --port 27019 --dbpath /var/lib/mongodb3 --replSet rs0 --bind_ip_all &
  1. 允許腳本執行: sudo chmod +x mongod.sh

  2. 運行腳本: ./mongod.sh

  3. 在主 mongo 服務器中初始化副本集:

$ mongo
> rs.initiate()

output
{
 "info2" : "no configuration specified. Using a default configuration for the set",
 "me" : "<<YOUR_IP>>:27017",
 "ok" : 1
}
rs0:SECONDARY> rs.add('<<YOUR_IP>>:27018')
{ "ok" : 1 }
rs0:PRIMARY> rs.add('<<YOUR_IP>>:27019')
{ "ok" : 1 }

現在,使用您的連接字符串進行測試。

連接字符串

mongodb://<YOUR_IP>:27017,<YOUR_IP>:27018,<YOUR_IP>:27019/<DB>?replicaSet=rs0&readPreference=secondary

注意:如果您在本地系統中進行測試,則出於安全原因刪除--bind_ip_all選項。

選項

--port: Specify port --dbpath: Path where the mongod instance stores its data --replSet: Replica set name --bind_ip_all: Allow remote connections

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM