MongoDB副本集 ----集群

本文详细介绍如何在三台虚拟机上配置MongoDB副本集,包括安装MongoDB、设置环境变量、配置副本集参数、初始化ReplicaSets环境、查看状态信息及数据同步验证等关键步骤。

准备三台虚拟机,配置mongodb副本集,ip分别为192.158.4.51, 192.168.4.52,192.168.4.53其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据,实现存储数据副本,提高了数据的可用性,具体分配如表-1所示:

在这里插入图片描述

步骤一:创建mongodb副本集

1)三台主机安装mongodb(以4.51为例)

[root@mongodb51 ~]# cd mongodb/
[root@mongodb51 mongodb]#  mkdir  /usr/local/mongodb
[root@mongodb51 mongodb]# cd /usr/local/mongodb
[root@mongodb51 mongodb]# cp -r  /root/mongodb/mongodb-linux-x86_64-rhel70-3.6.3/bin/  .
[root@mongodb51 mongodb]# ls
bin

[root@mongodb51 mongodb]# mkdir etc
[root@mongodb51 mongodb]# mkdir log
[root@mongodb51 mongodb]# mkdir -p data/db

[root@mongodb51 mongodb]# vim etc/mongodb.conf
dbpath=/usr/local/mongodb/data/db/
logpath=/usr/local/mongodb/log/mongodb.log
logappend=true 
fork=true
bind_ip=192.168.4.51
port=27077
replSet=rs1        
//加入到副本集,rs1名字随便起,想知道谁和我在一个副本集里,三台机器的名字一样,都写rs1

2)设置PATH变量

[root@mongodb51 mongodb]# vim /etc/profile
export PATH=/usr/local/mongodb/bin:$PATH
[root@mongodb51 mongodb]# source  /etc/profile

3)由于启动和停止服务名字太长,可以起一个别名

给停止服务起一个别名

[root@mongodb51 mongodb]# alias cmdb='mongod  --dbpath=/usr/local/mongodb/data/db/  --shutdown'

给启动服务起一个别名

[root@mongodb51 mongodb]# alias smdb='mongod -f /usr/local/mongodb/etc/mongodb.conf'

4)启动服务并连接

[root@mongodb51 ~]# mongo --host 192.168.4.51 --port 27077

5)配置集群信息,任意一台都可以,在这里在51上面操作

> rs1_config = {        //rs1_config随便起变量名,要记住
_id:"rs1",         //必须为rs1这个,三台主机集群名,配置文件里面写的是这个
members:[
{_id:0,host:"192.168.4.51:27077"},        //_id值随意,host值固定
{_id:1,host:"192.168.4.52:27078"},
{_id:2,host:"192.168.4.53:27079"}
]
};        //回车,出现下面情况为成功
{
   "_id" : "rs1",
   "members" : [
    {
        "_id" : 0,
        "host" : "192.168.4.51:27077"
    },
    {
        "_id" : 1,
        "host" : "192.168.4.52:27078"
    },
    {
        "_id" : 2,
        "host" : "192.168.4.53:27079"
    }
]
}

6)初始化Replica Sets环境

> rs.initiate(rs1_config)
{
    "ok" : 1,
    "operationTime" : Timestamp(1538187475, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1538187475, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}

rs1:SECONDARY> 
rs1:PRIMARY>            //提示PRIMARY,51为主

7)在52和53上面查看

[root@mongodb52 ~]# mongo --host 192.168.4.52 --port 27078
... 
rs1:SECONDARY>         //提示SECONDARY,52为从
rs1:SECONDARY> 
rs1:SECONDARY>


[root@192 ~]# mongo --host 192.168.4.53 --port 27079
... 
rs1:SECONDARY>     //提示SECONDARY,53为从
rs1:SECONDARY>

注意:如果初始化错误,重启服务登陆之后重新设置变量,之后再重新初始化

8)查看状态信息

 rs1:PRIMARY>  rs.status()

"members" : [
    {
        "_id" : 0,
        "name" : "192.168.4.51:27077",
        "health" : 1,
        "state" : 1,
        "stateStr" : "PRIMARY",
        "uptime" : 2295,
        ...

    },
    {
        "_id" : 1,
        "name" : "192.168.4.52:27078",
        "health" : 1,
        "state" : 2,
        "stateStr" : "SECONDARY",
        "uptime" : 384,
        ...
      ...
    },
    {
        "_id" : 2,
        "name" : "192.168.4.53:27079",
        "health" : 1,
        "state" : 2,
        "stateStr" : "SECONDARY",

9)查看是否是master库

rs1:PRIMARY> rs .isMaster( )

"hosts" : [
    "192.168.4.51:27077",
    "192.168.4.52:27078",
    "192.168.4.53:27079"
],
"setName" : "rs1",
"setVersion" : 1,
"ismaster" : true,        //主库
"secondary" : false,
"primary" : "192.168.4.51:27077",
"me" : "192.168.4.51:27077",

10)验证副本集,同步数据验证(51上面写数据)

rs1:PRIMARY> use gamedb2
switched to db gamedb2
rs1:PRIMARY> db.a.save({name:"yaya",age:75,em:"p@.com"})
WriteResult({ "nInserted" : 1 })

52上面查看

[root@mongodb52 ~]# mongo --host 192.168.4.52 --port 27078
rs1:SECONDARY> db.getMongo().setSlaveOk()
rs1:SECONDARY> show dbs        //有gamedb2库

**

步骤三:切换主库验证

**
1)自动切换主库验证
关闭51

查看52和53

[root@mongodb52 ~]# mongo --host 192.168.4.52 --port 27078
MongoDB shell version v3.6.3
connecting to: mongodb://192.168.4.52:27078/
MongoDB server version: 3.6.3
...
... 
rs1:PRIMARY>         //52为主
rs1:PRIMARY>
[root@mongodb53 ~]# mongo --host 192.168.4.53 --port 27079
MongoDB shell version v3.6.3
connecting to: mongodb://192.168.4.53:27079/
MongoDB server version: 3.6.3
...
... 
rs1:SECONDARY>        //53为从

启动51,启动后不会再变为主,会成为52的从

[root@mongodb51 ~]# smdb
about to fork child process, waiting until server is ready for connections.
forked process: 6598
child process started successfully, parent exiting
rs1:SECONDARY> rs.isMaster()
{
"hosts" : [
    "192.168.4.51:27077",
    "192.168.4.52:27078",
    "192.168.4.53:27079"
],
"setName" : "rs1",
"setVersion" : 1,
"ismaster" : false,
"secondary" : true,
"primary" : "192.168.4.52:27078",
"me" : "192.168.4.51:27077",

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值