mongodb副本集(replSet)

一般的主从复制是指定好哪个是主,哪个是从。而replSet则不需具体指定哪台主库,自动分配。如果分配的库宕掉,另个一台则自动成为主库并提供服务。

192.168.7.221上使用27018、27019、27020三个端口分别为server1、server2和vote(仲裁)server。

下面为三个服务的数据、日志及配置文件目录

ll /home/mongo
drwxr-xr-x. 4 root root 4096 Aug 27 15:25 27018
drwxr-xr-x. 4 root root 4096 Aug 27 15:26 27019
drwxr-xr-x. 4 root root 4096 Aug 27 15:31 27020
cd /home/mongo
ll 270*
27018:
drwxr-xr-x. 3 root root 4096 Aug 27 15:39 data
drwxr-xr-x. 2 root root 4096 Aug 27 15:26 log
-rw-r--r--. 1 root root  222 Aug 27 15:25 mongo27018.cnf

27019:
drwxr-xr-x. 4 root root 4096 Aug 27 15:37 data
drwxr-xr-x. 2 root root 4096 Aug 27 15:23 log
-rw-r--r--. 1 root root  137 Aug 27 15:22 mongo27019.cnf

27020:
drwxr-xr-x. 4 root root 4096 Aug 27 15:32 data
drwxr-xr-x. 2 root root 4096 Aug 27 15:32 log
-rw-r--r--. 1 root root  137 Aug 27 15:28 mongo27020.cnf
启动参数写于配置文件,此模式的主要参数就是replSet,参数值为:自定义名称、其它服务的服务器IP及端口,仲裁服务指定server1、server2中的一个即可。

1、启动server1

mongod -f mongo27018.cnf
cat 27018/mongo27018.cnf 
port=27018
dbpath=/home/mongo/27018/data/  
logpath=/home/mongo/27018/log/mongodb.log  
logappend=true
replSet=myset/192.168.7.221:27019
 

2、启动server2

mongod -f 27019/mongo27019.cnf 
cat 27019/mongo27019.cnf 
port=27019
dbpath=/home/mongo/27019/data/  
logpath=/home/mongo/27019/log/mongodb.log  
logappend=true
replSet=myset/192.168.7.221:27018

3、连接任意一个服务,初始化replset

mongo 192.168.7.221:27018/admin --quiet
> db.runCommand({"replSetInitiate":{"_id":"myset","members":[{"_id":1,"host":"192.168.7.221:27018"},{"_id":2,"host":"192.168.7.221:27019"}]}})
{ "ok" : 1 }
myset:OTHER> 
myset:PRIMARY>

说明:初始化后提示符自动修改,primary和secondary。其中primary对外提供服务,secondary作为从库同步相关操作

mongo 192.168.7.221:27019 --quiet
myset:SECONDARY>

4、启动vote server

mongod -f 27020/mongo27020.cnf
cat 27020/mongo27020.cnf 
port=27020
dbpath=/home/mongo/27020/data/  
logpath=/home/mongo/27020/log/mongodb.log  
logappend=true
replSet=myset/192.168.7.221:27018<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
 
 5、添加仲裁服务,并查看状态,rs.statu也可以看出哪个是主,哪个是从,哪个用于仲裁 
myset:PRIMARY> rs.addArb("192.168.7.221:27020")
{ "ok" : 1 }
myset:PRIMARY> rs.status()
{
        "set" : "myset",
        "date" : ISODate("2015-08-27T07:33:42.964Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 1,
                        "name" : "192.168.7.221:27018",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 439,
                        "optime" : Timestamp(1440660804, 1),
                        "optimeDate" : ISODate("2015-08-27T07:33:24Z"),
                        "electionTime" : Timestamp(1440660594, 1),
                        "electionDate" : ISODate("2015-08-27T07:29:54Z"),
                        "configVersion" : 2,
                        "self" : true
                },
                {
                        "_id" : 2,
                        "name" : "192.168.7.221:27019",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 232,
                        "optime" : Timestamp(1440660804, 1),
                        "optimeDate" : ISODate("2015-08-27T07:33:24Z"),
                        "lastHeartbeat" : ISODate("2015-08-27T07:33:42.051Z"),
                        "lastHeartbeatRecv" : ISODate("2015-08-27T07:33:42.529Z"),
                        "pingMs" : 0,
                        "syncingTo" : "192.168.7.221:27018",
                        "configVersion" : 2
                },
                {
                        "_id" : 3,
                        "name" : "192.168.7.221:27020",
                        "health" : 1,
                        "state" : 7,
                        "stateStr" : "ARBITER",
                        "uptime" : 18,
                        "lastHeartbeat" : ISODate("2015-08-27T07:33:42.094Z"),
                        "lastHeartbeatRecv" : ISODate("2015-08-27T07:33:42.101Z"),
                        "pingMs" : 4,
                        "configVersion" : 2
                }
        ],
        "ok" : 1
}

关掉主库,从库自动切为主库。

参考:http://www.cnblogs.com/huangxincheng/archive/2012/03/04/2379755.html

疑问:发现从库宕掉,主库切为从库,之后不能对外提供服务?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上海阿丽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值