257_Mongodb_集合_副本集

举报
alexsully 发表于 2021/12/22 15:10:46 2021/12/22
【摘要】 副本集搭建&rs.config()详情

环境搭建测试

a. 规划

多实例:
(1)多个端口:28017、28018、28019、28020
(2)多套目录

su - mongod
mkdir -p /mongodb/28017/conf /mongodb/28017/data/mongodb/28017/log
mkdir -p /mongodb/28018/conf /mongodb/28018/data/mongodb/28018/log
mkdir -p /mongodb/28019/conf /mongodb/28019/data/mongodb/28019/log
mkdir -p /mongodb/28020/conf /mongodb/28020/data/mongodb/28020/log

(3)配置文件内容准备

cat > /mongodb/28017/conf/mongod.conf <<EOF
systemLog:
  destination: file
  path: /mongodb/28017/log/mongodb.log
  logAppend: true
storage:
  journal:
    enabled: true
  dbPath: /mongodb/28017/data
  directoryPerDB: true
#engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
      directoryForIndexes: true
	collectionConfig:
      blockCompressor: zlib
	indexConfig:
      prefixCompression: true
processManagement:
  fork: true
net:
  port: 28017
  bindIp: 10.0.0.51,127.0.0.1

replication:
  oplogSizeMB: 2048
  replSetName: my_repl
EOF

cp /mongodb/28017/conf/mongod.conf /mongodb/28018/conf/
cp /mongodb/28017/conf/mongod.conf /mongodb/28019/conf/
cp /mongodb/28017/conf/mongod.conf /mongodb/28020/conf/

sed 's#28017#28018#g' /mongodb/28018/conf/mongod.conf -i
sed 's#28017#28019#g' /mongodb/28019/conf/mongod.conf -i
sed 's#28017#28020#g' /mongodb/28020/conf/mongod.conf -i

(4)启动多个实例备用

mongod -f /mongodb/28017/conf/mongod.conf
mongod -f /mongodb/28018/conf/mongod.conf
mongod -f /mongodb/28019/conf/mongod.conf
mongod -f /mongodb/28020/conf/mongod.conf

b. 配置/设置复制集:

(1)1主2从,从库普通从库(PSS)

config = {_id: 'my_repl', members: [
{_id: 0, host:'10.0.0.51:28017'},
{_id: 1, host:'10.0.0.51:28018'},
{_id: 2, host:'10.0.0.51:28019'}]
}

rs.add({"_id":3,"host":"192.168.163.134:27019","priority":0,"hidden":true})

rs.initiate(config)

 # 文档格式
 config ={
 _id: "my_repl", #副本集的名称
 version:1,
 members:[   #副本集的服务器列表
 {
   _id: <int>, #成员的ID
   host: <string>, #成员的地址和端口
   arbiterOnly: <boolean>, true/false代表是否为仲裁节点, 也可以直接使用rs.addArb()方法添加
   buildIndexes: <boolean>, true/false 默认true 是否可以在该节点上建立索引,一旦设置无法更改,如要设置为false 选择priority为0的节点
   hidden: <boolean>,  隐藏节点,优先级和投票必须为0
   priority: <number>, 是优先级,默认为1 0~1000的数字,越大权限越高,优先级不为0则按照有大到小选primary
   tags: <document>, 标签/文档集合必须是字符串,配合read preference使用{source:"rpt"},  db.collection.find().readPref(“nearest”,[‘source’:’rpt’])
   slaveDelay: <int>, 默认0 延迟从库配置 单位为秒
   votes: <number>   默认1 代表有投票权
},
{_id: <int2>,.....},
{_id: <int2>,.....}
 ]
}

(2)1主1从1个arbiter(PSA)

config = {_id: 'my_repl', members: [
{_id: 0, host:'10.0.0.51:28017'},
{_id: 1, host:'10.0.0.51:28018'},
{_id: 2, host:'10.0.0.51:28019',"arbiterOnly":true}]
}
rs.initiate(config)

c  复制集管理操作

(1)查看复制集状态:
rs.status(); //查看整体复制集状态
rs.isMaster(); // 查看当前是否是主节点

(2)添加删除节点
rs.add("ip:port"); // 新增从节点
rs.addArb("ip:port"); // 新增仲裁节点
rs.remove("ip:port"); // 删除一个节点



(3)特殊从节点的配置
• 优先级(priority 参数:0-1000):
   优先级越高的节点越优先成为主节点。
   优先级为0的节点无法成为主节点;
• 隐藏(hidden 参数):复制数据,但对应用不可见。隐藏节点可以具有投票仅,但优先级必须为0;
• 延迟(slaveDelay 参数):复制 n 秒之前的数据,保持与主节点的时间差

配置延时节点(一般延时节点也配置成hidden)
cfg=rs.conf()
cfg.members[1].priority=0
cfg.members[1].slaveDelay=120
cfg.members[1].hidden=true
rs.reconfig(cfg)
改回来:
cfg=rs.conf()
cfg.members[2].priority=1
cfg.members[2].slaveDelay=0
cfg.members[2].hidden=0
cfg.members[2].votes=0
rs.reconfig(cfg)
配置成功后,通过以下命令查询配置后的属性
rs.conf();

副本集其他操作命令

--查看副本集的配置信息
admin> rs.config()
--查看副本集各成员的状态
admin> rs.status()
--副本集角色切换(不要人为顺便操作,有风险)
admin> rs.stepDown()
注:
admin> rs.freeze(300) //锁定从,使其不会转变成主库
freeze()和stepDown单位都是秒。
--设置副本节点可读:在副本节点执行
admin> rs.slaveOk()
replica_alex:PRIMARY> rs.config()
{
        "_id" : "replica_alex",
        "version" : 1,
        "protocolVersion" : NumberLong(1),
        "writeConcernMajorityJournalDefault" : true,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "25.213.20.110:8635",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 1,
                        "host" : "25.213.20.111:8635",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "25.213.20.112:8635",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : true,
                        "priority" : 0,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "catchUpTimeoutMillis" : -1,
                "catchUpTakeoverDelayMillis" : 30000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("6198a39baf56065a6f73fa18")
        }
}

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。