Redis主從複製簡介node
和MySQL主從複製的緣由同樣,Redis雖然讀取寫入的速度都特別快,可是也會產生讀壓力特別大的狀況。爲了分擔讀壓力,Redis支持主從複製,Redis的主從結構能夠採用一主多從或者級聯結構,Redis主從複製能夠根據是不是全量分爲全量同步和增量同步。linux
redis主從複製特性:redis
一、Redis主從部署vim
1.環境規劃centos
全部機器統一centos7.4系統環境,安裝redis 3.2.2,而且配置環境變量安全
主機名IP地址服務linux-node1172.16.1.170redis 主庫linux-node2172.16.1.171redis 從庫linux-node3172.16.1.173redis 從庫服務器
2.安裝redis軟件(全部節點統一安裝)異步
#1.確保系統已安裝了Pcre(編譯安裝依賴於pcre組件) [root@xmh ~]# yum install pcre -y #2.下載redis mkdir /data cd /data wget http://download.redis.io/releases/redis-3.2.2.tar.gz #3.解壓並編譯redis tar xf redis-3.2.2.tar.gz mv redis-3.2.2 redis cd redis make #4.配置redis環境變量,使其能直接在命令使用redis命令 echo 'export PATH="/data/redis/src/:$PATH"' >>/etc/profile source /etc/profile
編譯安裝完成後會在當前目錄生成src這個目錄(/data/redis/src),該目錄存放的是redis的各類命令。
3.redis添加配置文件(全部redis節點統一的配置文件)centos7
#1.建立存放redis配置文件的目錄, mkdir /data/6379 -p #2.redis配置文件參數以下: #vim /data/6379/redis.conf daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 dbfilename dump.rdb protected-mode no save 900 1 save 300 10 save 60 10000 參數解釋: daemonize yes #開啓守護進程 port 6379 #redis端口號 logfile /data/6379/redis.log #redis日誌文件保存路徑 dir /data/6379 #redis數據文件保存路徑 dbfilename dump.rdb #redis持久化RDB文件名(默認也是該文件名) protected-mode no #關閉redis安全模式 save 900 1 #900秒後至少有1個key更改(save爲RDB的持久化參數) save 300 10 #300秒後至少有10個key更改 save 60 10000 #60秒後至少有10000個key更改 注意:持久化參數無關緊要都不會影響本次實驗,做者添加該參數的緣由僅僅是爲了配置文件參數的完整性
4.啓動redis服務(全部redis節點統一執行)日誌
redis-server /data/6379/redis.conf ss -lntup |grep "6379"
5.開啓主從(在從庫上執行)
進入到redis cli模式,執行 SLAVEOF [主庫IP] [主庫端口]
#redis-cli 127.0.0.1:6379> SLAVEOF 172.16.1.170 6379
6.從庫上檢查主從複製的狀態(截取部分狀態參數)
#redis-cli 127.0.0.1:6379> info replication # Replication role:slave #當前角色,從庫 master_host:172.16.1.170 #主庫的IP地址 master_port:6379 #主庫的端口 master_link_status:up #主庫狀態up
7.主庫上檢查主從複製的狀態(截取部分狀態參數)
#redis-cli 127.0.0.1:6379> info replication # Replication role:master #當前角色,主庫 connected_slaves:2 #有兩個從庫鏈接 slave0:ip=172.16.1.171,port=6379,state=online,offset=379,lag=0 slave1:ip=172.16.1.172,port=6379,state=online,offset=379,lag=1 #默認狀況下redis的從庫沒有寫數據的權限 127.0.0.1:6379> set a 10 (error) READONLY You can't write against a read only slave.
二、Redis故障切換
手工的方式實現主從故障切換,當redis主庫宕機後,須要選擇一個從庫做爲臨時頂替的主庫,把SLAVEOF信息清除,而後其它從庫也把SLAVEOF信息清楚,從新和新的主庫構建主從關係
1.將主庫的redis關閉(模擬主庫故障)
[root@linux-node1 ~]# redis-cli shutdown
2.登陸到任意一個從庫查看主從狀態(主庫的狀態是處於down)
[root@linux-node3 /]# redis-cli 127.0.0.1:6379> info replication # Replication role:slave master_host:172.16.1.170 master_port:6379 master_link_status:down #主庫狀態是down
3.讓linux-node2成爲主庫(臨時充當)
#取消當前從庫的角色,變成master節點 [root@linux-node2 /]# redis-cli 127.0.0.1:6379> SLAVEOF no one
4.手工將linux-node3和新的主庫從新構建主從關係
#1.先取消當前的從庫角色, [root@linux-node3 /]# redis-cli 127.0.0.1:6379> SLAVEOF no one #2.從新和新的主庫構建主從關係 127.0.0.1:6379> SLAVEOF 172.16.1.170 6379 #3.查看主從狀態 127.0.0.1:6379> INFO replication # Replication role:slave master_host:172.16.1.171 master_port:6379 master_link_status:up #與主庫鏈接的狀態up