Install MongoDB 3.4 with Replica Set on CentOS7.x

Install MongoDB 3.4 with Replica Set on CentOS7.x

by Dennis 2017/09/25 <>

CentOS7.x 安裝 MongoDB 3.4.x, 三臺機器 (至少須要 3 臺機器)作 Replica Setmongodb

Install MongoDB

在每一臺機器上安裝 MongoDB, 本文以 3.4.9 爲例安裝。數據庫

1.Create repo file

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

2. Install MongoDB

sudo yum install -y mongodb-org

3. Start MongoDB

sudo service mongod start

4. Stop MongoDB

sudo service mongod stop

5. Restart MongoDB

sudo service mongod restart

6. Start MongoDB when OS Startup

sudo chkconfig mongod on

7. 開放 27017 Port

firewall-cmd --zone=public --add-port=27017/tcp --permanent
firewall-cmd --reload

Replica Set 配置

Replica Set 具備多個副本保證了應用的高可用,即便一個副本掛掉仍是有其餘副本能夠繼續服務。副本集中的各個副本相互間經過心跳檢測,當檢測到主服務器中斷後,會在內部自行進行選舉一臺新的主服務器。安全

1. 準備工做

三臺服務器,分別用作主節點、備節點和仲裁節點,以下:bash

  • 192.168.0.101 (Primary 主節點)
  • 192.168.0.102 (Sencondary 備節點)
  • 192.168.0.103 (Arbiter 仲裁節點)

主備節點用於數據存儲,仲裁節點不存儲數據,只用作選舉。服務器

2. 配置

配置 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 配置文檔
# 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 的複製集配置已完成。客戶端在連結集羣時,只須要配置 主,備 節點便可,無須關注仲裁節點。

Troubleshooting

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: 真心很麻煩

  • 停掉備節點和仲裁節點的 mongod 服務
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 !

相關文章
相關標籤/搜索