Linux Redis 高可用之主從複製

Redis主從複製簡介
和MySQL主從複製的原因一樣,Redis雖然讀取寫入的速度都特別快,但是也會產生讀壓力特別大的情況。爲了分擔讀壓力,Redis支持主從複製Redis的主從結構可以採用一主多從或者級聯結構,Redis主從複製可以根據是否是全量分爲全量同步增量同步

Linux Redis 高可用之主從複製

redis主從複製特性:

  1. 使用異步複製
  2. 一個主服務器可以有多個從服務器
  3. 從服務器也可以有自己的從服務器
  4. 複製不會阻塞主服務器
  5. 可以通過複製功能來讓主服務器免於執行持久化操作,由從服務器去執行持久化操作即可

1、Redis主從部署
1.環境規劃
所有機器統一centos7.4系統環境,安裝redis 3.2.2,並且配置環境變量

主機名 IP地址 服務
linux-node1 172.16.1.170 redis 主庫
linux-node2 172.16.1.171 redis 從庫
linux-node3 172.16.1.173 redis 從庫

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節點統一的配置文件)

#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.

2、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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章