在CentOS7上安装高可用3副本mongodb

本文详细介绍了如何在CentOS7环境下,分步骤地为MongoDB设置一个包含3个副本的高可用集群。内容涵盖环境准备、安装、进程执行、复制集配置、创建和测试,以及解决配置过程中可能出现的问题和终极解决方案。

3servers代表:3台服务器上都要操作

服务器名称分别为:

mongo1

mongo2

mongo3

--------------3servers begin-------------

环境准备

[root@mongo1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
[root@mongo1 ~]# systemctl restart network
[root@mongo1 ~]# vi /etc/hosts
# 增加以下内容
xx.xx.xx.xx mongo1
xx.xx.xx.xx mongo2
xx.xx.xx.xx mongo3
[root@mongo1 ~]# getenforce
Enforcing

[root@mongo1 ~]# sudo setenforce 0
[root@mongo1 lib]# vi /etc/selinux/config
SELINUX=disabled

[root@mongo1 data]# systemctl stop firewalld
[root@mongo1 data]# systemctl disable firewalld

[root@mongo3 ~]# ssh-keygen
[root@mongo3 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@mongo1
[root@mongo3 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@mongo1
[root@mongo3 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@mongo3

[root@mongo1 ~]# sudo shutdown -r now

开始安装

[root@mongo1 ~]# sudo yum install libcurl openssl

[root@mongo1 ~]# curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.6.tgz
[root@mongo1 ~]# tar -zxvf mongodb-linux-*-4.2.6.tgz

[root@mongo1 ~]# sudo mkdir -p /var/lib/mongo
[root@mongo1 ~]# sudo chown -R mongod:mongod /var/lib/mongo

[root@mongo1 ~]# adduser mongod
[root@mongo1 ~]# passwd mongod

[root@mongo1 ~]# mongod -f /var/lib/mongo/mongod.conf
[root@mongo1 ~]# cat /var/lib/mongo//mongod.log
sudo cp /root/mongodb-linux-x86_64-rhel70-4.2.6/bin/* /usr/local/bin/
# option
[root@mongo1 ~]# mongod --shutdown -f /var/lib/mongo/mongod.conf

[root@mongo1 ~]# vi /var/lib/mongo/mongod.conf
# /var/lib/mongo/mongod.conf
systemLog:
  destination: file
  path: /var/lib/mongo/mongod.log   # 日志文件路径
  logAppend: true
storage:
  dbPath: /var/lib/mongo    # 数据目录
net:
  bindIp: 0.0.0.0
  port: 28017   # 端口
replication:
  replSetName: rs0
processManagement:
  fork: true

执行进程

mongod -f /var/lib/mongo/mongod.conf

配置复制集

进入mongo shell:

mongo --port 28017

--------------3servers end-------------

--------------主节点上操作 begin-------------

创建复制集:

方法一

rs.initiate({
    _id: "rs0",
    members: [{
        _id: 0,
        host: "mongo1:28017"
    },{
        _id: 1,
        host: "mongo2:28017"
    },{
        _id: 2,
        host: "mongo3:28017"
    }]
})

方法二

在任意节点上进行以下操作,习惯用主节点

rs.initiate()

# 此处要回车

rs0:PRIMARY> rs.status()

rs0:PRIMARY> rs.add("mongo2:28017")

rs0:PRIMARY> rs.add("mongo3:28017")


# 查看复制集状态:
rs0:PRIMARY> rs.status()

--------------主节点上操作 end-------------

开始测试

--------------主节点上操作 begin-------------

# 主节点操作
mongo -port 28017
rs0:PRIMARY>  db.test.insert({a:1})
WriteResult({ "nInserted" : 1 })
rs0:PRIMARY> db.test.insert({a:2})
WriteResult({ "nInserted" : 1 })
rs0:PRIMARY>

--------------主节点上操作 end-------------

--------------从节点上操作 begin-------------

# 从节点操作
mongo -port 28017
rs0:SECONDARY> rs.slaveOk()
rs0:SECONDARY> db.test.find()
{ "_id" : ObjectId("5eb3e579c99435dec5aa57d0"), "a" : 1 }
rs0:SECONDARY> db.test.find()
{ "_id" : ObjectId("5eb3e579c99435dec5aa57d0"), "a" : 1 }
{ "_id" : ObjectId("5eb3e5ccc99435dec5aa57d1"), "a" : 2 }

--------------从节点上操作 end-------------

简单使用

show dbs
// 结果
admin  0.000GB
local  0.000GB

use local
show tables
// 结果
me
oplog.rs
replset.election
replset.minvalid
startup_log
system.replset

调整复制集配置

var conf = rs.conf()
// 将0号节点的优先级调整为10
conf.members[0].priority = 10;
// 将1号节点调整为hidden节点
conf.members[1].hidden = true;
// hidden节点必须配置{priority: 0}
conf.members[1].priority = 0;
// 应用以上调整
rs.reconfig(conf);

报错

rs0:PRIMARY> rs.add("mongo2:28017")
{
        "operationTime" : Timestamp(1588843540, 1),
        "ok" : 0,
        "errmsg" : "Quorum check failed because not enough voting nodes responded; required 2 but only the following 1 voting nodes responded: mongo1:28017; the following nodes did not respond affirmatively: mongo2:28017 failed with Error connecting to mongo2:28017 (10.20.12.12:28017) :: caused by :: No route to host",
        "code" : 74,
        "codeName" : "NodeNotFound",
        "$clusterTime" : {
                "clusterTime" : Timestamp(1588843540, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
​```


解决方法:
关闭防火墙或开放28017端口

高可用3副本配置不成功的终极解决方法

--------------3servers begin-------------

# 关闭并删除mongodb 3servers
mongod --shutdown -f /var/lib/mongo/mongod.conf
# 可选操作
shutdown -r now
ps -ef | grep mongo
oot@mongo1 mongo]# mv mongod.conf /root
[root@mongo1 mongo]# rm -rf *
[root@mongo1 mongo]# ls
[root@mongo1 mongo]# sudo mkdir -p /var/lib/mongo
[root@mongo1 mongo]# cd /var/log/mongodb/
[root@mongo1 mongodb]# rm -rf *
[root@mongo1 mongodb]# sudo chown -R mongod:mongod /var/lib/mongo
[root@mongo1 mongodb]# sudo chown -R mongod:mongod /var/log/mongodb

# 恢复并重启mongodb
mv /root/mongod.conf /var/lib/mongo
cd /var/lib/mongo/
mongod -f /var/lib/mongo/mongod.conf

--------------3servers end-------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值