本文介紹MongoDB複本集,暫且按照3個節點來配置:A(primary)、B(secondary)、C(arbiter)
1. 在叢集每個節點上安裝一份MongoDB;
2. 配置複本集;
3. 配置複本集的使用者名稱、密碼;
4. 配置複本集的KeyFile安全鑒權;
5. 配置開機啟動;
6. golang串連MongoDB複本集,並執行CRUD操作;
每個節點IP:
A節點: 11.11.11.11
B節點: 22.22.22.22
C節點: 33.33.33.33
第一步: 安裝MongoDB
每個節點安裝MongoDB
vi/etc/yum.repos.d/mongodb-enterprise.repo
在mongodb-enterprise.repo檔案中加入以下內容
[mongodb-enterprise]
name=MongoDB Enterprise Repository
baseurl=https://repo.mongodb.com/yum/redhat/$releasever/mongodb-enterprise/3.6/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
然後運行以下命令
sudo yuminstall-y mongodb-enterprise
配置mongod.conf
先建立以下目錄
/test/db/mongodb |--logs |--keyfiles |--data
再配置記錄檔的路徑、資料目錄、複本集名稱
> vi /etc/mongod.conf
systemLog:
path: /test/db/mongodb/logs/mongod.log #記錄檔的路徑
storage:
dbPath: /test/db/mongodb/data #資料目錄
net:
port: 27017
bindIp: 11.11.11.11 #用戶端通過此ip串連
replication:
replSetName: "rs0" #複本集名稱
注意: 資料目錄、記錄檔目錄要將使用者改為mongod
chown mongod:mongod -R /test/db/mongodb/data
chown mongod:mongod -R /test/db/mongodb/logs
分別啟動每個節點:A、B、C節點
mongod--config /etc/mongod.conf
第二步: 組建複本集
假設我們要將A結點作為primary, B結點作為secondary, C結點作為arbiter
在A結點(11.11.11.11)這台機器上運行
mongo
串連成功後,開始配置複本集:
> config = {
"_id": "rs0",
"members": [
{
"_id": 0,
"host": "11.11.11.11:27017"
}
]
}
> rs.initiate(config) #初始化複本集{ "ok" : 1 }
> rs.add({host: '22.22.22.22:27017'})
> rs.addArb('33.33.33.33:27017')
> rs.status() #查看複本集狀態,找到primary節點的IP
第三步: 建立帳戶密碼
複本集搭建成功後,需要給整個複本集建立帳戶、密碼
在A結點(primary)上,用用戶端串連,建立使用者權限(主節點,可以用 rs.status() 查看)
[root@servera ~]# mongo
rs0:PRIMARY> use admin
switched to db admin
#建立超級管理員:root
replSet:PRIMARY> db.createUser({
"user": "root",
"pwd": "rootpwd",
"roles": [
{ "role": "root", "db": "admin" }
]
})
Successfully added user: {
"user" : "root",
"roles" : [{"role" : "root","db" : "admin"}]
}
rs0:PRIMARY> use mytest
#建立mytest資料庫
switched to db mytest
#建立mytest資料庫管理員
replSet:PRIMARY> db.createUser({
"user": "mytest",
"pwd": "mytestpwd",
"roles": [ { "role": "dbOwner", "db": "mytest" } ]
})
Successfully added user: {
"user" : "mytest",
"roles" : [{"role" : "dbOwner","db" : "mytest"}]
}
第四步: 建立keyfile
建立key檔案, 三個節點必須要用同一份keyfile,在一台機器產生,拷貝到另外兩台,並且修改成 400 的檔案屬性。
結點A、結點B、結點C上都建立/test/db/mongodb/keyfiles目錄, 然後在結點A上輸入以下命令
openssl rand -base64 756 > /test/db/mongodb/keyfiles/keyfile
chmod 400 /test/db/mongodb/keyfiles/keyfile
並且把這份keyfile同步到其他兩個節點的/test/db/mongodb/keyfiles 目錄下;
關閉複本集的所有成員
先關閉結點B(secondary)上的mongod, 再關閉結點C(arbiter)上的mongod, 最後關閉結點A(primary)上的mongod
分別依次在B, C, A上運行mongo shell, 然後再輸入以下命令來關閉mongod
use admin
db.shutdownServer()
修改每個節點的設定檔mongo.conf中的security配置項:
security:
keyFile: /test/db/mongodb/keyfiles/keyfile
authorization: enabled
注意:三台機器都要修改mongod.conf。另外,keyfiles目錄要將使用者改為mongod
chown mongod:mongod -R /test/db/mongodb/keyfiles
重新啟動複本集
[root@servera ~]# mongod -f /etc/mongod.conf #機器A
[root@serverb ~]# mongod -f /etc/mongod.conf #機器B
[root@serverc ~]# mongod -f /etc/mongod.conf #機器C
第五步: 設定MongoDB開機啟動
[root@servera ~]# systemctl enable mongod.service
[root@serverb ~]# systemctl enable mongod.service
[root@serverc ~]# systemctl enable mongod.service
第六步: Golang串連MongoDB
package main
import (
"os"
"fmt"
"github.com/globalsign/mgo"
)
func main() {
// user, password, database, rs0分別為使用者名稱、密碼、資料庫、複本集,請自行修改
URL := "mongodb://user:password@11.11.11.11,22.22.22.22/database?replicaSet=rs0"
session, err := mgo.Dial(URL)
if err != nil {
fmt.Println(err.Error())
os.Exit(-1)
}
session.SetMode(mgo.Monotonic, true)
Conn := session.DB("")
// 獲得 Mongodb的串連後,再就可以進行各種CRUD啦
}