(1)解锁MongoDB replica set核心姿势
本文倒騰目前大熱的MongoDB Replica Set集群,在倒騰的同時串講一些 MongoDB特性。
副本集Replica?Set是一個術語,定義具有多節(jié)點的數據庫集群,這些節(jié)點具有主從復制(master-slave replication) 且節(jié)點之間實現了自動故障轉移。
這樣的結構通常需要具有奇數個成員的成員(無論是否帶有Arbiter節(jié)點),以確保正確地選擇PRIMARY(主)數據庫。
選定的DB將處理所有傳入的寫操作,并將有關它們的信息存儲在其oplog,每個輔助(從屬)副本成員都可以訪問和復制oplog,以應用于它們的數據集。
前置
為創(chuàng)建一個Replica?set,?至少需要三個MongoDB實例,請查看官網安裝指南.
本文會始終使用sudo指令,一般情況請為MongoDB服務創(chuàng)建一個標準用戶 mongod
配置網絡
為達到數據一致性,每個實例節(jié)點需要與集群其他節(jié)點通信,以三實例數據傳輸為例:
① replica set每個成員都使用私有IP,部署在同一數據中心,這也是推薦方式。
② replica?set每個節(jié)點使用公網ip,節(jié)點部署在不同數據中心(在replication時有網絡延遲),這種方式一般用于強災備部署,如果采用這種方式,需要在主機之間配置SSL/TLS或通過vpn通信
replica?set節(jié)點認證
本節(jié)你會使用openssl創(chuàng)建一個用于在副本集成員之間認證的key文件,MongoDB推薦使用x.509證書加密連接。
① 產生key文件
????將生成的key文件拷貝到復制集的每個成員
② 確保復制集成員都能訪問同一路徑的key文件:
③ 默認安裝的MongoDB使用標準賬戶?mongod?,確保mongod對文件有所有權
sudo?chown?mongod:mongod?/opt/mongo/mongo-keyfile創(chuàng)建Admin用戶
登陸你打算設為Primary的MongoDB節(jié)點,進入admin數據庫,創(chuàng)建具有root特權的管理員用戶
use?admin db.createUser({user:?"mongo-admin",?pwd:?"password",?roles:[{role:?"root",?db:?"admin"}]})配置MongoDB
修改復制集每個成員的mongod.conf:
net:port:?27017bindIp:?127.0.0.1,192.0.2.1? security:keyFile:?/opt/mongo/mongo-keyfile replication:???replSetName:?rs0指定key文件、replication set名稱;?
重啟服務
sudo?systemctl?restart?mongod啟動集群,添加節(jié)點
使用之前創(chuàng)建的管理員賬戶登陸 Primary MongoDB服務節(jié)點:
mongo?-u?mongo-admin?-p?--authenticationDatabase?admin①?初始化集群添加節(jié)點
rs.initiate() rs.add("mongo-repl-2") rs.add("mongo-repl-3")以上使用hostsname 代替節(jié)點ip地址,需要在節(jié)點/etc/hosts添加節(jié)點的 hosts映射條目。
② 使用rs.conf() 或 rs.status() 驗證集群配置和狀態(tài)
倒騰Replica Set
完成以上步驟,MongoDB 三實例Replica Set已經搭建好了。
登陸Primary節(jié)點做一些常規(guī)倒騰 (順便撿漏一些你意想不到的姿勢)
① 輸入測試數據
use?exampleDB for?(var?i?=?0;?i?<=?10;?i++)???db.exampleCollection.insert(?{?x?:?i?}?)將會隱式創(chuàng)建exampleDB 和 文檔集合exampleCollection。
請注意,?默認創(chuàng)建的Collection是不封頂的。
封頂capped collection:有固定大小的集合,支持高通量操作,這些操作根據插入順序插入和檢索文檔, 以循環(huán)緩沖區(qū)的形式工作(一旦集合達到分配空間,會通過override舊文檔來騰挪出新的空間)。
② 觀察Secondary節(jié)點是否已經同步到插入的數據
?使用創(chuàng)建的管理員賬戶登陸 Secondary節(jié)點,直接查詢會報:
因為默認建立的Replica?set讀寫均發(fā)生均在Primary節(jié)點(Secondary節(jié)點的作用是:冗余備份、故障轉移);
不過MongoDB replica set支持在客戶端設置read preference(讀操作首選項),大部分Driver均支持在連接字符串中指定read preference讀操作首選項,這個設置可實現真正意義的master-slave讀寫分離。
對應到shell會話,我們需要為本次Secondary會話 開啟可讀
db.getMongo().setSlaveOk()或
使用shell命令的讀取首選項
回過頭來
實操本文,你已經可以完整搭建MongoDB Replica Set,大致掌握了副本集的核心特性:
主節(jié)點讀寫、輔助節(jié)點冗余備份;
支持對輔助節(jié)點開啟讀操作。
后面我們聊一聊 副本集心跳?;睢惒綇椭啤⒆詣庸收限D移相關姿勢。
?
總結
以上是生活随笔為你收集整理的(1)解锁MongoDB replica set核心姿势的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BeetleX实现HTTP协议详解
- 下一篇: 基于Jenkins的持续交付全流程设计与