一、配置檔案/etc/mongod.conf
[root@mongo01 ~]# egrep -v "^(#|$)" /etc/mongod.conf
<code>systemLog:</code>
<code> </code><code>destination: </code><code>file</code>
<code> </code><code>logAppend: </code><code>true</code>
<code> </code><code>path: </code><code>/data/mongodb/log/rs1</code><code>.log</code>
<code>storage:</code>
<code> </code><code>dbPath: </code><code>/data/mongodb/data</code>
<code> </code><code>directoryPerDB: </code><code>true</code>
<code> </code><code>journal:</code>
<code> </code><code>enabled: </code><code>true</code>
<code>processManagement:</code>
<code> </code><code>fork: </code><code>true</code> <code># fork and run in background</code>
<code> </code><code>pidFilePath: </code><code>/data/mongodb/conf/mongod</code><code>.pid </code><code># location of pidfile</code>
<code>net:</code>
<code> </code><code>port: 27027</code>
<code>replication:</code>
<code> </code><code>oplogSizeMB: 50000</code>
<code> </code><code>replSetName: rs1</code>
[root@mongo01 ~]#
[root@mongo01 ~]# ls /data/mongodb/
<code>arbiter conf data log startaribiter.sh</code>
[root@mongo01 ~]# ls /data/mongodb/arbiter/
<code>arbiter.conf conf data log</code>
[root@mongo01 ~]# egrep -v "^(#|$)" /data/mongodb/arbiter/arbiter.conf
<code> </code><code>path: </code><code>/data/mongodb/arbiter/log/rs1</code><code>.log</code>
<code> </code><code>dbPath: </code><code>/data/mongodb/arbiter/data</code>
<code> </code><code>pidFilePath: </code><code>/data/mongodb/arbiter/conf/mongod</code><code>.pid </code><code># location of pidfile</code>
<code> </code><code>port: 27029</code>
[root@mongo01 ~]# cat /data/mongodb/startarbiter.sh
<code>#!/bin/sh</code>
<code>. </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/functions</code>
<code>cd</code> <code>${0%/*}</code><code>/arbiter</code>
<code>daemon --user mongod </code><code>"mongod --config arbiter.conf"</code>
注意:arbiter.conf檔案的屬主、屬組為mongod
二、啟動服務,配置副本集
service mongod start
/data/mongodb/startaribiter.sh
啟動第二個節點
然後:在primary上,
<code>rs.initiate()</code>
<code>rs.add(</code><code>"mongodb2.example.net"</code><code>)</code>
<code>rs.add(</code><code>"mongodb3.example.net"</code><code>)</code>
<code>rs.addArb(“mongodb1.example.net:27029”)</code>
如果希望降低primary的優先級:
<code>cfg = rs.conf()</code>
<code>cfg.members[2].priority = 0.5</code>
<code>rs.reconfig(cfg)</code>
<code>rs.status()</code>
實作複制後,在從節點上檢視資料如下:
<code>SECONDARY> rs.slaveOk()</code>
<code>SECONDARY> show collections</code>
三、 使用keyFile實作複制驗證
在主節點上建立群集使用者及密碼如下:
<code>admin = db.getSiblingDB(</code><code>"admin"</code><code>)</code>
<code>admin.createUser(</code>
<code> </code><code>{</code>
<code> </code><code>user: “clusteradmin”,</code>
<code> </code><code>pwd</code><code>: “clusterpwd”,</code>
<code> </code><code>roles: [ </code>
<code> </code><code>{ role: </code><code>"userAdminAnyDatabase"</code><code>, db: </code><code>"admin"</code> <code>},</code>
<code> </code><code>{ role: “clusterAdmin”, db: </code><code>"admin"</code> <code>},</code>
<code> </code><code>{ role: “root”, db: </code><code>"admin"</code> <code>}</code>
<code> </code><code>]</code>
<code> </code><code>}</code>
<code>)</code>
測試使用者:
<code>db.getSiblingDB(</code><code>"admin"</code><code>).auth(“clusteradmin”, “clusterpwd” )</code>
在各從節點上關閉服務:
use admin
db.shutdownServer()
包括arbiter節點也要關閉服務,最後再關閉primary節點的服務。
然後在各配置檔案mongdb.conf中添加認證檔案:
<code>security:</code>
<code> </code><code>keyFile: </code><code>/data/mongodb/conf/keyfile</code><code>.key</code>
[root@mongo01 ~]# cat /data/mongodb/conf/keyfile.key
<code>abcdefgh</code>
該檔案的權限必須是600或400,并把該檔案複制到各節點上(保持内容相同),該檔案也可以使用以下指令生成:
<code>openssl rand -base64 755 > path-to-keyfile</code>
最後再新啟動各節點的mongodb服務,并重新login ,測試。
參考:https://docs.mongodb.com/manual/tutorial/deploy-replica-set/
https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set/
本文轉自 meteor_hy 51CTO部落格,原文連結:http://blog.51cto.com/caiyuanji/1790862,如需轉載請自行聯系原作者