代码改变世界

Linux下MongoDB副本集搭建

2019-08-02 14:55  握瑾怀瑜  阅读(5577)  评论(2编辑  收藏  举报

搭建副本集遇到的问题

问题一:    bind_ip配置的不通   要为0.0.0.0
问题二:    没关闭防火墙 

总结搭建副本集的核心步骤
    1:    配置mongo.conf文件 
    2:    初始化副本集
    3:    验证(查看副本集)
View Code

虚拟机三个服务器如下

第一步  首先关闭服务器防火墙

  否则会报No route to host

                             查看防火墙状态
[root@localhost /]# firewall-cmd --state   
                              running
                             关闭防火墙
[root@localhost /]# systemctl stop firewalld.service  
                              查看防火墙状态
[root@localhost /]# firewall-cmd --state
                             not running
View Code

第二步  服务器安装mongo省略

第三步 在三台服务器的bin目录下分别新建配置文件mongo.conf

  

  服务器130(主节点)的配置文件mongo.conf 如下

port = 27017

#数据目录
dbpath = /usr/local/mongodb/data/db

#日志所在目录
logpath = /usr/local/mongodb/data/logs/mongodb.log

#日志输出方式
logappend = true

# 在后台启动
fork=true

# 0.0.0.0表示任意IP均可连接
bind_ip=0.0.0.0

#副本集名称
replSet=rs
View Code

  服务器129(辅助节点)的配置文件mongo.conf 如下

port = 27017

#数据目录
dbpath = /usr/local/mongodb/data/db

#日志所在目录
logpath = /usr/local/mongodb/data/logs/mongodb.log

#日志输出方式
logappend = true

# 在后台启动
fork=true

# 0.0.0.0表示任意IP均可连接
bind_ip=0.0.0.0

#副本集名称
replSet=rs
View Code

  服务器128(仲裁节点)的配置文件mongo.conf 如下

port = 27017

#数据目录
dbpath = /usr/local/mongodb/data/db

#日志所在目录
logpath = /usr/local/mongodb/data/logs/mongodb.log

#日志输出方式
logappend = true

# 在后台启动
fork=true

# 0.0.0.0表示任意IP均可连接
bind_ip=0.0.0.0

#副本集名称
replSet=rs
View Code

  三个配置文件里最重要的是指定相同的副本集的名称

  #副本集名称   replSet=rs   rs(名字任意)为此次搭建的副本集的名称

第四步  分别启动三台服务器的mongo服务 

  任选一台服务器连接 进入admin库 执行副本集初始化操作  如下

  副本集的名称为rs  priority 的数值越大越活跃  数值最大的为主节点

> use admin
switched to db admin
> 
> rsconf = {
... ...   _id: "rs",
... ...   members: [
... ...     {
... ...      _id: 0,
... ...      host: "192.168.23.130",
...  "priority":2
... ...     },
... ...     {
... ...      _id: 1,
... ...      host: "192.168.23.129",
...  "priority":1
... ...     }
... ...    ]
... ... }
{
    "_id" : "rs",
    "members" : [
        {
            "_id" : 0,
            "host" : "192.168.23.130",
            "priority" : 2
        },
        {
            "_id" : 1,
            "host" : "192.168.23.129",
            "priority" : 1
        }
    ]
}
> rs.initiate(rsconf)
{
    "ok" : 1,
    "operationTime" : Timestamp(1563524874, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1563524874, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}
View Code

第五步 验证副本集

  查看主节点如下 

  查看副本集状态

  添加一个服务器为仲裁节点

  查看各个服务器状态信息

  验证副本集的数据一致性  主节点向admin数据库插入一个集合名为test的数据

  登录其他两台服务器的admin 的test集合 查看是否有此数据 如下

  辅助节点查看如下

  仲裁节点如下   仲裁节点不能同步数据  只支持投票选举

  辅助节点初次同步数据会提示错误如下  解决方法如下  rs.slaveOk()   或者    db.getMongo().setSlaveOk()

第六步: mongo启动服务 与 mongo关闭服务

进入bin目录  启动mongodb服务
root@river-NUC8i7HNK:/usr/local/mongodb/bin# ./mongod -f mongo.conf

                        停止mongodb服务
root@river-NUC8i7HNK:/# mongod -f /usr/local/mongodb/bin/mongo.conf --shutdown
killing process with pid: 14185