mongodb.副本集配置方法(使用keyfile認證部署)


前提條件:

 - 已安裝MongoDB, 版本以3.6為例

 - 系統: Debian9

 - 建議做副本集的話, 以3台以上為宜, 本文以1台主機2個服務為例

 

1.創建數據存放的目錄, 並授權

sudo mkdir /data/db/mongodb-clus/repl1 -p && sudo chown mongodb:mongodb /data/db/mongodb-clus/repl1

sudo mkdir /data/db/mongodb-clus/repl2 -p && sudo chown mongodb:mongodb /data/db/mongodb-clus/repl2

2.生成keyfile

這個keyfile生成后, 拷貝到全部副本機器上使用

sudo openssl rand -base64 741 >> /data/db/mongodb.key
sudo chown mongodb:mongodb /data/db/mongodb.key 
sudo chmod 600 /data/db/mongodb.key

3.以副本方式+keyfile啟動服務

sudo /usr/bin/mongod --dbpath /data/db/mongodb-clus/repl1 --port 29001 --logpath /data/logs/mongo-repl1.log --bind_ip 127.0.0.1,192.168.0.11 --replSet repset1
sudo /usr/bin/mongod --dbpath /data/db/mongodb-clus/repl2 --port 29002 --logpath /data/logs/mongo-repl2.log --bind_ip 127.0.0.1,192.168.0.11 --replSet repset1

看到服務日志提示監聽端口, 表示服務啟動成功

 

4.在主服務登錄mongo, 做一些初始化配置

mongo --port 29001

use admin
config = { _id:"repset1", members:[
{_id:0,host:"192.168.0.11:29001"},
{_id:1,host:"192.168.0.11:29002"}]
}
rs.initiate(config);

 

完成后查看一下副本狀態

rs.status()

能輸出以下信息表示初始化成功
{
        "set" : "repset1",
        "date" : ISODate("2019-01-10T02:51:46.835Z"),
        "myState" : 1,
        "term" : NumberLong(1),
        "syncingTo" : "",
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(1547088701, 1),
                        "t" : NumberLong(1)
                },
                "readConcernMajorityOpTime" : {
                        "ts" : Timestamp(1547088701, 1),
                        "t" : NumberLong(1)
                },
                "appliedOpTime" : {
                        "ts" : Timestamp(1547088701, 1),
                        "t" : NumberLong(1)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1547088701, 1),
                        "t" : NumberLong(1)
                }
        },
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.0.11:29001",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 2401,
                        "optime" : {
                                "ts" : Timestamp(1547088701, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2019-01-10T02:51:41Z"),
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "electionTime" : Timestamp(1547086719, 1),
                        "electionDate" : ISODate("2019-01-10T02:18:39Z"),
                        "configVersion" : 1,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                },
                {
                        "_id" : 1,
                        "name" : "192.168.0.11:29002",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 1997,
                        "optime" : {
                                "ts" : Timestamp(1547088701, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1547088701, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2019-01-10T02:51:41Z"),
                        "optimeDurableDate" : ISODate("2019-01-10T02:51:41Z"),
                        "lastHeartbeat" : ISODate("2019-01-10T02:51:46.556Z"),
                        "lastHeartbeatRecv" : ISODate("2019-01-10T02:51:46.698Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "192.168.0.11:29001",
                        "syncSourceHost" : "192.168.0.11:29001",
                        "syncSourceId" : 0,
                        "infoMessage" : "",
                        "configVersion" : 1
                }
        ],
        "ok" : 1,
        "operationTime" : Timestamp(1547088701, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1547088701, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

6.建立角色和賬號, 用於管理副本集

use admin
db.createRole({role:'sysadmin',roles:[],privileges:[{resource:{anyResource:true},actions:['anyAction']}]})
db.createUser({user:'root',pwd:'123456',roles:[{role:'sysadmin',db:'admin'}]})

7.退出mongo, 重新以認證方式登錄

mongo --port 29001 -u "root" -p "123456" --authenticationDatabase "admin"

8.完成

現在可以在29001的數據庫上創建數據, 測試29002等副本中是否能自動同步了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM