MongoDB集羣介紹與搭建--RS篇

什麼是mongodb集羣

是指由多臺mongodb服務器組成的服務器集羣,稱之爲mongodb集羣。mongodb

mongodb集羣搭建的方式:

  • Replica Set副本集
  • Sharding分片
  • Master-Slaver 主從(再也不推薦使用)

Replica Set介紹

簡單來講就是集羣當中包含了多份數據,保證主節點掛掉了,備節點能繼續提供數據服務,提供的前提就是數據須要和主節點一致。
默認設置下,主節點提供全部增刪查改服務,備節點不提供任何服務。可是能夠經過設置使備節點提供查詢服務,這樣就能夠減小主節點的壓力,當客戶端進行數據查詢時,請求自動轉到備節點上。這個設置叫作Read Preference Modes。
仲裁節點是一種特殊的節點,它自己並不存儲數據,主要的做用是決定哪個備節點在主節點掛掉以後提高爲主節點,因此客戶端不須要鏈接此節點。這裏雖然只有一個備節點,可是仍然須要一個仲裁節點來提高備節點級別。我開始也不相信必需要有仲裁節點,可是本身也試過沒仲裁節點的話,主節點掛了備節點仍是備節點,因此我們仍是須要它的。
官方給出的應用架構圖以下:
image
集羣間的複製關係
MongoDB集羣介紹與搭建--RS篇
使用仲裁arbiter節點
MongoDB集羣介紹與搭建--RS篇
故障自動切換選主
MongoDB集羣介紹與搭建--RS篇
Read Preference架構
MongoDB集羣介紹與搭建--RS篇服務器

Replica Set副本集搭建過程

基礎配置可參考:http://www.javashuo.com/article/p-gjisbewx-ve.html架構

規劃

三個以上的mongodb節點(或多實例)ide

環境準備

多個端口:2801七、2801八、2801九、28020
多套目錄:code

su - mongod 
mkdir -p /mongodb/28017/conf /mongodb/28017/data /mongodb/28017/log
mkdir -p /mongodb/28018/conf /mongodb/28018/data /mongodb/28018/log
mkdir -p /mongodb/28019/conf /mongodb/28019/data /mongodb/28019/log
mkdir -p /mongodb/28020/conf /mongodb/28020/data /mongodb/28020/log

多套配置文件blog

/mongodb/28017/conf/mongod.conf
/mongodb/28018/conf/mongod.conf
/mongodb/28019/conf/mongod.conf
/mongodb/28020/conf/mongod.conf

配置文件內容:ip

cat > /mongodb/28017/conf/mongod.conf <<EOF
systemLog:
  destination: file
  path: /mongodb/28017/log/mongodb.log
  logAppend: true
storage:
  journal:
    enabled: true
  dbPath: /mongodb/28017/data
  directoryPerDB: true
  #engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true
processManagement:
  fork: true
net:
  bindIp: 11.111.24.4,127.0.0.1
  port: 28017
replication:
  oplogSizeMB: 2048
  replSetName: my_repl
EOF

cp  /mongodb/28017/conf/mongod.conf  /mongodb/28018/conf/
cp  /mongodb/28017/conf/mongod.conf  /mongodb/28019/conf/
cp  /mongodb/28017/conf/mongod.conf  /mongodb/28020/conf/

sed 's#28017#28018#g' /mongodb/28018/conf/mongod.conf -i
sed 's#28017#28019#g' /mongodb/28019/conf/mongod.conf -i
sed 's#28017#28020#g' /mongodb/28020/conf/mongod.conf -i

啓動多個實例備用:rem

mongod -f /mongodb/28017/conf/mongod.conf
mongod -f /mongodb/28018/conf/mongod.conf
mongod -f /mongodb/28019/conf/mongod.conf
mongod -f /mongodb/28020/conf/mongod.conf

netstat -lnp|grep 280

配置普通複製集:

配置1主2從,從庫普通從庫文檔

