暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第二十六章 副本集(MongoDB)

蜜蜂点滴 2020-07-20
276

副本集配置

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()


文章转载自蜜蜂点滴,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论