CentOS7.x 安裝 MongoDB 3.4.x, 三臺機器 (至少須要 3 臺機器)作 Replica Setmongodb
在每一臺機器上安裝 MongoDB, 本文以 3.4.9 爲例安裝。數據庫
vi /etc/yum.repos.d/mongodb-org-3.4.repo
添加如下代碼到 /etc/yum.repos.d/mongodb-org-3.4.repojson
[mongodb-org-3.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
sudo yum install -y mongodb-org
sudo service mongod start
sudo service mongod stop
sudo service mongod restart
sudo chkconfig mongod on
firewall-cmd --zone=public --add-port=27017/tcp --permanent firewall-cmd --reload
Replica Set 具備多個副本保證了應用的高可用,即便一個副本掛掉仍是有其餘副本能夠繼續服務。副本集中的各個副本相互間經過心跳檢測,當檢測到主服務器中斷後,會在內部自行進行選舉一臺新的主服務器。安全
三臺服務器,分別用作主節點、備節點和仲裁節點,以下:bash
主備節點用於數據存儲,仲裁節點不存儲數據,只用作選舉。服務器
配置 Replica Set, 數據存放目錄和啓動配置項。tcp
2.1 Create Data Directoryide
爲之後方便管理,專門建立數據存放的目錄url
# 192.168.0.101 主節點數據目錄 mkdir -p /data/mongodb/master sudo chown mongod:mongod -R /data/mongodb/ # 192.168.0.102 備節點數據目錄 mkdir -p /data/mongodb/slave sudo chown mongod:mongod -R /data/mongodb/ # 192.168.0.103 仲裁節點數據目錄 mkdir -p /data/mongodb/arbiter sudo chown mongod:mongod -R /data/mongodb/
2.2 Create MongoDB Config Filerest
MongoDB 啓動時的配置檔
vi /etc/mongodb.conf
# mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # Where and how to store data. storage: #dbPath: /var/lib/mongo dbPath: /data/mongodb/master directoryPerDb: true journal: enabled: true # engine: # mmapv1: # wiredTiger: # how the process runs processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile # network interfaces net: port: 27017 #bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces. bindIp:192.168.0.181 #security: #副本集配置成功以後才能打開安全認證 #authorization:disabled # 開啓認證 #keyFile: /data/mongo/mongodb-keyfile # 副本集使用keyFile進行相互認證 #operationProfiling: replication: replSetName: scada # 副本集的名稱 #sharding: ## Enterprise-Only Options #auditLog: #snmp:
同Master 的配置,改掉 bindIp
,dbPath
的值不同便可。
2.3 啓動 MongoDB
上面的配置文件能夠直接在 /etc/mongod.conf 中添加, 而後 restart MongoDB 便可生效。
2.4 在主節點服務器上登陸,配置 主/備/仲裁 節點
鏈接到主節點服務器, 進入 admin 數據庫進行配置: PS. 複製集名稱以 scada
爲例
mongo 192.168.0.101:27017 use admin # 使用 admin database config={_id:"scada",members:[{_id:181,host:"192.168.0.181:27017",priority:2},{_id:188,host:"192.168.0.188:27017",priority:1},{_id:183,host:"192.168.0.183:27017",arbiterOnly:true}]} # 執行配置初始化 rs.initiate(config) # 查看配置是否生效 rs.status()
_id
('scada') 是每一個 MongoDB 配置文件中配置的副本集的名稱, members 中包含了集羣中節點的優先級, 主節點的優先級最高 (機器配置也要跟上呀), 仲裁節點須要用 arbiterOnly:true 來指定.
執行完 rs.initiate(config)
後,稍等一下再查看 rs.status()
, 查看配置是否生效. 還須要分別查看每一個節點的日誌文件是否生成。Insert 一筆資料到主節點,分別到子節點查看一下是否有相關數據。
至此,MongoDB 的複製集配置已完成。客戶端在連結集羣時,只須要配置 主,備 節點便可,無須關注仲裁節點。
Q1. 若是rs.initiate(config) 後,發現 config 寫錯了,如何修改重置? 錯誤信息:
{ "ok" : 0, "errmsg" : "replSetReconfig should only be run on PRIMARY, but my state is SECONDARY; use the \"force\" argument to override", "code" : 10107, "codeName" : "NotMaster" }
A1: 真心很麻煩
sudo service mongod stop
# 查看目前的配置 config = rs.conf(); printjson(config); # 以下是要修改第三個 member config.members = [config.members[0], config.members[1]]; # reconfig rs.reconfig(config, {force: true}); config = rs.config(); rs.reconfig(config, {force: true}); # 再次輸入正確的 config, config={_id:"scada",members:[{_id:181,host:"192.168.0.181:27017",priority:2},{_id:188,host:"192.168.0.188:27017",priority:1},{_id:183,host:"192.168.0.183:27017",arbiterOnly:true}]} # 再重配置 rs.reconfig(config, { force: true})
Enjoy your MongoDB Replica Set !