linux覆盤:mongdb副本集搭建

提到文檔,一個新概念JSON,MongoDB的文檔相似於JSON對象!mysql

JSON:JavaScript 對象表示法(JavaScript Object Notation)。JSON 是存儲和交換文本信息的語法。相似 XML。 JSON 比 XML 更小、更快,更易解析。linux

來看一下JSON文檔:sql

{
"employees": [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
}

在NoSQL中是最像關係型數據庫的mongodb

MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象。字段值能夠包含其餘文檔、數組及文檔數組。數據庫

關於JSON http://www.w3school.com.cn/json/index.asp(由於基於分佈式,因此很容易擴展)json

mongdb副本集搭建

早期版本使用master-slave,一主一從和MySQL相似,但slave在此架構中爲只讀,當主庫宕機後,從庫不能自動切換爲主vim

目前已經淘汰master-slave模式,改成副本集,這種模式下有一個主(primary),和多個從(secondary),只讀。支持給它們設置權重,當主宕掉後,權重最高的從切換爲主數組

在此架構中還能夠創建一個仲裁(arbiter)的角色,它只負責裁決,而不存儲數據數據結構

在此架構中讀寫數據都是在主上,要想實現負載均衡的目的須要手動指定讀庫的目標server架構

三臺機器:

192.168.133.130(primary)

192.168.133.132(secondary) 192.168.133.133(secondary)

注意的是副本集搭建前肯定沒有iptables規則和selinux,不然會破壞通訊

早期版本使用master-slave,一主一從和MySQL相似,但slave在此架構中爲只讀,當主庫宕機後,從庫不能自動切換爲主

目前已經淘汰master-slave模式,改成副本集,這種模式下有一個主(primary),和多個從(secondary),只讀。支持給它們設置權重,當主宕掉後,權重最高的從切換爲主

在此架構中還能夠創建一個仲裁(arbiter)的角色,它只負責裁決,而不存儲數據

在此架構中讀寫數據都是在主上,要想實現負載均衡的目的須要手動指定讀庫的目標server

三臺機器下載安裝mongdb

MongoDB支持yum安裝,可是版本比較老,因此咱們使用建立一個新的擴展源來安裝
cd /etc/yum.repos.d/

vim mongodb.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

yum list |grep mongodb //能夠看到mongodb相關的rpm包
yum install -y mongodb-org  //安裝

vim /etc/mongod.conf  
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,192.168.204.131  # Listen to local interface only, comment to listen on all interfaces. ##添加IP的時候須要用逗號分開,這裏須要加上本身的內網ip,三臺機器三個ip需注意

replication:
 oplogSizeMB: 20   ##就和mysql主從以前建立前綴文件同樣
 replSetName: aminglinux  ##注意前面的兩個空格

systemctl restart mongod
ps aux |grep mongod
netstat -lntp |grep mongo
mongo --host 192.168.204.131 --port 27017(這裏能夠直接mongo登陸)##這裏也是本身的ip,由於是實驗咯

副本集配

###鏈接192.168.133.130主,在主上運行命令mongo,或者帶上端口或者ip
>use admin

>config={_id:"aminglinux",members:[{_id:0,host:"192.168.133.130:27017"},{_id:1,host:"192.168.133.132:27017"},{_id:2,host:"192.168.133.133:27017"}]}
###準備把那一臺當作主就是primary就在那一臺上執行這個操做

>rs.initiate(config)  ###初始化顯示ok即成功

>rs.status() //查看狀態
 若是兩個從上的狀態爲"stateStr" : "STARTUP", 則須要進行以下操做須要從新配置一下config一下

> var config={_id:"aminglinux",members:[{_id:0,host:"192.168.133.130:27017"},{_id:1,host:"192.168.133.132:27017"},{_id:2,host:"192.168.133.133:27017"}]}

>rs.reconfig(config)
 此時再次查看rs.status()會發現從的狀態變爲SECONDARY

副本集測試

###主上建庫,建集合
 >use mydb
 >db.acc.insert({AccountID:1,UserName:"123",password:"123456"})
 >show dbs
從上查看
 >show dbs   
若出現錯誤Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" },須要執行
 >rs.slaveok() 
就可使用show dbs了

###副本集更改權重模擬主宕機

>rs.config()查看權重
默認三臺機器權重priority都爲1,若是任何一個權重設置爲比其餘的高,則該臺機器立刻切換爲primary角色,因此咱們預設三臺機器的權重分別爲:130:3,132:2,133:1

在主上執行
>cfg = rs.conf()
>cfg.members[0].priority = 3
>cfg.members[1].priority = 2
>cfg.members[2].priority = 1
>rs.reconfig(cfg)
 這樣的話,第二個節點將會成爲候選主節點。
 主上執行模擬宕機: iptables -I INPUT -p tcp --dport 27017 -j DROP

>rs.status() //最後查看主從狀態分給了誰
相關文章
相關標籤/搜索