mongo集羣的搭建,至少須要3個節點,2兩個數據節點和1個仲裁節點,因此這裏使用三臺機器搭建一個包含3節點的replicationSet。linux
1. 下載解壓安裝:mongodb
mkdir -P /opt/install cd /opt/install/ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.3.tgz
#從遠程服務器copy到本地安裝目錄rsync -avzh root@192.168.72.104:/data/install/mongodb-linux-x86_64-rhel70-4.0.3.tgz /data/install/
數據庫
#解壓copyvim
tar -xvf xxx mv mongodb-linux-x86_64-rhel70 /usr/local/mongodb
#添加到環境變量bash
echo 'export PATH=/usr/local/mongodb/bin:$PATH' >> /etc/profile source /etc/profile #測試 mongo --version
2. 配置文件修改服務器
#建立數據、配置文件及日誌目錄ssh
mkdir -p /data/mongodb/data mkdir -p /data/mongodb/logs mkdir -p /data/mongodb/conf
vim /data/mongodb/conf/mongod.conf
建立集羣時,先以關閉認證,後面再打開。tcp
systemLog: destination: file path: "/data/mongodb/logs/mongod.log" logAppend: true storage: dbPath: "/data/mongodb/data" journal: enabled: true processManagement: fork: true pidFilePath: "/usr/local/mongodb/mongod.pid" net: bindIp: 127.0.0.1,172.26.27.70 port: 20467 #security: #keyFile: "/data/mongodb/conf/access.key" #authorization: enabled ##setParameter: ##authenticationMechanisms: SCRAM-SHA-1** replication: oplogSizeMB: 500 replSetName: rs_mongo_88
#添加防火牆端口ide
firewall-cmd --zone=public --permanent --add-port=20467/tcp systemctl restart firewalld.service
3. 啓動並建立集羣測試
#分別啓動三臺實例
ln -s /data/mongodb/conf/mongod.conf /etc/mongod.conf mongod -f /etc/mongod.conf
#進入任意一臺實例,初始化集羣
mongo 127.0.0.01:20467 > cfg={_id: 'rs_mongo_88', members:[{_id: 1, host: '172.26.27.70:20467'}, {_id: 2, host: '172.26.27.71:20467'},{_id: 3, host: '172.26.27.72:20467'}]}
##添加單個節點
> cfg.members.push({_id: 1, host: '172.26.27.70:20467'}) > cfg.members.push({_id: 2, host: '172.26.27.71:20467'}) > cfg.members.push({_id: 3, host: '172.26.27.72:20467'}, arbiterOnly: true) > rs.initiate(cfg) > rs.isMaster() > rs.status()
#永久設置slaveOk
vim /root/.mongorc.js rs.slaveOk();
4. 建立用戶
use admin
#建立數據庫管理員
> db.createUser( { "user":"root", "pwd":"PWD", "roles":[ { "role":"readWriteAnyDatabase", "db":"admin" }, { "role":"dbAdminAnyDatabase", "db":"admin" }, { "role":"userAdminAnyDatabase", "db":"admin" } ] } )
#管理員登陸,可進行數據庫操做mongo admin -uroot -p --port 20467
#建立集羣管理員
db.createUser( { "user":"suroot", "pwd":"PWD", "roles":[ { "role":"clusterAdmin", "db":"admin" }, { "role":"clusterManager", "db":"admin" }, { "role":"clusterMonitor", "db":"admin" } ] })
#集羣管理員登陸,可進行集羣狀態查看和操做mongo admin -usuroot -p --port 20467
#建立特定庫的特定用戶
user testdb db.createUser( { "user":"test", "pwd":"testpwd", "roles":[ { "role":"readWrite", "db":"testdb" }, { "role":"dbAdmin", "db":"testdb" }, { "role":"userAdmin", "db":"testdb" } ] })
#查看建立的用戶
use admin > db.system.users.find()
5. 開啓認證
mongodb有2個認證環節:客戶端與mongod或者mongos之間,以及集羣環境中每一個mongod之間。用戶添加完成後須要關閉全部節點(先關閉仲裁和從節點, 再關閉主節點, 避免主節點切換):
#shutdown兩種方式
#登陸前關閉mongod -f conf/mongod.conf --shutdown
#登陸後關閉服務:db.shutdownServer()
#生成keyFile(keyFile的用途是做爲全部mongod後臺進程容許加入集羣的憑證, 全部集羣中的節點共用一個keyFile, 避免其餘mongod非法加入集羣):
#生成keyFile, keyFile的長度必須在6-1024個字符之間
openssl rand -base64 756 > /data/mongodb/conf/access.key
#key只讀
chmod 600 /data/mongodb/conf/access.key
#copy到另外兩臺服務器conf目錄
scp access.key root@192.168.72.105:/data/mongodb/conf/
scp access.key root@192.168.72.106:/data/mongodb/conf/
#更換SSH默認端口(22 -> 20462)後的同步方式rsync -azvh -e 'ssh -p 20462' access.key root@172.26.27.72:/data/mongodb/conf/
#取消三個節點mongod.conf文件中security部分的註釋,並重啓實例
use admin db.auth('root','PWD')
6. 中止mongod,建立mongodb用戶替代root
useradd mongo -s /sbin/nologin passwd mongo mongopwd
登陸權限也可添加後修改:
usermod -s /sbin/nologin mongo usermod -s /bin/bash mongo chown -R mongo:mongo /data/mongodb/ chown -R mongo:mongo /usr/local/mongodb/ chown mongo:mongo /etc/mongod.conf su mongo mongod -f /data/mongod.conf
##跳板機設置(阿里雲內網環境訪問,經過跳板機容許網外訪問)
#ssh -CfNg -L 20462:127.0.0.1:20467 mongo@192.16872.101
#ssh -CfNg -R 20467:127.0.0.1:20462 mongo@192.16872.101
##啓動中止服務
關閉:mongod -f conf/mongod.conf --shutdown 啓動: mongod -f conf/mongod.conf
##管理員登陸mongo admin -uroot -pPWD --port 20467
##集羣管理員登陸mongo admin -usuroot -pPWD --port 20467
##集羣狀態監控
mongostat --uri=mongodb://suroot:PWD@172.36.27.70:20467/admin 5 mongostat --uri=mongodb://suroot:PWD@172.36.27.71:20467/admin 5 mongostat --uri=mongodb://suroot:PWD@172.36.27.72:20467/admin 5
##集羣統計mongotop --host 172.36.27.71 --port 20467 -usuroot -pPWD --authenticationDatabase=admin 5
##查看每一個數據庫的鎖的使用mongotop --host 172.26.27.71 --port 20467 -usuroot -pPWD --authenticationDatabase=admin --locks 5