mongodb主從仲裁節點配置


環境介紹

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

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

准備工作

  • 同步系統時間:保證各個機器的時間一致,可使用/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 65536

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

  • 防火牆打開27020端口
  1. /sbin/iptables -I INPUT -p tcp --dport 27020 -j ACCEPT #開放端口
  2. /etc/init.d/iptables save # 保存修改
  3. 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文件,編輯如下內容
  1. systemLog:
  2. destination: file
  3. path: /home/mongodb/ log/mongod.log #日志存放位置
  4. logAppend: true #以追加的形式寫入日志
  5. storage:
  6. dbPath: /home/mongodb/data #數據存放地址
  7. journal:
  8. enabled: true
  9. directoryPerDB: true #每個數據庫單獨一個目錄
  10. processManagement:
  11. fork: true
  12. pidFilePath: /home/mongodb/mongod.pid #進程文件存放位置
  13. net:
  14. port: 27020 #mongo 占用的端口號
  15. setParameter:
  16. failIndexKeyTooLong: false復制代碼
  • 啟動mongdb服務 /home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongod --config /home/mongodb/mongod.conf

  • 控制台連接mongo /home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongo 127.0.0.1:27020 ,必須指定端口號,因為默認的端口為27017

  • 創建管理員帳號

  1. use admin; #進入admin數據庫,系統自帶
  2. db.createUser(
  3. {
  4. user: "admin",
  5. pwd: "admin",
  6. roles: [ "__system","backup","clusterAdmin","dbAdminAnyDatabase","readWriteAnyDatabase","userAdminAnyDatabase" ]
  7. }
  8. ); #創建用戶,並分配用戶角色復制代碼
  • 查詢上一步操作創建的用戶 db.system.users.find({"user":"admin"})
    查詢結果如下:
  • 關閉mongodb 服務 /home/mongodb/mongodb-linux-x86_64-rhel62-3.4.10/bin/mongod --config /home/mongodb/mongod.conf --shutdown

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

  • 修改主節點mongd.conf文件為如下內容

  1. systemLog:
  2. destination: file
  3. path: /home/mongodb/ log/mongod.log
  4. logAppend: true
  5. storage:
  6. dbPath: /home/mongodb/data
  7. journal:
  8. enabled: true
  9. directoryPerDB: true
  10. processManagement:
  11. fork: true
  12. pidFilePath: /home/mongodb/mongod.pid
  13. net:
  14. port: 27020
  15. setParameter:
  16. failIndexKeyTooLong: false
  17. security:
  18. keyFile: /home/mongodb/mongodb.keyfile # 使用keyfile認證
  19. authorization: enabled
  20. replication:
  21. 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`` 文件內容如下

  1. systemLog:
  2. destination: file
  3. path: /home/mongodb/ log/mongod.log
  4. logAppend: true
  5. storage:
  6. dbPath: /home/mongodb/data
  7. journal:
  8. enabled: false # 仲裁節點本地不保存數據
  9. directoryPerDB: true
  10. processManagement:
  11. fork: true
  12. pidFilePath: /home/mongodb/mongod.pid
  13. net:
  14. port: 27020
  15. setParameter:
  16. failIndexKeyTooLong: false
  17. security:
  18. keyFile: /home/mongodb/mongodb.keyfile # 使用keyfile認證
  19. authorization: enabled
  20. replication:
  21. 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

  • 初始化副本集配置
  1. use admin;
  2. config={_id: "mongodb_set",members:[{_id:0,host:"172.16.10.42","priority":20}]}
  3. 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();
    顯示結果如下
  1. mongodb_set:PRIMARY> rs. config()
  2. {
  3. "_id" : "mongodb_set",
  4. "version" : 4,
  5. "protocolVersion" : NumberLong(1),
  6. "members" : [
  7. {
  8. "_id" : 0,
  9. "host" : "172.16.10.42:27020",
  10. "arbiterOnly" : false,
  11. "buildIndexes" : true,
  12. "hidden" : false,
  13. "priority" : 20,
  14. "tags" : {
  15.  
  16. },
  17. "slaveDelay" : NumberLong(0),
  18. "votes" : 1
  19. },
  20. {
  21. "_id" : 1,
  22. "host" : "172.16.10.199:27020",
  23. "arbiterOnly" : true,
  24. "buildIndexes" : true,
  25. "hidden" : false,
  26. "priority" : 1,
  27. "tags" : {
  28.  
  29. },
  30. "slaveDelay" : NumberLong(0),
  31. "votes" : 1
  32. },
  33. {
  34. "_id" : 2,
  35. "host" : "172.16.10.90:27020",
  36. "arbiterOnly" : false,
  37. "buildIndexes" : true,
  38. "hidden" : false,
  39. "priority" : 1,
  40. "tags" : {
  41.  
  42. },
  43. "slaveDelay" : NumberLong(0),
  44. "votes" : 1
  45. }
  46. ],
  47. "settings" : {
  48. "chainingAllowed" : true,
  49. "heartbeatIntervalMillis" : 2000,
  50. "heartbeatTimeoutSecs" : 10,
  51. "electionTimeoutMillis" : 10000,
  52. "catchUpTimeoutMillis" : 60000,
  53. "getLastErrorModes" : {
  54.  
  55. },
  56. "getLastErrorDefaults" : {
  57. "w" : 1,
  58. "wtimeout" : 0
  59. },
  60. "replicaSetId" : ObjectId("59f82d3d21b782e865dc270a")
  61. }
  62. } 復制代碼
  • 修改從節點為只讀節點
    獲取當前配置,修改之后重新寫入配置
  1. cfg = rs.conf();
  2. cfg.members[2].priority=0
  3. rs.reconfig(cfg); 復制代碼
  • 修改從節點為永遠不可能被選為主節點(非必須)
    獲取當前配置,修改之后重新寫入配置
  1. cfg = rs.conf();
  2. cfg.members[2].votes=0
  3. rs.reconfig(cfg); 復制代碼

所有配置到此結束

轉載於:https://juejin.im/post/59f91decf265da43231a48bc

 
https://blog.csdn.net/weixin_33691817/article/details/91431611
 
 
 


免責聲明!

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



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