複製集-Replica Set
- mongodb集群所有實例需要啟動,mongodb副本集才能成功啟動 https://www.tutorialkart.com/mongodb/setup-mongodb-replica-set/https://gist.github.com/davisford/bb37079900888c44d2bbcb2c52a5d6e8https://www.jianshu.com/p/beebe1f50fc3
Replicat Set 設置步驟
- 在所有電腦主機安裝mongodb,並且各個主機創建三個mongod配置文件,主機1 /etc/mongod.rs0.conf,主機2 /etc/mongod.rs1.conf,主機3 /etc/mongod.rs2.conf
- 創建三個dbpath資料夾,systemlog path(系統日誌文件),並且各個主機創建三個replica set數據資料夾,主機1 /var/lib/rs0/data/db,主機2 /var/lib/rs1/data/db,主機3 /var/lib/rs2/data/db
- 分別啟動三個mongod process,sudo mongod --config /etc/mongod.rs0.conf, ...
- 主機1連線mongo sudo mongod --host 127.0.0.1 --port 27021
- 初始化副本集,rs.initiate()
- 加入節點 rs.add("127.0.0.1:27022"), rs.add("127.0.0.1:27023")
- 查看副本集狀態 rs.status()
- secondary 節點要能讀數據,進入secondary節點,mongod --host 127.0.0.1 --port 27022
- 選擇數據庫名 use thrilled, 執行設置讀取權限 db.getMongo().setSlaveOk()
安裝步驟
- 在所有電腦主機安裝mongodb
- 編輯 /etc/hosts 127.0.0.1 mongodb-a1 192.168.249.101 mongodb-a1 192.168.249.102 mongodb-a2 192.168.249.103 mongodb-a3
- 建立存放replica set數據資料夾
mkdir -p /var/lib/mongodb-rs-a
sudo chown -R mongodb:mongodb /var/lib/mongodb-rs-a
編輯配置文檔/etc/mongod.conf storage: dbPath: /var/lib/mongodb-rs-a net: port: 27080 bindIp: 0.0.0.0
重新啟動mongodb sudo service mongod restart
創建用戶
mongod
use admin
db.createUser({
user:'username1',
pwd:'ijk123',
role:[{role: "userAdminAnyDatabase", db:"admin"}]
})
db.createUser({
user:"username2",
pwd:"ijk123",
roles:[{role: "root", db:"admin"}]
})
- 生成密鑰並複製到每一台主機
openssl rand -base64 1024 > mongodb-key
sudo chmod 600 mongodb-key
sudo chown mongodb.mongodb ./mongodb-key
copy duplicates to all instances for replicat set
- 編輯 /etc/mongod.conf,啟用驗證,security replication
- 啟動所有主機的mongodb
- 進入每台主機terminal啟動Mongodb服務
mongo --host 192.168.249.101 --port 27080 -u 'username1' -p 'ijk123' --authenticationDatabase "admin"
- 主節點mongodb機器Terminal輸入
rs.initiate()
- 接著在主節點mongodb機器加入其他節點位置,Terminal輸入依序輸入
rs.conf()
rs.add("192.168.249.102:27080")
rs.add("192.168.249.103:27080")
- 查看副本集集群狀態在Terminal輸入
rs.status()
MongoDB配置文件 mongod.conf
# Where and how to store data.
storage:
dbPath: /var/lib/rs0/data/db
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/rs0/mongod.log
# network interfaces
net:
port: 27080
bindIp: 0.0.0.0
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
#security:
# keyFile: /home/replica1
#operationProfiling:
replication:
replSetName: "rs1"
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
插入資料測試
啟動
sudo mongo --host 192.168.249.101 --port 27080 -u "Nick" -p "nick0323" --authenticationDatabase "admin"
insert data
use replicatest
db.collection.insert({
item:"canvas", qty:100,material: ["cotton"], size:{w:55,h:30,ucom:"cm"}
})
db.collection.find()
connect to primary database to read data
rs0:SECONDARY> db.getMongo().setReadPref('secondaryPreferred')
or
rs0:SECONDARY> db.getMongo().setSlaveOk()
options to split read/write
在mongoose options配置
readPreference: "secondaryPreferred"