Mongodb在多副本集群(Replic set)中,提供了自动Failover机制。Replic set会自动选举一个可写的PRIMARY(Master),其他机器为SECONDARY(Slave)。如果PRIMARY不能提供服务时,会重新选举。具体原理
假设mongo集群搭建在如下3台机器上 172.16.48.101 172.16.48.102 172.16.48.103
在/etc/hosts 文件中追加: 172.16.48.101 mongdb1.app.company 172.16.48.102 mongdb2.app.company 172.16.48.103 mongdb3.app.company
以上配置分发到3台服务器上。 replSet:集群名字 keyFile:集群间通讯密码文件,3台机器使用同样的文件
将mongo.pass文件同步到3台机器/mongod/etc目录下。
修改后配置文件如下
port=27017 logpath=/mongodb/mongodb.log logappend=true dbpath=/mongodb/data fork=true replSet=rs0 auth = true keyFile=/mongodb/etc/mongo.passps. 关闭mongod的方法
#操作系统kill命令 kill `ps -ef | grep mongo | grep -v grep | awk '{print $2}'` #客户端方式 use admin db.shutdownServer()启动102,103后,使用mongo客户端连接101,并构建集群
use admin db.auth('admin','admin') #使用admin登录 rs.initiate() #初始化集群 rs.add("mongdb2.app.company") #添加集群成员,使用hostname rs.add("mongdb3.app.company")分别登录101,102,103,可以看到 101 rs0:PRIMARY> 102 rs0:SECONDARY> 103 rs0:SECONDARY> 则说明集群已经搭建完毕,主从状态已经确定。
默认SECONDARY是不可读的,在从库上执行如下命令
use admin db.auth('admin','admin') db.getMongo().setSlaveOk()