83.mongodb副本集介紹 搭建 測試

21.33 mongodb副本集介紹mysql

21.34 mongodb副本集搭建linux

21.35 mongodb副本集測試git

 

 

 

 

21.33 mongodb副本集介紹sql

 

 

 

像mysql主宕機以後,咱們可讓從成爲新的主,可是須要手動去改的,甚至新的主從關係都是要手動去改。可是mongodb副本集中他徹底都是自動的,主宕機以後,從成爲了新的主,從也能夠自動的識別新的主。這是他更高級的地方,很智能mongodb

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

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

#目的也是實現mongodb的高可用、保證數據的安全。讀寫僅僅是在主上,從不須要提供服務centos

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

#arbiter用來決定你的主宕機以後,很準確的告訴你他的主斷掉了。像keepalived當主掛掉以後是怎麼決定主當掉了,會容易出現腦裂的狀況。因此爲了防止腦裂的狀況就出現了arbiter這樣的角色。數據庫是堅定不容許出現腦裂的狀況架構

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

#另外一種方式。在代碼裏面實現讀寫分離,讓讀的時候去其中一個從庫上去讀。這樣也能夠實現負載均衡

在從上也能夠增長一個所謂的lvs這樣的代理,固然從不少的狀況下

 

 

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

 

21.34 mongodb副本集搭建

 

 

 

一.

三臺機器: 192.168.133.130(primary) 192.168.133.132(secondary) 192.168.133.133(secondary)

二.

編輯三臺機器的配置文件(/etc/mongod.conf ),更改或增長:

!1replication://把此行前面的#刪除

oplogSizeMB: 20//前面有兩個空格,加上這一行。

#這個日誌相似於mysql的主從的binlog日誌

#oplog大小

replSetName: aminglinux//前面有兩個空格,加上這一行

#定義副本集的名字,如上爲aminglinux

#複製集名稱

 

!2還要檢查bindIp: 127.0.0.1,192.168.208.128。

bindIp有沒有監聽本身 (內網IP)192.168.xxx.xxx

三.

分別重啓三臺機器

四.

鏈接主,在主上運行命令mongo(!哪臺爲主,就在哪臺上操做!)

!1.>use admin

!2.>config={_id:"aminglinux",members:[{_id:0,host:"192.168.208.128:27017"},{_id:1,host:"192.168.208.130:27017"},{_id:2,host:"192.168.208.133:27017"}]}

#"aminglinux"爲副本集的名字

#members:指定他的成員

!3.>rs.initiate(config)

#顯示ok:1就表明成功了

!4.rs.status() //查看狀態

五.

若是兩個從上的狀態爲"stateStr" : "STARTUP"(表明還沒起來),或者三臺機器都是secondary並無primary。 則須要進行以下操做(從新配置一下)

> 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

 

 

 

實例:

[root@axinlinux-01 ~]# cd /etc/yum.repos.d/ #01咱們已經安裝後mongodb了,把yum源拷貝在0二、03 上便可

[root@axinlinux-01 yum.repos.d]# cat mongo.repo #先cat出來

