MongoDB版本:mongodb-linux-x86_64-rhel62-3.4.10linux
設備3臺:172.16.10.42(27020端口),172.16.10.90(27020端口),172.16.10.199(27020端口),若是沒有足夠設備也可部署同一臺設備上面,只須要修改端口便可。mongodb
同步系統時間:保證各個機器的時間一致,可以使用/usr/sbin/ntpdate time.nist.gov 進行系統時間同步,在系統任務中添加新的任務 crontab -e0 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
bash
保證3臺設備相互之間網絡訪問可達網絡
/sbin/iptables -I INPUT -p tcp --dport 27020 -j ACCEPT #開放端口
/etc/init.d/iptables save # 保存修改
service iptables restart # 重啓防火牆,修改生效複製代碼
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
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
curl
控制檯鏈接mongo /home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongo 127.0.0.1:27020
,必須指定端口號,由於默認的端口爲27017tcp
建立管理員賬號ui
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
url
生成keyfile文件 openssl rand -base64 741 > /home/mongodb/mongodb.keyfile
spa
修改主節點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 #名稱能夠自定義,可是必須保證主節點、從節點、仲裁節點統一複製代碼
同理在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);複製代碼
全部配置到此結束