天天看點

mongodb主從仲裁節點配置

系統:CentOS 6.9

裝置3台:172.16.10.42(27020端口),172.16.10.90(27020端口),172.16.10.199(27020端口),如果沒有足夠裝置也可部署同一台裝置上面,隻需要修改端口即可。

同步系統時間:保證各個機器的時間一緻,可使用/usr/sbin/ntpdate time.nist.gov 進行系統時間同步,在系統任務中添加新的任務 crontab -e

<code>0 12 * * * /usr/sbin/ntpdate time.nist.gov &gt;/dev/null 2&gt;&amp;1</code>

配置同時允許打開的檔案最大數

檢視系統允許同時打開檔案的最大數 :<code>ulimit -a</code>

檢視系統允許的最大句柄檔案數:<code>cat /proc/sys/fs/file-max</code>

修改允許最大打開檔案數,修改之後會永久生效,在【/etc/security/limits.conf】中,增加下面的代碼:

<code>* soft nofile 65536</code>

<code>* hard nofile 65536</code>

保證3台裝置互相之間網絡通路可達

防火牆打開27020端口

/sbin/iptables -I INPUT -p tcp --dport 27020 -j ACCEPT #開放端口

/etc/init.d/iptables save # 儲存修改

service iptables restart # 重新開機防火牆,修改生效複制代碼

選擇MongoDB存放位置,例如: /home/mongodb

使用cd 指令​<code>​cd /home/mongodb​</code>​ 進入mongodb 目錄,下載下傳MongoDB 壓縮包 ​<code>​curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.10.tgz​</code>​

解壓檔案 ​<code>​tar -xzvf mongodb-linux-x86_64-rhel62-3.4.10.tgz​</code>​ 到目前目錄下

建立資料存放檔案夾 ​<code>​mkdir data​</code>​,建立日志存放檔案夾 ​<code>​mkdir log​</code>​

配置設定機器172.16.10.42(主節點),172.16.10.90(從節點),172.16.10.199(arb仲裁節點)

在mongdb 目錄下建立mongod.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 #mongo 占用的端口号

setParameter:

failIndexKeyTooLong: false複制代碼

啟動mongdb服務 <code>/home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongod --config /home/mongodb/mongod.conf</code>

控制台連接配接mongo <code>/home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongo 127.0.0.1:27020</code> ,必須指定端口号,因為預設的端口為27017

建立管理者帳号

use admin; #進入admin資料庫,系統自帶

db.createUser(

{

user: "admin",

pwd: "admin",

roles: [ "__system","backup","clusterAdmin","dbAdminAnyDatabase","readWriteAnyDatabase","userAdminAnyDatabase" ]

}

); #建立使用者,并配置設定使用者角色複制代碼

查詢上一步操作建立的使用者 ​<code>​db.system.users.find({"user":"admin"})​</code>​查詢結果如下:

關閉mongodb 服務 <code>/home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongod --config /home/mongodb/mongod.conf --shutdown</code>

生成keyfile檔案 <code>openssl rand -base64 741 &gt; /home/mongodb/mongodb.keyfile</code>

修改主節點mongd.conf檔案為如下内容

path: /home/mongodb/log/mongod.log

logAppend: true

dbPath: /home/mongodb/data

directoryPerDB: true

pidFilePath: /home/mongodb/mongod.pid

port: 27020

failIndexKeyTooLong: false

security:

keyFile: /home/mongodb/mongodb.keyfile # 使用keyfile認證

authorization: enabled

replication:

replSetName: mongodb_set #名稱可以自定義,但是必須保證主節點、從節點、仲裁節點統一複制代碼

同理在172.16.10.90,172.16.10.199 <code>/home/mongodb</code> 目錄下建立 data、log目錄

拷貝主節點 (172.16.10.42) <code>/home/mongodb</code> 目錄下的 <code>mongodb.keyfile</code>、<code>mongod.conf</code>檔案以及 <code>mongodb-linux-x86_64-rhel62-3.4.10</code> 檔案夾 到從節點已經仲裁節點的<code>/home/mongodb</code> 目錄下

修改仲裁節點` mongod.conf`` 檔案内容如下

enabled: false # 仲裁節點本地不儲存資料

分别在三台裝置上執行 <code>/home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongod --config /home/mongodb/mongod.conf</code> 啟動mongodb服務

控制台連接配接主節點(172.16.10.42)mongo <code>/home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongo 127.0.0.1:27020 -u admin -p</code> , 使用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

檢視叢集節點的狀态:​<code>​rs.status();​</code>​

添加仲裁節點

​<code>​rs.addArb("172.16.10.199:27020");​</code>​

添加從節點

​<code>​rs.add("172.16.10.90:27020");​</code>​

檢視叢集配置​<code>​rs.config();​</code>​顯示結果如下

mongodb_set:PRIMARY&gt; 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,

"priority" : 1,

"_id" : 2,

"host" : "172.16.10.90:27020",

],

"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.members[2].votes=0

所有配置到此結束