三個以上的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
關注我,不走丟!