257_Mongodb_集合_副本集
【摘要】 副本集搭建&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)