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

被折叠的 条评论
为什么被折叠?



