redis主從復制


一、簡介

Redis支持將數據同步到多台slave上,這種特性對提高讀取性能非常有益

1)master可以有多台slave

2)  除了多個slave連到相同master外,slave也可以連接到其它slave形成圖狀結構

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

4)主從復制可以用來提高系統的伸縮性,我們可以用多個slave專門負責客戶端的讀請求,可以做數據冗余

5)可以在master禁用數據持久化,只需要注釋掉master配置文件redis.conf的save配置,然后只在slave配置持久化

二、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.1、主要修改配置文件的以下信息,例如修改redis8381.conf,同理,redis6379.conf和redis6380.conf也一樣

daemonize yes

pidfile /var/run/redis6381.pid

port 6381

logfile "6381.log"

dbfilename dump6381.rdb

2.2、一主二從

在這里博主設置79為master;80和81為slave,配置redis主從復制的時候只需要配置從機不需要配置主機(配主補配從)

6380 配置

127.0.0.1:6380> SLAVEOF 127.0.0.1 6379

6381 配置

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.3、新火相傳

新火相傳的意思其實就是去中心化,現在只有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.4、反客為主

上面提到了,當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.5、哨兵模式

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM