mongodb副本集

2018年11月18日 Off By yyy

mongodb单台服务器

数据会有丢失的风险

单台服务器无法做高可用性

mongodb副本集能够预防数据丢失,多台mongodb数据一致

mongodb副本集能够在有问题的时候自动切换

实战

使用两台服务器实战mongodb副本集,生产环境中建议至少三台服务器

两台服务器的ip为:192.168.237.128、192.168.237.129

集群搭建实战192.168.237.128:27017 192.168.237.129:27018 192.168.237.128:27019

 

mongodb副本集配置文件/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: shijiange

 

启动三个mongodb服务器,需要对应更改端口、数据目录、日志路径

/usr/local/mongodb/bin/mongod -f /data/mongodb-cluster/27017/mongodb.conf

/usr/local/mongodb/bin/mongod -f /data/mongodb-cluster/27018/mongodb.conf

/usr/local/mongodb/bin/mongod -f /data/mongodb-cluster/27019/mongodb.conf

 

mongodb副本集的初始化及其状态查看

config = { _id:”shijiange”, members:[

{_id:0,host:”192.168.1.58:27017″},

{_id:1,host:”192.168.1.58:27018″},

{_id:2,host:”192.168.1.58:27019″}]

}

use admin

rs.initiate( config ) #副本集初始化,需要一定时间

rs.status()  #副本集状态,一个primary,其它SECONDARY。primary是主,只有primary能写入

 

测试副本集的数据同步

/usr/local/mongodb/bin/mongo

use shijiange

db.myuser.insert( {userid: 1} )

rs.slaveOk() #SECONDARY需要声明是slave才能查看数据

从库无法插入数据

 

查看slave的延时情况

rs.printSlaveReplicationInfo()

 

优化参数要保持一致

 

mongodb副本集伸缩说明

mongodb副本集的扩展非常好,往副本集里添加实例和移除实例都非常方便

往mongodb副本集添加实例数据能够自动同步,无需人工干预

 

往现有mongodb副本集中添加实例

创建27020实例,注意副本集名称要保持一致replSetName: shijiange

use admin

rs.add(‘192.168.237.129:27020’) #数据是自动同步

rs.add的优先权重默认为1

 

从mongodb副本集中移除实例,不可移除primary

use admin

rs.remove(‘192.168.237.128:27019’)

 

副本集经过添加删除后顺序会乱,设置权重需要注意

rs.config() #获取到后,需要注意每个实例的位置