mongoDB副本集實(shí)戰(zhàn)
背景
mongoDB單臺服務(wù)器的特點(diǎn):
- 數(shù)據(jù)有丟失風(fēng)險(xiǎn)
- 單臺服務(wù)器無法做高可用
mongoDB副本集的特點(diǎn):
- 高可用架構(gòu)息堂,預(yù)防數(shù)據(jù)丟失
- 多臺副本數(shù)據(jù)保持同步和一致
- mongodb副本集在有問題的時(shí)候自動(dòng)切換
實(shí)戰(zhàn)準(zhǔn)備
副本集環(huán)境配置
- 生產(chǎn)環(huán)境至少三臺服務(wù)器
機(jī)器IP
主機(jī)名
mongo端口
配置文件路徑
角色
192.168.56.11
centos7-node1
27017
/data/mongodb/27017/mongodb.conf
192.168.56.12
centos7-node2
27018
/data/mongodb/27018/mongodb.conf
192.168.56.13
centos7-node3
27019
/data/mongodb/27019/mongodb.conf
- mongo軟件:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.17.tgz
- 配置文件
- 單節(jié)點(diǎn)配置如下:
[root@centos7-node1 ~]# cd /opt/ && wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.17.tgz
[root@centos7-node1 ~]# tar xf /opt/mongodb-linux-x86_64-4.0.17.tgz
[root@centos7-node1 ~]# mv mongodb-linux-x86_64-4.0.17/ /usr/local/mongodb
[root@centos7-node1 ~]# mkdir -pv /data/mongodb/27017
[root@centos7-node1 ~]# vim /data/mongodb/27017/mongodb.conf
systemLog:
destination: file
logAppend: true
path: /data/mongodb/27017/mongodb.log
storage:
dbPath: /data/mongodb/27017/
journal:
enabled: true
processManagement:
fork: true
net:
port: 27017
bindIp: 0.0.0.0
replication:
replSetName: copySet
[root@centos7-node1 ~]# /usr/local/mongodb/bin/mongod -f /data/mongodb/27017/mongodb.conf #啟動(dòng)服務(wù)
[root@centos7-node1 ~]# netstat -tanlp | grep mongo #進(jìn)程查看
- 其他節(jié)點(diǎn)的配置只需要修改端口即可,然后修改配置文件,日志目錄即可,下面是服務(wù)啟動(dòng)命令
[root@centos7-node2 ~]# /usr/local/mongodb/bin/mongod -f /data/mongodb/27018/mongodb.conf
[root@centos7-node3 ~]# /usr/local/mongodb/bin/mongod -f /data/mongodb/27019/mongodb.conf
副本集初始化
需要注意的事項(xiàng):
- 隨便登錄到一個(gè)mongdb
[root@centos7-node1 27017]# /usr/local/mongodb/bin/mongo localhost:27017 #登陸到第一臺
> config={
_id: "copySet",members:[
{_id:0,host:"192.168.56.11:27017"},
{_id:1,host:"192.168.56.12:27018"},
{_id:2,host:"192.168.56.13:27019"},
]
}
> rs.initiate(config)
> rs.status()
測試副本集的數(shù)據(jù)同步
- 插入數(shù)據(jù)只能從Primary進(jìn)行荣堰,Secondary只能讀取數(shù)據(jù)
copySet:PRIMARY> use test
copySet:PRIMARY> db.myuser.insert({userid:1})
- 從庫查詢數(shù)據(jù)讀取: 無異常則ok
copySet:SECONDARY> rs.slaveOk()
copySet:SECONDARY> show dbs
copySet:SECONDARY> use test
copySet:SECONDARY> db.myuser.find()
copySet:SECONDARY> rs.printSlaveReplicationInfo() #查看從庫延時(shí)
副本集的自動(dòng)切換
- 當(dāng)primary掛了床未,會(huì)選舉其中的一臺作為primary
- 如果集群之剩下一個(gè)實(shí)例的話,會(huì)出異常:(只有一臺的話就是)
# 登陸primary振坚,然后停服務(wù)
copySet:PRIMARY> use admin
copySet:PRIMARY> db.shutdownServer()
其余兩臺會(huì)選舉primary節(jié)點(diǎn)
通過優(yōu)先級指定primary
- 默認(rèn)的優(yōu)先權(quán)重都是1
- 副本集中的primary是選的權(quán)重最高的
- 優(yōu)先級權(quán)重設(shè)置如下[在primary節(jié)點(diǎn)設(shè)置]:
copySet:PRIMARY> conf = rs.config()
copySet:PRIMARY> conf.members[0].priority = 5
copySet:PRIMARY> conf.members[1].priority = 4
copySet:PRIMARY> conf.members[2].priority = 3
copySet:PRIMARY> rs.reconfig(conf)
副本集的伸縮
- mongoDB副本集的拓展性非常好薇搁,往副本集里添加實(shí)例和刪除實(shí)例都很方便
- 添加副本集數(shù)據(jù)能夠自動(dòng)同步
- 準(zhǔn)備一個(gè)新的機(jī)器和副本,設(shè)置端口和配置文件是27020,還有副本名稱
- 集群中添加副本集是在primary上操作渡八,步驟如下
[root@centos7-node4 ~]# vim /data/mongodb/27020/mongodb.conf
systemLog:
destination: file
logAppend: true
path: /data/mongodb/27020/mongodb.log
storage:
dbPath: /data/mongodb/27020/
journal:
enabled: true
processManagement:
fork: true
net:
port: 27020
bindIp: 0.0.0.0
replication:
replSetName: copySet
[root@centos7-node4 ~]# /usr/local/mongodb/bin/mongod -f /data/mongodb/27020/mongodb.conf #啟動(dòng)新節(jié)點(diǎn)
copySet:PRIMARY> rs.add('192.168.56.14:27020') #primary節(jié)點(diǎn)加入新的節(jié)點(diǎn)啃洋,然后數(shù)據(jù)自動(dòng)同步
copySet:PRIMARY> rs.remove('192.168.56.14:27020') #移除secondary
mongoDB的備份和恢復(fù)
單臺服務(wù)器,一定要備份
-
備份還原工具有:
- mongodump: 備份
- mongostore: 還原
副本集的備份要在primary上進(jìn)行
全量備份與還原
~]# mkdir /data/mongodbbacku
~]# /usr/local/mongodb/bin/mongodump -h 127.0.0.1:27020 -o /data/mongodbbackup/ #備份數(shù)據(jù)
~]# /usr/local/mongodb/bin/mongorestore -h 127.0.0.1 --port 27021 /data/mongodbbackup/ #還原數(shù)據(jù)