MongoDb在LInux环境下配置Replica Sets复制集

mongodb中文社区:http://www.mongoing.com/docs/tutorial/add-replica-set-arbiter.html

MongoDB支持多个机器中通过异步复制达到故障转移和实现冗余。多机器中同一时刻只 有一台是用于写操作。正是由于这个情况,为 MongoDB 提供了数据一致性的保障。担当 Primary 角色(负责写入)的机器能把读操作分发给 slave。

本次搭建用三台机器来搭建这个复制集,其中一台primary(192.168.1.142:27017),一台secondary(192.168.1.140:27077),一台ARBITER(192.168.1.129:27088)。有一点要注意,如果复制集节点是偶数,一定要设置投票节点,不然无法确认主节点。
一、创建文件存储路径
三台机器都配置一样的路径,所以分别在三台机器创建对应目录:
mkdir -p /usr/local/mongodb/data
mkdir -p /usr/local/mongodb/logs

二、创建内部验证keyFile
1、用ssl生成key
openssl rand -base64 756 > /usr/local/mongodb/data/key/mongokey
2、设置只读权限,否则可能导致启动失败
chmod 400 /usr/local/mongodb/data/key/mongokey  
 3、只需生成一次keyFile文件,然后拷到对应的其他机器上,保证机器都用的同一份keyFile,权限都是只读
三、创建配置文件

配置1:primary(192.168.1.142:27017)
 vi /usr/local/mongodb/bin/mongodb.cnf


dbpath = /usr/local/mongodb/data/db #数据文件存放目录
logpath = /usr/local/mongodb/logs/mongodb.log #日志文件存放目录
port = 27017 #端口
fork = true#以守护程序的方式启用,即在后台运行
#auth=true #需要认证。如果放开注释,就必须创建MongoDB的账号,使用账号与密码才可远程访问>,第一次安装建议注释
replSet=rss
bind_ip=0.0.0.0 #允许远程访问,或者直接注释,127.0.0.1是只允许本地访问.
keyFile=/usr/local/mongodb/data/key/mongokey


配置2:secondary(192.168.1.140:27077)
 vi /usr/local/mongodb/bin/mongodb.cnf


dbpath = /usr/local/mongodb/data/db #数据文件存放目录
logpath = /usr/local/mongodb/logs/mongodb.log #日志文件存放目录
port = 27077 #端口
fork = true#以守护程序的方式启用,即在后台运行
#auth=true #需要认证。如果放开注释,就必须创建MongoDB的账号,使用账号与密码才可远程访问>,第一次安装建议注释
replSet=rss
bind_ip=0.0.0.0 #允许远程访问,或者直接注释,127.0.0.1是只允许本地访问.
keyFile=/usr/local/mongodb/data/key/mongokey

配置3:ARBITER(192.168.1.129:27088)
 vi /usr/local/mongodb/bin/mongodb.cnf


dbpath = /usr/local/mongodb/data/db #数据文件存放目录
logpath = /usr/local/mongodb/logs/mongodb.log #日志文件存放目录
port = 27088 #端口
fork = true#以守护程序的方式启用,即在后台运行
#auth=true #需要认证。如果放开注释,就必须创建MongoDB的账号,使用账号与密码才可远程访问>,第一次安装建议注释
replSet=rss
bind_ip=0.0.0.0 #允许远程访问,或者直接注释,127.0.0.1是只允许本地访问.
keyFile=/usr/local/mongodb/data/key/mongokey


三、分别启动三个mongod,进入需要设置为主的机器上执行初始化
./mongod  -f  mongodb.cnf
./mongod  -f  mongodb.cnf
./mongod  -f  mongodb.cnf
 mongo -port 27017
 mongo -port 27077
 mongo -port 27088

在27017设置主机器并初始化
 mongo -port 27017
> cfg={ _id:"rss", members:[ {_id:0,host:'192.168.1.142:27017',priority:2}, {_id:1,host:'192.168.1.140:27077',priority:1}, {_id:2,host:'192.168.1.129:27088',arbiterOnly:true}] };
初始化:> rs.initiate(cfg)

四、查看状态
 rs:PRIMARY> rs.status();
"stateStr" : "PRIMARY" 可以看出谁是主库
注意:如果出现报错    "codeName" : "Unauthorized",说明权限不够,需要创建权限用户,然后授权认证就可以了
use admin
db.createUser({user: "root",pwd: "2222",roles: [ { role: "root", db: "admin" } ]})
use admin
        db.auth('root','2222')

五、管理维护 Replica Sets
一开始在主库27017插入数据,从库27077是查不到数据的比如:
1、先向主库插入数据
[root@localhost bin]# mongo -port 27017
rs:PRIMARY> db.c1.insert({age:30})
rs:PRIMARY> db.c1.find()
{ "_id" : ObjectId("5dba993160e80fccf5f22611"), "age" : 30 }

2、在从库进行查询等操作
[root@localhost bin]# mongo -port 27077
rs2:SECONDARY> show collections
或报错 "not master and slaveok=false"
所以执行 db.getMongo().setSlaveOk(), 我们就可查询从库了。

六、故障转移
复制集比传统的 Master-Slave 有改进的地方就是他可以进行故障的自动转移,如果我们停掉 复制集中的一个成员,那么剩余成员会再自动选举出一个成员,做为主库

七、增减节点
增加节点:重复步骤一、二,第三步骤改为在主库执行  rs.add("localhost:27074")
减少节点: rs.remove("localhost:27074")


带认证登录客户端 ./mongo  -authenticationDatabase admin -u root -p 123456

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值