副本集配置
https://docs.mongodb.com/manual/tutorial/deploy-replica-set/
一、创建多实例(环境部署)
1、路径规划:
# mkdir -p /application/mongo_cluster/mongo_2801{7,8,9}/{conf,logs,pid}
#mkdir -p /data/mongo_cluster/mongo_2801{7,8,9}
2、创建配置文件:
28017实例的配置问题件:
#cat >/application/mongo_cluster/mongo_28017/conf/mongo_28017.conf <<EOF
systemLog:
destination: file
logAppend: true
path: /application/mongo_cluster/mongo_28017/logs/mongodb.log
storage:
journal:
enabled: true
dbPath: /data/mongo_cluster/mongo_28017
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 0.5
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
processManagement:
fork: true
pidFilePath: /application/mongo_cluster/mongo_28017/pid/mongod.pid
net:
port: 28017
bindIp: 127.0.0.1,192.168.40.137
replication:
oplogSizeMB: 1024
replSetName: dba58
EOF
28018、28019实例配置文件:
配置文件复制:
#cd /application/mongo_cluster/mongo_28017/conf/
#cp mongo_28017.conf /application/mongo_cluster/mongo_28018/conf/mongo_28018.conf
#cp mongo_28017.conf /application/mongo_cluster/mongo_28019/conf/mongo_28019.conf
修改端口:
#sed -i 's#28017#28018#g' /application/mongo_cluster/mongo_28018/conf/mongo_28018.conf
#sed -i 's#28017#28019#g' /application/mongo_cluster/mongo_28019/conf/mongo_28019.conf
3、授权
#chown -R mongo:mongo /data/mongo_cluster
#chown -R mongo:mongo /application/mongo_cluster
4、启动多实例:
#su mongo
$mongod -f /application/mongo_cluster/mongo_28017/conf/mongo_28017.conf
$mongod -f /application/mongo_cluster/mongo_28018/conf/mongo_28018.conf
$mongod -f /application/mongo_cluster/mongo_28019/conf/mongo_28019.conf

二、初始化副本集
1、在28017上执行初始化命令
>config = {
_id : "dba58",
members : [
{_id : 0, host : " redis01:28017"},
{_id : 1, host : " redis01:28018"},
{_id : 2, host : " redis01:28019"},
] }
>rs.initiate(config)
说明:
dba58:副本集的名字
members:节点名字
查看副本集状态:rs.status()


2、测试:
(1)主库插入数据:
$mongo redis01:28017
>use inventory
>db.inventory.insertMany( [
{ "item": "journal", "qty": 25, "size": { "h": 14, "w": 21, "uom": "cm" }, "status": "A" },
{ "item": "notebook", "qty": 50, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "A" },
{ "item": "paper", "qty": 100, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "D" },
{ "item": "planner", "qty": 75, "size": { "h": 22.85, "w": 30, "uom": "cm" }, "status": "D" },
{ "item": "postcard", "qty": 45, "size": { "h": 10, "w": 15.25, "uom": "cm" }, "status": "A" }
]);
(2)从库查看数据:
$mongo redis01:28018
①错误提示:
dba58:SECONDARY> show dbs
2020-07-09T22:23:47.088+0800 E QUERY [thread1] Error: listDatabases failed:{
"operationTime" : Timestamp(1594304620, 1),
"ok" : 0,
"errmsg" : "not master and slaveOk=false",
"code" : 13435,
"codeName" : "NotMasterNoSlaveOk",
"$clusterTime" : {
"clusterTime" : Timestamp(1594304620, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:67:1
shellHelper.show@src/mongo/shell/utils.js:860:19
shellHelper@src/mongo/shell/utils.js:750:15

@(shellhelp2):1:1
解决方法:这里会提示副本不可读,通过命令配置副本可读;
临时生效:
dba58:SECONDARY>rs.slaveOk();
永久生效:不安全
$ls -la
$vim .mongorc.js
rs.slaveOk();
②再登录测试:
$mongo redis01:28018

三、权重调整
1、主变从 28017变从
①查看权重:
dba58:PRIMARY> rs.conf()
②调整命令:
dba58:PRIMARY> config = rs.conf()
dba58:PRIMARY> config.members[2].priority=100
dba58:PRIMARY> rs.reconfig(config)
③主节点主动降级:
dba58:PRIMARY> rs.stepDown()
节点28018变为主。

2、恢复默认的配置:28017恢复为主
dba58:PRIMARY> config = rs.conf()
dba58:PRIMARY> config.members[2].priority=1
dba58:PRIMARY> rs.reconfig(config)
dba58:PRIMARY> rs.stepDown()

四、节点增删
1、增加节点:
(1)增加实例28020
#mkdir -p /application/mongo_cluster/mongo_28020/{conf,logs,pid}
#mkdir -p /data/mongo_cluster/mongo_28020
#cd /application/mongo_cluster/mongo_28017/conf/
#cp mongo_28017.conf /application/mongo_cluster/mongo_28020/conf/mongo_28020.conf
#sed -i 's#28017#28020#g' /application/mongo_cluster/mongo_28020/conf/mongo_28020.conf
#chown -R mongo:mongo /data/mongo_cluster
#chown -R mongo:mongo /application/mongo_cluster
#su mongo
$mongod -f /application/mongo_cluster/mongo_28020/conf/mongo_28020.conf
(2)把28020添加到副本集中
dba58:PRIMARY> use admin
dba58:PRIMARY> rs.add("redis01:28020")

2、 删除旧节点:
dba58:PRIMARY> rs.remove("redis01:28010")

不在集群里或被集群剔除了。
3、增加仲裁节点:
①参考网址:https://docs.mongodb.com/manual/tutorial/add-replica-set-arbiter/
②关闭28020:mongod -f /application/mongo_cluster/mongo_28020/conf/mongo_28020.conf --shutdown
③清空28020节点数据:rm -rf /data/mongo_cluster/mongo_28020/*
④启动28020:mongod -f /application/mongo_cluster/mongo_28020/conf/mongo_28020.conf
⑤主库添加仲裁节点:dba58:PRIMARY> rs.addArb("redis01:28020")
⑥查看状态:dba58:PRIMARY> rs.status()





