三个以上的mongodb节点(或多实例)mongodb
以mongodb3.6.21为例服务器
2801七、2801八、2801九、28020
mkdir -p /data/mongodb/{28017,28018,28019,28020}/{data,conf,log}
/mongodb/{28017,28018,28019,28020}/conf/mongod.conf
cat > /data/mongodb/28017/conf/mongod.conf <<EOF systemLog: destination: file path: /data/mongodb/28017/log/mongodb.log logAppend: true storage: journal: enabled: true dbPath: /data/mongodb/28017/data directoryPerDB: true engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 1 directoryForIndexes: true collectionConfig: blockCompressor: zlib indexConfig: prefixCompression: true processManagement: fork: true net: bindIp: 0.0.0.0 port: 28017 replication: oplogSizeMB: 2048 replSetName: easydb EOF
\cp /data/mongodb/28017/conf/mongod.conf /data/mongodb/28018/conf/ \cp /data/mongodb/28017/conf/mongod.conf /data/mongodb/28019/conf/ \cp /data/mongodb/28017/conf/mongod.conf /data/mongodb/28020/conf/ sed -i 's#28017#28018#g' /data/mongodb/28018/conf/mongod.conf sed -i 's#28017#28019#g' /data/mongodb/28019/conf/mongod.conf sed -i 's#28017#28020#g' /data/mongodb/28020/conf/mongod.conf
chown -R mongo. /data/mongodb
mongod -f /data/mongodb/28017/conf/mongod.conf mongod -f /data/mongodb/28018/conf/mongod.conf mongod -f /data/mongodb/28019/conf/mongod.conf mongod -f /data/mongodb/28020/conf/mongod.conf
[root@sandbox ~]# netstat -lnp|grep 280 tcp 0 0 0.0.0.0:28017 0.0.0.0:* LISTEN 1609/mongod tcp 0 0 0.0.0.0:28018 0.0.0.0:* LISTEN 1642/mongod tcp 0 0 0.0.0.0:28019 0.0.0.0:* LISTEN 1671/mongod tcp 0 0 0.0.0.0:28020 0.0.0.0:* LISTEN 1700/mongod unix 2 [ ACC ] STREAM LISTENING 22882 1642/mongod /tmp/mongodb-28018.sock unix 2 [ ACC ] STREAM LISTENING 22887 1671/mongod /tmp/mongodb-28019.sock unix 2 [ ACC ] STREAM LISTENING 24735 1609/mongod /tmp/mongodb-28017.sock unix 2 [ ACC ] STREAM LISTENING 22894 1700/mongod /tmp/mongodb-28020.sock
MongoDB副本集主要有三种成员: Primary:主节点 Secondaries:从节点 Arbiter:仲裁节点,可选。
“一主多从”架构,若是主节点不可用,则符合条件的次要节点将进行选举以自行选举新的主要节点。
微信
# 登录一台mongo实例 mongo --port 28017 admin # 将副本集中信息定义成一个变量 # 'easydb'和配置文件中'replSetName'定义要一致 config = {_id: 'easydb', members: [ {_id: 0, host: '192.168.80.61:28017'}, {_id: 1, host: '192.168.80.61:28018'}, {_id: 2, host: '192.168.80.61:28019'}] } # 进行初始化操做 rs.initiate(config)
> config = {_id: 'easydb', members: [ ... {_id: 0, host: '192.168.80.61:28017'}, ... {_id: 1, host: '192.168.80.61:28018'}, ... {_id: 2, host: '192.168.80.61:28019'}] ... } { "_id" : "easydb", "members" : [ { "_id" : 0, "host" : "192.168.80.61:28017" }, { "_id" : 1, "host" : "192.168.80.61:28018" }, { "_id" : 2, "host" : "192.168.80.61:28019" } ] } > > rs.initiate(config) { "ok" : 1, "operationTime" : Timestamp(1610101818, 1), "$clusterTime" : { "clusterTime" : Timestamp(1610101818, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } } easydb:SECONDARY> easydb:SECONDARY> easydb:SECONDARY> easydb:PRIMARY> easydb:PRIMARY> easydb:PRIMARY>
rs.status();架构
在某些状况下(例如只有一个主服务器和一个辅助服务器,一个仲裁器),一个mongodb实例做为仲裁器添加到副本集,仲裁节点参加选举,可是不保存数据。
tcp
mongo -port 28017 admin config = {_id: 'easydb', members: [ {_id: 0, host: '192.168.80.61:28017'}, {_id: 1, host: '192.168.80.61:28018'}, {_id: 2, host: '192.168.80.61:28019',"arbiterOnly":true}] } rs.initiate(config)
rs.help() #查看副本集相关帮助 rs.initiate() #使用默认配置初始化副本集 rs.initiate(cfg) #使用配置文件cfg初始化副本集 rs.reconfig(cfg) #修改副本集配置信息 rs.status() #查看副本集状态 rs.conf() #查看副本集配置 rs.add(hostportstr) #添加新的节点 rs.addArb(hostportstr) #添加仲裁节点 rs.remove(hostportstr) #删除节点 rs.secondaryOk() #容许副本节点只读,默认副本节点不容许读写 rs.isMaster() #查看哪一个节点为主节点 rs.printReplicationInfo() #查看oplog大小以及oplog可用时间,能够判断系统繁忙程度 rs.printSlaveReplicationInfo() #查看复制集成员以及延迟 rs.stepDown([stepdownSecs, catchUpSecs]) #手动主从切换 rs.freeze(secs) #冻结当前节点在指定的时间内(秒)不能选举为主 rs.syncFrom(hostportstr) #管理员临时覆盖当前成员的默认同步目标。以[hostname]:[port]的形式指定要复制的成员的名称。
rs.remove("ip:port"); #删除一个节点 rs.add("ip:port"); #新增从节点 rs.addArb("ip:port"); #新增仲裁节点
添加 arbiter节点ui
1. 链接到主节点 [root@sandbox ~]# mongo --port 28017 admin 2. 添加仲裁节点 easydb:PRIMARY> rs.addArb("192.168.80.61:28020") 3. 查看节点状态 easydb:PRIMARY> rs.isMaster() { "hosts" : [ "192.168.80.61:28017", "192.168.80.61:28018", "192.168.80.61:28019" ], "arbiters" : [ "192.168.80.61:28020" ],
删除一个节点.net
easydb:PRIMARY> rs.remove("192.168.80.61:28019") easydb:PRIMARY> rs.isMaster()
新增一个节点unix
easydb:PRIMARY> rs.add("192.168.80.61:28019") easydb:PRIMARY> rs.isMaster()
介绍:code
通常状况下会将delay+hidden一块儿配置使用
blog
cfg=rs.conf() cfg.members[3].priority=0 cfg.members[3].hidden=true cfg.members[3].slaveDelay=3600 rs.reconfig(cfg) 取消以上配置 cfg=rs.conf() cfg.members[3].priority=1 cfg.members[3].hidden=false cfg.members[3].slaveDelay=0 rs.reconfig(cfg) 配置成功后,经过如下命令查询配置后的属性 rs.conf(); { "_id" : 4, "host" : "192.168.80.61:28019", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : true, "priority" : 0, "tags" : { }, "slaveDelay" : NumberLong(3600), "votes" : 1 }
注意:members[3],中括号里面的3是副本集索引的节点,从0开始往下计数,若是作过删除节点操做,就和conf里面对应的"_id"号不一致
easydb.net
微信公众号:easydb
关注我,不走丢!