分類
發燒車訊

MongoDB副本集replica set (二)–副本集環境搭建

(一)主機信息

操作系統版本:centos7 64-bit

數據庫版本   :MongoDB 4.2 社區版

ip hostname
192.168.10.41 mongoserver1
192.168.10.42 mongoserver2
192.168.10.43 mongoserver3

(二)副本集搭建過程

首先需要在3台服務器上安裝MongoDB軟件,安裝過程見:https://www.cnblogs.com/lijiaman/p/12983589.html。安裝完成之後,即可進行後續的配置,具體操作如下:

(1)在一台機器上創建keyfile

openssl rand -base64 756 > /mongo/mongo-keyfile
chmod 400 /mongo/mongo-keyfile

(2)拷貝feyfile到所有節點

scp /mongo/mongo-keyfile root@192.168.10.42:/mongo/
scp /mongo/mongo-keyfile root@192.168.10.43:/mongo/

(3)以啟用身份驗證的方式開啟所有節點
這裏將所有參數設置到配置文件裏面,方便管理,配置文件如下:

[root@mongodbserver1 mongo]# cat /etc/mongod.conf
# mongod.conf

# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /mongo/mongod.log

# Where and how to store data.
storage:
dbPath: /mongo/data
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:

# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /mongo/mongod.pid # location of pidfile

# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces.

security:
authorization: enabled                 # 啟用身份驗證
keyFile: /mongo/mongo-keyfile         # 配置keyfile文件
 
replication:
replSetName: rstest                    # 設置副本集名稱

然後啟動所有節點,以節點1為例:

[root@mongodbserver1 mongo]# mongod -f /etc/mongod.conf

(4)初始化副本集
在其中一個節點執行以下腳本初始化副本集,只需在一個節點上執行即可。

rs.initiate(
{
_id : "rstest",
members: [
{ _id : 0, host : "192.168.10.41:27017" },
{ _id : 1, host : "192.168.10.42:27017" },
{ _id : 2, host : "192.168.10.43:27017" }
]
}
)

參數含義:
_id          :副本集的名稱
members :副本集的成員信息

在初始化時,會觸發投票選舉一個主節點,可以使用rs.status()來確定主節點成員

rstest:SECONDARY> rs.status()
...
"members" : [
{
"_id" : 0,
"name" : "192.168.10.41:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 280,
"optime" : {
"ts" : Timestamp(1592897767, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2020-06-23T07:36:07Z"),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1592897607, 1),
"electionDate" : ISODate("2020-06-23T07:33:27Z"),
"configVersion" : 1,
"self" : true,
"lastHeartbeatMessage" : ""
},
...

(5)創建管理員用戶
第一個用戶必須要有創建其它用戶的權限,例如需要有userAdminAnyDatabase權限,並且需要創建在admin數據庫中。
因為是在副本集上創建用戶,故要在主節點上執行。如創建root用戶

use admin;

db.createUser(
{
user:"root",
pwd:"123456",
roles:[{role:"userAdminAnyDatabase",db:"admin"}]
}
)

(6)以管理員身份登錄數據庫
通過以下方式以管理員身份登錄到數據庫

mongo -u root -p 123456 --authenticationDatabase admin

(7)創建一個集群管理員賬戶
clusterAdmin角色被授予副本集操作的權限,如配置副本集。在admin數據庫中創建一個集群管理員並授予clusterAdmin角色。

use admin

db.createUser(
{
"user" : "replica",
"pwd" : "replica",
roles: [ { "role" : "clusterAdmin", "db" : "admin" } ]
}
)

(8)要啟用身份驗證,需要重啟數據庫
重啟完成后,就需要以用戶密碼方式登錄數據庫了,假如不使用用戶名密碼,可以登錄數據庫,但是無法訪問數據

[root@mongodbserver2 mongo]# mongo
MongoDB shell version v4.2.7
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("d49b410b-a7af-4550-a455-faa82885517b") }
MongoDB server version: 4.2.7
rstest:PRIMARY> show dbs
rstest:PRIMARY> 
rstest:PRIMARY> db
test

只有使用了用戶名密碼,才能查到數據:

[root@mongodbserver2 mongo]# mongo -u root -p 123456 --authenticationDatabase admin 
MongoDB shell version v4.2.7
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("a1f0da48-1266-4766-a9e4-32b97a46c3ec") }
MongoDB server version: 4.2.7
rstest:PRIMARY> 
rstest:PRIMARY> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB

【完】

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

新北清潔公司,居家、辦公、裝潢細清專業服務

※別再煩惱如何寫文案,掌握八大原則!

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

※教你寫出一流的銷售文案?