[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

[root@axinlinux-02 ~]# vim /etc/yum.repos.d/mongo.repo #02 03均複製上面一段

[root@axinlinux-03 ~]# vim /etc/yum.repos.d/mongo.repo

[root@axinlinux-02 ~]# yum install -y mongodb-org #02 03yum安裝便可

[root@axinlinux-03 ~]# yum install -y mongodb-org

若是下載速度太慢,到這來下載到linux上,在所有rpm -ivh安裝一下就能夠了

https://coding.net/u/aminglinux/p/yuanke_centos7/git/tree/master/21NOSQL/mongodb_rpm%E5%8C%85

[root@axinlinux-01 yum.repos.d]# vim /etc/mongod.conf #修改配置文件,改動後以下

replication:

oplogSizeMB: 20

replSetName: aminglinux

[root@axinlinux-01 yum.repos.d]# systemctl restart mongod #重啓mongodb

[root@axinlinux-01 yum.repos.d]# ps aux |grep mongod #檢查進程

mongod 4652 38.3 2.6 1018308 49688 ? Sl 14:59 0:08 /usr/bin/mongod -f /etc/mongod.conf

root 4687 0.0 0.0 112720 976 pts/0 S+ 15:00 0:00 grep --color=auto mongod

#此處須要注意,由於以前作過用戶認證(--auth),要把它去掉,操做以下:(

[root@axinlinux-01 yum.repos.d]# vim /usr/lib/systemd/system/mongod.service #編輯他的啓動腳本

Environment="OPTIONS=--auth -f /etc/mongod.conf" #這一行的--auth去掉便可。一旦咱們更改了這個配置文件,他會提示咱們執行daemon reload的命令,複製執行一下便可)

修改配置文件,02 03 上也要如此,直接複製過去便可,還要設置bindIp 也監聽本機內網IP。這裏就不作演練了

[root@axinlinux-02 ~]# systemctl start mongod #02 03均啓動一下

[root@axinlinux-03 ~]# systemctl start mongod

[root@axinlinux-03 ~]# netstat -lntp #01 02 03都要監聽這兩個ip才能夠

tcp 0 0 192.168.208.133:27017 0.0.0.0:* LISTEN 2995/mongod

tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 2995/mongod

三臺均關閉firewalld和selinux

[root@axinlinux-01 yum.repos.d]# mongo #直接鏈接主(本機上直接mongo便可進入)。即01爲主

> use admin

> config={_id:"aminglinux",members:[{_id:0,host:"192.168.208.128:27017"},{_id:1,host:"192.168.208.130:27017"},{_id:2,host:"192.168.208.133:27017"}]}

 

{

"_id" : "aminglinux",

"members" : [

{

"_id" : 0,

"host" : "192.168.208.128:27017"

},

{

"_id" : 1,

"host" : "192.168.208.130:27017"

},

{

"_id" : 2,

"host" : "192.168.208.133:27017"

}

]

}

> rs.initiate(config)

{ "ok" : 1 }

aminglinux:OTHER> rs.status()

{

"set" : "aminglinux", #集合的名字

。。。。。

"members" : [ #成員

{

"_id" : 0,

"name" : "192.168.208.128:27017",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY", #狀態爲primary,就是主

。。。。。

{

"_id" : 1,

"name" : "192.168.208.130:27017",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY", #狀態爲secondary,就是爲從

。。。。。

{

"_id" : 2,

"name" : "192.168.208.133:27017",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY", #狀態爲secondary,這臺也是從

。。。。。

"ok" : 1

}

aminglinux:PRIMARY> #咱們再次看命令行的前綴就自動變成了主

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

21.35 mongodb副本集測試

 

 

 

1.主上建庫,建集合

>use mydb

#mydb庫

>db.acc.insert({AccountID:1,UserName:"123",password:"123456"})

#acc爲測試的集合,而且插入(insert)一些數據

>show dbs

2.從上查看

>show dbs

3.若出現錯誤Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" },須要執行

>rs.slaveOk()

 

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

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

2.在主上執行

cfg = rs.conf()

cfg.members[0].priority = 3

cfg.members[1].priority = 2

cfg.members[2].priority = 1

rs.reconfig(cfg) #使他生效

3.這樣的話,第二個節點將會成爲候選主節點。

4.主上執行 iptables -I INPUT -p tcp --dport 27017 -j DROP

 

 

實例:

 

測試

aminglinux:PRIMARY> use mydb

switched to db mydb

aminglinux:PRIMARY> db.acc.insert({AccountID:1,UserName:"123",password:"123456"}) #主上寫數據才能夠

WriteResult({ "nInserted" : 1 })

aminglinux:PRIMARY> show dbs

admin 0.000GB

db1 0.000GB

local 0.000GB

mydb 0.000GB

test 0.000GB

aminglinux:PRIMARY> use mydb

switched to db mydb

aminglinux:PRIMARY> show tables

acc

aminglinux:SECONDARY> show dbs #咱們在一個從上查看一下是否有數據

2018-11-20T16:20:00.424+0800 E QUERY [thread1] Error: listDatabases failed:{

"ok" : 0,

"errmsg" : "not master and slaveOk=false", #報錯了是由於不是主。並且slaveok=false

。。。。。

aminglinux:SECONDARY> rs.slaveOk() #根據他的提示這樣執行就能夠了

aminglinux:SECONDARY> show dbs #咱們再來show dbs,就能夠了

admin 0.000GB

db1 0.000GB

local 0.000GB

mydb 0.000GB

test 0.000GB

aminglinux:SECONDARY> use mydb

switched to db mydb

aminglinux:SECONDARY> show tables #查看集合

acc

 

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

aminglinux:PRIMARY> rs.config() #rs.config()能夠查看權重

。。。。。

"members" : [

{

"_id" : 0,

"host" : "192.168.208.128:27017",

"arbiterOnly" : false,

"buildIndexes" : true,

"hidden" : false,

"priority" : 1, #能夠看到權重都是1

 

"_id" : 1,

"host" : "192.168.208.130:27017",

"arbiterOnly" : false,

"buildIndexes" : true,

"hidden" : false,

"priority" : 1,

"tags" : {

 

"_id" : 2,

"host" : "192.168.208.133:27017",

"arbiterOnly" : false,

"buildIndexes" : true,

"hidden" : false,

"priority" : 1,

aminglinux:PRIMARY> cfg = rs.conf()

aminglinux:PRIMARY> cfg.members[0].priority = 3

3

aminglinux:PRIMARY> cfg.members[1].priority = 2

2

aminglinux:PRIMARY> cfg.members[2].priority = 1

1

aminglinux:PRIMARY> rs.reconfig(cfg)

{ "ok" : 1 }

aminglinux:SECONDARY> rs.config() #再來查看一下新的權重。此時已經變爲secondary

 

"_id" : 0,

"host" : "192.168.208.128:27017",

"arbiterOnly" : false,

"buildIndexes" : true,

"hidden" : false,

"priority" : 3,

"_id" : 1,

"host" : "192.168.208.130:27017",

"arbiterOnly" : false,

"buildIndexes" : true,

"hidden" : false,

"priority" : 2,

"_id" : 2,

"host" : "192.168.208.133:27017",

"arbiterOnly" : false,

"buildIndexes" : true,

"hidden" : false,

"priority" : 1,

相關文章
相關標籤/搜索