mongodb的副本集可以很方便的做到数据实时同步到所有主机。比mysql使用更加方便。
副本集至少需要2台主机,一台为主(primary),一台为从(slave),如果多台主机,则一台为主,其他都是从。当主服务器发生故障时,从服务器会探测到并共同选举出一个新的主服务器,从而保证服务不间断,当然为了程序也要相应配合,如mongodb配置多个服务器。
注意:2台服务器时,如果主服务器故障,剩下从服务器也无法提升为主服务器,而是不再提供写入服务。如果从服务器故障,主服务器自动变为从服务器,也无法提供写入服务。所以2台主机时只是为了数据冗余而设置的。
设置方法:
1、2台服务器配置文件完全相同:
vim mongod.conf
systemLog:
destination: file
logAppend: true
path: /web/mongodb/mongod.log
storage:
dbPath: /web/mongodb/data
journal:
enabled: true
net:
port: 27017
bindIp: 0.0.0.0
security:
keyFile: "/web/mongodb/mongodb.key"
clusterAuthMode: "keyFile"
authorization: enabled
processManagement:
fork: true
replication:
oplogSizeMB: 2048
replSetName: rs
注意:使用认证登录需要进行用户权限设置,见:https://canlynet.iteye.com/blog/2436380
2、这里使用了认证登录,所以,还需要创建认证文件mongodb.key:
openssl rand -base64 666 > /web/mongodb/mongodb.key
将这个key文件复制到所有从主机上。
3、添加节点:
rs.initiate({_id: 'rs', members: [
{_id: 0, host: '192.168.1.8:27017'},
{_id: 1, host: '192.168.1.9:27017'}
]});
如果还需要添加: rs.add('192.168.1.10:27017'), _id会自动增加1.
4、查看状态: rs.status()
修改优先级,需要在Mongodb的Primary端执行:
config=rs.conf()
config.members[0].priority = 100;
config.members[1].priority = 1;
rs.reconfig(config)
如果当前primary不是第0个成员,那么停掉primary即可将第0个成员设置为primary。