1主2从的模式在数据量不大的情况下完全能满足生产要求,所以考虑生产上使用mongodb首先应该是搭建3副本的集群。
1. Mongodb多副本集群基本概念
Mongodb在多副本集群(Replic set)中,提供了自动Failover机制。Replic set会自动选举一个可写的PRIMARY(Master),其他机器为SECONDARY(Slave)。如果PRIMARY不能提供服务时,会重新选举。具体原理
2. 集群搭建步骤
1)为每台机器配置HostName
假设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
2)配置文件
port=27017
logpath=/mongodb/mongodb.log
logappend=true
dbpath=/mongodb/data
fork=true
replSet=rs0
#auth = true
keyFile=/mongodb/etc/mongo.pass
以上配置分发到3台服务器上。
replSet:集群名字
keyFile:集群间通讯密码文件,3台机器使用同样的文件
3)创建keyFile
openssl rand -base64 521 > /mongod/etc/mongo.pass
chmod 600 /mongod/etc/mongo.pass
将mongo.pass文件同步到3台机器/mongod/etc目录下。
4)创建用户及权限
step1. 选择一台机器(以101为例),修改配置文件,去掉集群相关的配置后启动mongod
port=27017
logpath=/mongodb/mongodb.log
logappend=true
dbpath=/mongodb/data
#fork=true
#replSet=rs0
#auth = true
#keyFile=/mongodb/etc/mongo.pass
step2. 使用mongo客户端连接服务器后,创建admin账户,并给予userAdminAnyDatabase + clusterAdmin角色
use admin
db.createUser({
user: 'admin',
pwd: 'admin',
roles: [{
role: 'userAdminAnyDatabase',
db: 'admin'
},
{
role: 'clusterAdmin',
db: 'admin'
}]
})
step3. 修改101机器的配置文件后重启mongod
修改后配置文件如下
port=27017
logpath=/mongodb/mongodb.log
logappend=true
dbpath=/mongodb/data
fork=true
replSet=rs0
auth = true
keyFile=/mongodb/etc/mongo.pass
ps. 关闭mongod的方法
#操作系统kill命令
kill `ps -ef | grep mongo | grep -v grep | awk '{print $2}'`
#客户端方式
use admin
db.shutdownServer()
step4. 启动并配置集群
启动102,103后,使用mongo客户端连接101,并构建集群
use admin
db.auth('admin','admin') #使用admin登录
rs.initiate() #初始化集群
rs.add("mongdb2.app.company") #添加集群成员,使用hostname
rs.add("mongdb3.app.company")
step5. 验证集群
分别登录101,102,103,可以看到
101 rs0:PRIMARY>
102 rs0:SECONDARY>
103 rs0:SECONDARY>
则说明集群已经搭建完毕,主从状态已经确定。
step6. 设置从库可读
默认SECONDARY是不可读的,在从库上执行如下命令
use admin
db.auth('admin','admin')
db.getMongo().setSlaveOk()