[英]MongoDB replica set on single machine
我有一個在服務器上運行的 Linux 實例(即沒有虛擬化)。 我有一個正在運行的mongod
實例。 轉向生產我想實現副本集。 我讀過的所有內容都是關於在多台機器上運行mongod
。
我知道這可能不是最佳實踐,但是是否可以運行同一台機器的副本集。 此外,該機器有兩個硬盤驅動器。 我希望主數據庫位於第一個 HD 上,副本集位於第二個硬盤驅動器上。
這個設置可以嗎?
是的,可以在一台機器上設置和運行副本,這就是我進行測試的方式:
sudo systemctl stop mongod
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>
mongo --port 27017 >rs.initiate()
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
添加為您的輔助服務器。
對的,這是可能的。
sudo nano mongod.sh
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 &
允許腳本執行: sudo chmod +x mongod.sh
運行腳本: ./mongod.sh
在主 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.