mongodb主從仲裁節點配置

環境介紹

  • 系統:CentOS 6.9
  • MongoDB版本:mongodb-linux-x86_64-rhel62-3.4.10linux

  • 設備3臺:172.16.10.42(27020端口),172.16.10.90(27020端口),172.16.10.199(27020端口),若是沒有足夠設備也可部署同一臺設備上面,只須要修改端口便可。mongodb

準備工做

  • 同步系統時間:保證各個機器的時間一致,可以使用/usr/sbin/ntpdate time.nist.gov 進行系統時間同步,在系統任務中添加新的任務 crontab -e
    0 12 * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1數據庫

  • 配置同時容許打開的文件最大數
    查看系統容許同時打開文件的最大數 :ulimit -a
    查看系統容許的最大句柄文件數:cat /proc/sys/fs/file-max
    修改容許最大打開文件數,修改以後會永久生效,在【/etc/security/limits.conf】中,增長下面的代碼:
    * soft nofile 65536
    * hard nofile 65536bash

  • 保證3臺設備相互之間網絡訪問可達網絡

  • 防火牆打開27020端口
/sbin/iptables -I INPUT -p tcp --dport 27020 -j ACCEPT      #開放端口
/etc/init.d/iptables save   # 保存修改
 service iptables restart   # 重啓防火牆,修改生效複製代碼

準備安裝

  • 選擇MongoDB存放位置,例如: /home/mongodb
  • 使用cd 命令cd /home/mongodb 進入mongodb 目錄,下載MongoDB 壓縮包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.10.tgz
  • 解壓文件 tar -xzvf mongodb-linux-x86_64-rhel62-3.4.10.tgz 到當前目錄下
  • 建立數據存放文件夾 mkdir data,建立日誌存放文件夾 mkdir log
  • 分配機器172.16.10.42(主節點),172.16.10.90(從節點),172.16.10.199(arb仲裁節點)

安裝MongoDB主節點

  • 在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服務 /home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongod --config /home/mongodb/mongod.confcurl

  • 控制檯鏈接mongo /home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongo 127.0.0.1:27020 ,必須指定端口號,由於默認的端口爲27017tcp

  • 建立管理員賬號ui

use  admin;  #進入admin數據庫,系統自帶
db.createUser(
   {
     user: "admin",
     pwd: "admin",
     roles: [ "__system","backup","clusterAdmin","dbAdminAnyDatabase","readWriteAnyDatabase","userAdminAnyDatabase" ]
   }
);  #建立用戶,並分配用戶角色複製代碼
  • 查詢上一步操做建立的用戶 db.system.users.find({"user":"admin"})
    查詢結果以下:
  • 關閉mongodb 服務 /home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongod --config /home/mongodb/mongod.conf --shutdownurl

  • 生成keyfile文件 openssl rand -base64 741 > /home/mongodb/mongodb.keyfilespa

  • 修改主節點mongd.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
setParameter:
  failIndexKeyTooLong: false
security:
  keyFile: /home/mongodb/mongodb.keyfile       # 使用keyfile認證
  authorization: enabled
replication:
  replSetName: mongodb_set   #名稱能夠自定義,可是必須保證主節點、從節點、仲裁節點統一複製代碼

安裝MongoDB從節點、仲裁節點

  • 同理在172.16.10.90,172.16.10.199 /home/mongodb 目錄下新建 data、log目錄

  • 拷貝主節點 (172.16.10.42) /home/mongodb 目錄下的 mongodb.keyfilemongod.conf文件以及 mongodb-linux-x86_64-rhel62-3.4.10 文件夾 到從節點已經仲裁節點的/home/mongodb 目錄下

  • 修改仲裁節點` mongod.conf`` 文件內容以下

systemLog:
   destination: file
   path: /home/mongodb/log/mongod.log
   logAppend: true
storage:
  dbPath: /home/mongodb/data
  journal:
    enabled: false                                         # 仲裁節點本地不保存數據
  directoryPerDB: true
processManagement:
   fork: true
   pidFilePath: /home/mongodb/mongod.pid
net:
   port: 27020
setParameter:
  failIndexKeyTooLong: false
security:
  keyFile: /home/mongodb/mongodb.keyfile       # 使用keyfile認證
  authorization: enabled
replication:
  replSetName: mongodb_set   #名稱能夠自定義,可是必須保證主節點、從節點、仲裁節點統一複製代碼

配置主節點、從節點、仲裁節點

  • 分別在三臺設備上執行 /home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongod --config /home/mongodb/mongod.conf 啓動mongodb服務

  • 控制檯鏈接主節點(172.16.10.42)mongo /home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongo 127.0.0.1:27020 -u admin -p , 使用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
查看集羣節點的狀態:rs.status();

  • 添加仲裁節點

rs.addArb("172.16.10.199:27020");

  • 添加從節點

rs.add("172.16.10.90:27020");

  • 查看集羣配置rs.config();
    顯示結果以下
mongodb_set:PRIMARY> 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,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "172.16.10.90:27020",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "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 = rs.conf();
cfg.members[2].votes=0
rs.reconfig(cfg);複製代碼

全部配置到此結束

相關文章
相關標籤/搜索