1. 程式人生 > >MongoDB副本集的搭建

MongoDB副本集的搭建

tom parent 搭建 sof mongodb disable 轉換 gpa kernel

參考博文:https://www.jianshu.com/p/ca620842868a

一、安裝準備
1、修改系統配置
#關閉selinux、firewall
#修改/etc/security/limits.conf添加以下內容:

  • soft nofile 65536
  • hard nofile 65536
  • soft nproc 65536
  • hard nproc 65536
    #修改/etc/security/limits.d/20-nproc.conf
  • soft nproc 65536
    3、創建賬戶、目錄
    groupadd -g 600 mongo
    useradd -u 600 -g mongo mongo

二、安裝步驟
1、解壓文件
tar xvf mongodb-linux-x86_64-enterprise-rhel70-3.6.2.tgz -C /usr/local/
cd /usr/local
mv mongodb-linux-x86_64-enterprise-rhel70-3.6.2/ mongodb
cd mongodb
mkdir -p data/db
mkdir log
touch log/mongod.log
mkdir etc
touch etc/mongod.conf
chown -R mongo.mongo /usr/local/mongodb
2、分別在每臺機器上配置config文件
vim etc/mongod.conf

dbpath = /usr/local/mongodb/data/db # 指定數據庫路徑
logpath = /usr/local/mongodb/log/mongod.log # 指定mongodb日誌文件
logappend = true # 使用追加的方式寫日誌
port = 27017 #設置端口號為27017
bind_ip = 192.168.1.221
fork = true #設置以守護進程的方式啟動mongod
replSet = bsbgpsrs #設置副本集的名字為myrs,同一副本集群的replSet名稱
3、分別在每臺機器上啟動副本集
su - mongo
#修改環境變量
PATH=$PATH:$HOME/bin:/usr/local/mongodb/bin
export PATH
#啟動
yum install -y net-snmp* gcc-c++
nohup mongod -f /usr/local/mongodb/etc/mongod.conf >/dev/null 2>&1 &
4、初始化副本集
登錄任意一臺機器的mongodb後臺管理shell:
cd /usr/local/mongodb
./bin/mongo
use admin
config = {
"_id":"bsbgpsrs",
"members":[
{"_id":0,"host":"192.168.198.224:27017"},
{"_id":1,"host":"192.168.198.225:27017"},
{"_id":2,"host":"192.168.198.226:27017",arbiterOnly:true}
]
}
rs.initiate(config); #初始化配置
5、查看副本集狀態
rs.status();
6 、添加驗證
use admin
db.createUser({user:"admin",pwd:"Mongo/2018",roles:["root"]})
db.auth("admin","Mongo/2018")

三、測試副本集
1、測試副本集的數據復制功能
此時在我的機器上192.168.198.224是主節點,我們用mongo來登錄shell。

cd /usr/local/mongodb
./bin/mongo
use test #創建test數據庫
db.testdb.insert({"name":"yaya"}); #插入數據
我們用副本節點登錄shell,我這裏是192.168.198.225:

cd /usr/local/mongodb
./bin/mongo
use test
show tables
此時會報錯:

[thread1] Error: listCollections failed: {
"ok" : 0,
"errmsg" : "not master and slaveOk=false",
"code" : 13435,
"codeName" : "NotMasterNoSlaveOk"
}
因為mongodb默認是從主節點讀寫數據的,副本節點上不允許讀,需要設置副本節點可以讀。

myrs:SECONDARY> db.getMongo().setSlaveOk();
此時就可以讀取數據了:

repset:SECONDARY> db.testdb.find();
控制臺輸出:{ "_id" : ObjectId("59676d711881041abab44477"), "name" : "yaya" }
所以,數據復制的功能是可用的。

2、測試副本集的故障轉移功能
將主節點192.168.198.224的mongod進程殺死:

myrs:PRIMARY> use admin
myrs:PRIMARY> db.shutdownServer()
此時可以看到,192.168.198.225原本是副節點,此時自動轉換為主節點。可以通過rs.status()來查看。

四、其他設置
1、取消透明大頁在/etc/rc.d/rc.local增加下列內容:
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
chmod +x /etc/rc.d/rc.local
2、Mongodb C drive安裝
tar xvf mongo-c-driver-1.6.1.tar.gz
cd mongo-c-driver-1.6.1/
./configure -disable-automatic-init-and-cleanup
make
make install

MongoDB副本集的搭建