#登陸客戶端
mongo --port 28017 admin
#建立配置
config = {_id: 'my_repl', members: [
                          {_id: 0, host: '11.111.24.4:28017'},
                          {_id: 1, host: '11.111.24.4:28018'},
                          {_id: 2, host: '11.111.24.4:28019'}]
          }
#初始化
rs.initiate(config) 
#查詢複製集狀態
rs.status();

從查詢結果能夠看出哪一個節點主節點(PRIMARY)和備節點(SECONDARY)
MongoDB集羣介紹與搭建--RS篇
配置1主1從1個arbiterget

mongo -port 28017 admin
config = {_id: 'my_repl', members: [
                          {_id: 0, host: '11.111.24.4:28017'},
                          {_id: 1, host: '11.111.24.4:28018'},
                          {_id: 2, host: '11.111.24.4:28019',"arbiterOnly":true}]
          }                
rs.initiate(config)

複製集管理操做

查看複製集狀態

rs.status();    //查看總體複製集狀態
rs.isMaster(); // 查看當前是不是主節點
rs.conf();   //查看複製集配置信息

添加刪除節點

rs.remove("ip:port"); // 刪除一個節點
rs.add("ip:port"); // 新增從節點
rs.addArb("ip:port"); // 新增仲裁節點

例子:

//添加 arbiter節點
一、鏈接到主節點
[mongod@db03 ~]$ mongo --port 28018 admin
二、添加仲裁節點
my_repl:PRIMARY> rs.addArb("11.111.24.4:28020")
三、查看節點狀態
my_repl:PRIMARY> rs.isMaster()
{
    "hosts" : [
        "11.111.24.4:28017",
        "11.111.24.4:28018",
        "11.111.24.4:28019"
    ],
    "arbiters" : [
        "11.111.24.4:28020"
    ],

//刪除一個節點
my_repl:PRIMARY> rs.remove("11.111.24.4:28019");
{ "ok" : 1 }
my_repl:PRIMARY> rs.isMaster()

// 新增從節點
rs.add("ip:port"); 
例子:
my_repl:PRIMARY> rs.add("11.111.24.4:28019")
{ "ok" : 1 }
my_repl:PRIMARY> rs.isMaster()

特殊從節點

  • arbiter節點:主要負責選主過程當中的投票,可是不存儲任何數據,也不提供任何服務
  • hidden節點:隱藏節點,不參與選主,也不對外提供服務。
  • delay節點:延時節點,數據落後於主庫一段時間,由於數據是延時的,也不該該提供服務或參與選主,因此一般會配合hidden(隱藏)

通常狀況下會將delay+hidden一塊兒配置使用

//配置延時節點(通常延時節點也配置成hidden)
cfg=rs.conf() 
cfg.members[2].priority=0
cfg.members[2].hidden=true
cfg.members[2].slaveDelay=120
rs.reconfig(cfg)    
//取消以上配置
cfg=rs.conf() 
cfg.members[2].priority=1
cfg.members[2].hidden=false
cfg.members[2].slaveDelay=0
rs.reconfig(cfg)    
//配置成功後,經過如下命令查詢配置後的屬性
rs.conf();

副本集其餘操做命令

##查看副本集的配置信息
admin> rs.conf()
##查看副本集各成員的狀態
admin> rs.status()
++++++++++++++++++++++++++++++++++++++++++++++++
##副本集角色切換(不要人爲隨便操做)
admin> rs.stepDown()
注:
admin> rs.freeze(300)   ##鎖定從,使其不會轉變成主庫
freeze()和stepDown單位都是秒。
+++++++++++++++++++++++++++++++++++++++++++++
##設置副本節點可讀:在副本節點執行
admin> rs.slaveOk()
##查看副本節點(監控主從延時)
admin> rs.printSlaveReplicationInfo()
source: 192.168.1.22:27017
    syncedTo: Thu May 26 2016 10:28:56 GMT+0800 (CST)
    0 secs (0 hrs) behind the primary

官方文檔:https://docs.mongodb.com/manual/replication/

相關文章
相關標籤/搜索