您的位置:首页 > 数据库 > Mongodb

Mongodb 3.x 多副本集群配置

2017-03-09 15:21 330 查看
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)创建用户及权限

[b]step1. 选择一台机器(以101为例),修改配置文件,去掉集群相关的配置后启动mongod[/b]

port=27017
logpath=/mongodb/mongodb.log
logappend=true
dbpath=/mongodb/data
#fork=true
#replSet=rs0
#auth = true
#keyFile=/mongodb/etc/mongo.pass


[b]step2. 使用mongo客户端连接服务器后,创建admin账户,并给予userAdminAnyDatabase + clusterAdmin
4000
角色[/b]

use admin
db.createUser({
user: 'admin',
pwd: 'admin',
roles: [{
role: 'userAdminAnyDatabase',
db: 'admin'
},
{
role: 'clusterAdmin',
db: 'admin'
}]
})


[b]step3. 修改101机器的配置文件后重启mongod[/b]

修改后配置文件如下

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()


[b]step4. 启动并配置集群[/b]

启动102,103后,使用mongo客户端连接101,并构建集群

use admin
db.auth('admin','admin')        #使用admin登录
rs.initiate()                   #初始化集群
rs.add("mongdb2.app.company")   #添加集群成员,使用hostname
rs.add("mongdb3.app.company")


[b]step5. 验证集群[/b]

分别登录101,102,103,可以看到

101 rs0:PRIMARY>

102 rs0:SECONDARY>

103 rs0:SECONDARY>

则说明集群已经搭建完毕,主从状态已经确定。

[b]step6. 设置从库可读[/b]

默认SECONDARY是不可读的,在从库上执行如下命令

use admin
db.auth('admin','admin')
db.getMongo().setSlaveOk()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: