redis主從複製

1、簡介

Redis支持將數據同步到多臺slave上,這種特性對提升讀取性能很是有益redis

1)master能夠有多臺slave性能

2)  除了多個slave連到相同master外,slave也能夠鏈接到其它slave造成圖狀結構spa

3)主從複製不會阻塞master,也就是說當一個或多個slave與master鏈接進行復制時,master能夠繼續處理客戶端發來的請求,相反slave在初次同步數據時則會阻塞,不能處理客戶端請求code

4)主從複製能夠用來提升系統的伸縮性,咱們能夠用多個slave專門負責客戶端的讀請求,能夠作數據冗餘blog

5)能夠在master禁用數據持久化,只須要註釋掉master配置文件redis.conf的save配置,而後只在slave配置持久化get

2、Demo

博主這裏就沒裝多臺機器,原本能夠用三臺虛擬機建一個局域網,來實現redis的主從複製,在這裏偷下懶,利用啓動多個配置文件來取代,這裏一共有三個redis.conf文件,以下:同步

[jacky@jacky ~]$ su
密碼:
[root@jacky jacky]# cd /etc/redis
[root@jacky redis]# ls -l
總用量 176
-rw-r--r--. 1 root root 41576 11月  3 22:03 redis6379.conf
-rw-r--r--. 1 root root 41560 11月  3 20:08 redis6380.conf
-rw-r--r--. 1 root root 41560 11月  3 20:08 redis6381.conf

2.一、主要修改配置文件的如下信息,例如修改redis8381.conf,同理,redis6379.conf和redis6380.conf也同樣

daemonize yes

pidfile /var/run/redis6381.pid

port 6381

logfile "6381.log"

dbfilename dump6381.rdb

2.二、一主二從

在這裏博主設置79爲master;80和81爲slave,配置redis主從複製的時候只須要配置從機不須要配置主機(配主補配從)虛擬機

6380 配置it

127.0.0.1:6380> SLAVEOF 127.0.0.1 6379

6381 配置io

127.0.0.1:6380> SLAVEOF 127.0.0.1 6379

 

就這樣,一主二從配置就完畢了,哈哈,很簡單吧,79原來的數據和新的數據都會同步到80和81上,以下

6379

127.0.0.1:6379> set k1 v1    #沒配置主從以前插入的
OK
127.0.0.1:6379> set k2 v2    #沒配置主從以前插入的
OK
127.0.0.1:6379> set k3 v3    #沒配置主從以前插入的
OK
127.0.0.1:6379> set k4 v4    #配置主從以後插入的
OK

6380

k1和k4都能拿到

127.0.0.1:6380> get k4  
"v4"
127.0.0.1:6380> get k1
"v1"

6381

k3和k4都能拿到

127.0.0.1:6381> get k4
"v4"
127.0.0.1:6381> get k3
"v3"

到這裏,一主二從配置成功,可是在生產時,master和slave都有可能忽然之間死機,

1)若是主機死掉了,默認狀況下,主機從新啓動,角色仍是主機

2)若是從機死掉了,默認狀況下,從機從新啓動,角色變成沒有獨立主機了,須要從新配置,除非從機在redis.conf文件裏配置了,不然從機不會

     從新鏈接主機

3)讀寫分離,是指redis從機只能負責讀,不能寫,主機可以寫可以讀

2.三、新火相傳

新火相傳的意思其實就是去中心化,如今只有80和81兩臺slave鏈接master,假如,有100臺slave的話,那麼master就壓力很大了,因此redis又推出了新火相傳的解決方案,上一臺slave,能夠下一臺slave的master.

79和80不改變,在81上配置以下:

127.0.0.1:6381> SLAVEOF 127.0.0.1 6380
OK

這樣就在79上插入一個值,也能夠同步到81

2.四、反客爲主

上面提到了,當master死機的時候,重寫啓動仍是master,如今時,我是想當master死機的時候,讓某一臺從機變成主機,這裏是,讓80變成主機,

只要當master死機器的時候,手動在80執行以下命令:

127.0.0.1:6380> SLAVEOF no one

同時,81也要從新配置,配置80爲主機

127.0.0.1:6381> SLAVEOF 127.0.0.1 6380
OK

2.五、哨兵模式

簡單的說,哨兵模式,就是反客爲主的自動版,經過監控主機,當主機掛掉的時候,就幾臺從機中透過投票選出新的主機

2.5.1 在 /etc/redis/目錄下新建一個sentinel.conf文件

裏面的內容爲

sentinel monitor host6379 127.0.0.1 6379 1 

host6379爲監控的主機名詞,自定義的,後面的「1」表示,當主機掛掉的時候,從機自動進行投票,誰的票數首先超過「1」,誰就爲主機

2.5.2 啓動sentinel.conf 文件

[root@jacky bin]# ./redis-sentinel /etc/redis/sentinel.conf
15482:X 05 Nov 17:44:31.958 * Increased maximum number of open files to 10032 (it was originally set to 1024).
15482:X 05 Nov 17:44:31.960 # Warning: 32 bit instance detected but no memory limit set. Setting 3 GB maxmemory limit with 'noeviction' policy now.
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.0.6 (00000000/0) 32 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 15482
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

15482:X 05 Nov 17:44:31.966 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
15482:X 05 Nov 17:44:31.966 # Sentinel runid is 7cb8075de28bb16320934364995643e41ac24f67
15482:X 05 Nov 17:44:31.966 # +monitor master host6379 127.0.0.1 6379 quorum 1
15482:X 05 Nov 17:45:01.982 # +sdown master host6379 127.0.0.1 6379
15482:X 05 Nov 17:45:01.982 # +odown master host6379 127.0.0.1 6379 #quorum 1/1
15482:X 05 Nov 17:45:01.982 # +new-epoch 1
15482:X 05 Nov 17:45:01.982 # +try-failover master host6379 127.0.0.1 6379
15482:X 05 Nov 17:45:01.997 # +vote-for-leader 7cb8075de28bb16320934364995643e41ac24f67 1
15482:X 05 Nov 17:45:01.997 # +elected-leader master host6379 127.0.0.1 6379
15482:X 05 Nov 17:45:01.997 # +failover-state-select-slave master host6379 127.0.0.1 6379
15482:X 05 Nov 17:45:02.060 # -failover-abort-no-good-slave master host6379 127.0.0.1 6379
15482:X 05 Nov 17:45:02.129 # Next failover delay: I will not start a failover before Sat Nov  5 17:51:02 2016

這樣就算完成了

注意:就是當原來的master回來後,不是作獨立的mater,而是作新主機的slave

相關文章
相關標籤/搜索