環境介紹
- 系統:CentOS 6.9
-
MongoDB版本:mongodb-linux-x86_64-rhel62-3.4.10
-
設備3台:172.16.10.42(27020端口),172.16.10.90(27020端口),172.16.10.199(27020端口),如果沒有足夠設備也可部署同一台設備上面,只需要修改端口即可。
准備工作
-
同步系統時間:保證各個機器的時間一致,可使用/usr/sbin/ntpdate time.nist.gov 進行系統時間同步,在系統任務中添加新的任務 crontab -e
0 12 * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
-
配置同時允許打開的文件最大數
查看系統允許同時打開文件的最大數 :ulimit -a
查看系統允許的最大句柄文件數:cat /proc/sys/fs/file-max
修改允許最大打開文件數,修改之后會永久生效,在【/etc/security/limits.conf】中,增加下面的代碼:* soft nofile 65536
* hard nofile 65536
-
保證3台設備相互之間網絡訪問可達
- 防火牆打開27020端口
-
/sbin/iptables -I INPUT -p tcp --dport 27020 -j ACCEPT #開放端口
-
/etc/init.d/iptables save # 保存修改
-
service iptables restart # 重啟防火牆,修改生效復制代碼
准備安裝
- 選擇MongoDB存放位置,例如: /home/mongodb
- 使用cd 命令
cd /home/mongodb
進入mongodb 目錄,下載MongoDB 壓縮包curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.10.tgz
- 解壓文件
tar -xzvf mongodb-linux-x86_64-rhel62-3.4.10.tgz
到當前目錄下 - 創建數據存放文件夾
mkdir data
,創建日志存放文件夾mkdir log
- 分配機器172.16.10.42(主節點),172.16.10.90(從節點),172.16.10.199(arb仲裁節點)
安裝MongoDB主節點
- 在mongdb 目錄下新建mongod.conf文件,編輯如下內容
-
systemLog:
-
destination: file
-
path: /home/mongodb/ log/mongod.log #日志存放位置
-
logAppend: true #以追加的形式寫入日志
-
storage:
-
dbPath: /home/mongodb/data #數據存放地址
-
journal:
-
enabled: true
-
directoryPerDB: true #每個數據庫單獨一個目錄
-
processManagement:
-
fork: true
-
pidFilePath: /home/mongodb/mongod.pid #進程文件存放位置
-
net:
-
port: 27020 #mongo 占用的端口號
-
setParameter:
-
failIndexKeyTooLong: false復制代碼
-
啟動mongdb服務
/home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongod --config /home/mongodb/mongod.conf
-
控制台連接mongo
/home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongo 127.0.0.1:27020
,必須指定端口號,因為默認的端口為27017 -
創建管理員帳號
-
use admin; #進入admin數據庫,系統自帶
-
db.createUser(
-
{
-
user: "admin",
-
pwd: "admin",
-
roles: [ "__system","backup","clusterAdmin","dbAdminAnyDatabase","readWriteAnyDatabase","userAdminAnyDatabase" ]
-
}
-
); #創建用戶,並分配用戶角色復制代碼
- 查詢上一步操作創建的用戶
db.system.users.find({"user":"admin"})
查詢結果如下:
-
關閉mongodb 服務
/home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongod --config /home/mongodb/mongod.conf --shutdown
-
生成keyfile文件
openssl rand -base64 741 > /home/mongodb/mongodb.keyfile
-
修改主節點mongd.conf文件為如下內容
-
systemLog:
-
destination: file
-
path: /home/mongodb/ log/mongod.log
-
logAppend: true
-
storage:
-
dbPath: /home/mongodb/data
-
journal:
-
enabled: true
-
directoryPerDB: true
-
processManagement:
-
fork: true
-
pidFilePath: /home/mongodb/mongod.pid
-
net:
-
port: 27020
-
setParameter:
-
failIndexKeyTooLong: false
-
security:
-
keyFile: /home/mongodb/mongodb.keyfile # 使用keyfile認證
-
authorization: enabled
-
replication:
-
replSetName: mongodb_set #名稱可以自定義,但是必須保證主節點、從節點、仲裁節點統一復制代碼
安裝MongoDB從節點、仲裁節點
-
同理在172.16.10.90,172.16.10.199
/home/mongodb
目錄下新建 data、log目錄 -
拷貝主節點 (172.16.10.42)
/home/mongodb
目錄下的mongodb.keyfile
、mongod.conf
文件以及mongodb-linux-x86_64-rhel62-3.4.10
文件夾 到從節點已經仲裁節點的/home/mongodb
目錄下 -
修改仲裁節點` mongod.conf`` 文件內容如下
-
systemLog:
-
destination: file
-
path: /home/mongodb/ log/mongod.log
-
logAppend: true
-
storage:
-
dbPath: /home/mongodb/data
-
journal:
-
enabled: false # 仲裁節點本地不保存數據
-
directoryPerDB: true
-
processManagement:
-
fork: true
-
pidFilePath: /home/mongodb/mongod.pid
-
net:
-
port: 27020
-
setParameter:
-
failIndexKeyTooLong: false
-
security:
-
keyFile: /home/mongodb/mongodb.keyfile # 使用keyfile認證
-
authorization: enabled
-
replication:
-
replSetName: mongodb_set #名稱可以自定義,但是必須保證主節點、從節點、仲裁節點統一復制代碼
配置主節點、從節點、仲裁節點
-
分別在三台設備上執行
/home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongod --config /home/mongodb/mongod.conf
啟動mongodb服務 -
控制台連接主節點(172.16.10.42)mongo
/home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongo 127.0.0.1:27020 -u admin -p
, 使用admin帳號密碼登錄mongodb - 初始化副本集配置
-
use admin;
-
config={_id: "mongodb_set",members:[{_id:0,host:"172.16.10.42","priority":20}]}
-
rs.initiate(config); 復制代碼
確認返回的是{ "ok" : 1 }
上面config里面,是當前主節點對外的ip,即從節點以及仲裁節點能夠訪問到的ip
查看集群節點的狀態:rs.status();
- 添加仲裁節點
rs.addArb("172.16.10.199:27020");
- 添加從節點
rs.add("172.16.10.90:27020");
- 查看集群配置
rs.config();
顯示結果如下
-
mongodb_set:PRIMARY> rs. config()
-
{
-
"_id" : "mongodb_set",
-
"version" : 4,
-
"protocolVersion" : NumberLong(1),
-
"members" : [
-
{
-
"_id" : 0,
-
"host" : "172.16.10.42:27020",
-
"arbiterOnly" : false,
-
"buildIndexes" : true,
-
"hidden" : false,
-
"priority" : 20,
-
"tags" : {
-
-
},
-
"slaveDelay" : NumberLong(0),
-
"votes" : 1
-
},
-
{
-
"_id" : 1,
-
"host" : "172.16.10.199:27020",
-
"arbiterOnly" : true,
-
"buildIndexes" : true,
-
"hidden" : false,
-
"priority" : 1,
-
"tags" : {
-
-
},
-
"slaveDelay" : NumberLong(0),
-
"votes" : 1
-
},
-
{
-
"_id" : 2,
-
"host" : "172.16.10.90:27020",
-
"arbiterOnly" : false,
-
"buildIndexes" : true,
-
"hidden" : false,
-
"priority" : 1,
-
"tags" : {
-
-
},
-
"slaveDelay" : NumberLong(0),
-
"votes" : 1
-
}
-
],
-
"settings" : {
-
"chainingAllowed" : true,
-
"heartbeatIntervalMillis" : 2000,
-
"heartbeatTimeoutSecs" : 10,
-
"electionTimeoutMillis" : 10000,
-
"catchUpTimeoutMillis" : 60000,
-
"getLastErrorModes" : {
-
-
},
-
"getLastErrorDefaults" : {
-
"w" : 1,
-
"wtimeout" : 0
-
},
-
"replicaSetId" : ObjectId("59f82d3d21b782e865dc270a")
-
}
-
} 復制代碼
- 修改從節點為只讀節點
獲取當前配置,修改之后重新寫入配置
-
cfg = rs.conf();
-
cfg.members[2].priority=0
-
rs.reconfig(cfg); 復制代碼
- 修改從節點為永遠不可能被選為主節點(非必須)
獲取當前配置,修改之后重新寫入配置
-
cfg = rs.conf();
-
cfg.members[2].votes=0
-
rs.reconfig(cfg); 復制代碼
所有配置到此結束
轉載於:https://juejin.im/post/59f91decf265da43231a48bc