Redis主從哨兵集群搭建


  

  redis作為一個高性能內存數據庫,常作為系統的緩存數據庫來使用。然而在生產環境中,服務的穩定性非常重要,這篇博文則主要記錄介紹使用redis主從哨兵集群來實現redis服務的高可用。

當然為了解決redis的高可用和伸縮性,redis有很多集群方法,非官方的常見的有codis,Redis Sharding,及多種第三方中間件來實現。但是隨着redis官方的集群越來越穩定和官方持續的維護和支持,redis官方集群成為不錯的選擇,兩種方案分別如下:

  1. redis主從哨兵方案
  2. redis cluster 分布式集群方案

 

主從哨兵集群架構圖:

 

 

 

 

此圖為最常見的一主兩從結構,一個master主機,兩個slave主機。每台主機上都運行着兩個進程:

  1. redis-server 服務,處理redis正常的數據操作與響應。master服務可讀寫,slave服務為只讀,當master服務接受到數據修改或寫入的命令時,會異步將命令發送到slave上,以此保持master與slave上數據的一致性。
  2. redis-sentinel 哨兵服務,此服務會監控master和slave服務是否正常運行,當超過半數的哨兵認定master服務掛掉時,會進行選舉,將slave服務選舉設置為master服務,並恢復集群訪問,當舊master節點恢復正常后,可以作為新的slave節點重新加入集群。

 

主從哨兵集群的優缺點:

  • 優點:實現了數據備份,讀負載均衡,自動化故障恢復,高可用。
  • 缺點:沒有伸縮性,數據存儲的限制受到單機內存大小的限制,沒發通過增加主機來增加存儲空間。

所以,此主從哨兵集群在中小系統中廣受使用,因為其簡單好用的特性,在數據量不大的情況下,可以很好的提供服務,但是隨着互聯網企業的不斷發展,數據量越來越大,單機存儲已經無法滿足需求,於是redis官方至3.0版本后推出了新一代的集群方案,redis cluster分布式集群,此集群則在高可用的基礎上,解決了伸縮性的問題。

 


開始搭建

 

1. 環境准備

由於哨兵的高可用和確保不是因為哨兵故障導致的master狀態誤判,所以集群的數量為單數最好,最低集群配置則為1主兩從,3哨兵。

即需要3台服務器,每台服務器上運行一個redis-server,一個redis-sentinel

環境如下:

  • master: ip: 192.168.0.1 os: centos7 redis:5.0.5
  • slave: ip: 192.168.0.2 os: centos7 redis:5.0.5
  • slave: ip: 192.168.0.3 os: centos7 redis:5.0.5

 

2. 設置主從服務

  1)在master上操作

# 修改redis配置文件,修改下面的列出的選項
$ vim /etc/redis/6379.conf
--------------------------------------------------------------------
# 允許任意用戶連接
bind 0.0.0.0
# 關閉保護模式
protected-mode no 
# 開啟守護進程
daemonize yes
# 如果是作為緩存服務器,需要注釋掉三個數據持久化的選項
# save 900 1
# save 300 10
# save 60 10000
# 設置redis密碼,如果要設置密碼,則主從的密碼要統一一致,這樣在故障時切換master才能正常連接,如果不設密碼則都不設密碼
requirepass 123456
# 設置最大內存限制,避免內存過大造成服務器宕機
maxmemory 2gb
--------------------------------------------------------------------

# 啟動服務
$ systemctl restart redis_6379
# 開啟防火牆上6379端口
$ firewall-cmd --add-port=6379/tcp --permanent
$ firewall-cmd --reload

 

  2)在兩個salve主機上操作

# 修改redis配置文件,修改下面的列出的選項
$ vim /etc/redis/6379.conf
--------------------------------------------------------------------
# 上面master上修改的配置項,這里要做一樣的修改。就不重復寫了
# 在master的基礎上,額外需要修改如下配置
# 指定matser機的IP和端口
slaveof 192.168.0.1 6379
# master上redis的密碼,如果沒有設置密碼則不需要配置
masterauth 123456
--------------------------------------------------------------------

# 啟動服務
$ systemctl restart redis_6379
# 開啟防火牆上6379端口
$ firewall-cmd --add-port=6379/tcp --permanent
$ firewall-cmd --reload

上面已經依次修改mster和slave的配置並啟動服務,現在來驗證主從是否已經正常運行。

 

# 在master主機上,使用redis-cli登錄redis,查看info信息
$ redis-cli -a 123456
127.0.0.1:6379> info
# 查看最下面 # Replication 內容
# 出現以下內容則證明主從配置已經正常運行
role:master
connected_slaves:2
slave0:ip=192.168.0.2,port=6379,state=online,offset=874800532,lag=1
slave1:ip=192.168.0.3,port=6379,state=online,offset=874800532,lag=1

# 可以簡單測試以下,數據復制是否正常
# 在master上,創建一個key為a,值為1
127.0.0.1:6379> select 0
127.0.0.1:6379> set a 1


# 在任意slave主機上,登錄redis,查看上面設置的a的key是否存在
$ redis-cli -a 123456
127.0.0.01:6379> select 0
127.0.0.01:6379> get a
"1"
# 如上,發現已經存在了鍵值為1的a的key,證明主從復制功能正常運行。

 

3. 設置哨兵服務

哨兵服務與redis-server服務是兩個獨立的進程,共同運行在每個redis主機上,下面依次在master和slave上設置與運行哨兵服務:

在master和slave上都執行以下操作

# redis通過源碼安裝后,在redis目錄中,會有一個sentinel.conf的哨兵配置文件
# 修改下面列出的配置項,{your-redis-dir}換為你redis的文件目錄
$ vim {your-redis-dir}/sentinel.conf
--------------------------------------------------------------------
# 設為后台啟動
daemonize yes
# 設置log文件路徑,方便出故障時進行排查
logfile "/var/log/redis/sentinel.log"
# 關閉保護模式
protected-mode no

# 設置監控master主機,只需要配置上master的ip和端口
# 后面的2,表示有兩台或以上哨兵認定master掛掉了,則認為master掛掉,進行選舉切換master
sentinel monitor mymaster 192.168.0.1 6379 2
# 指定master和slave的統一密碼
sentinel auth-pass mymaster 123456
--------------------------------------------------------------------


# 指定配置文件,啟動哨兵服務,{your-redis-dir}換為你redis的文件目錄
$ redis-sentinel {your-redis-dir}/sentinel.conf
# 啟動后默認監聽26379端口
# 開啟防火牆上26379端口的訪問
$ firewall-cmd --add-port=26379/tcp --permanent
$ firewall-cmd --reload

到此哨兵服務在3太服務器上都啟動后。我們來驗證以下服務是否正常運行:

# 任意在master或slave主機上,指定端口,登錄redis的哨兵服務
$ redis-cli -p 26379
127.0.0.1:26379> info sentinel
# 查看哨兵信息,最下一行出現master的信息和slave和sentinel的數量信息
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.0.1:6379,slaves=2,sentinels=3

# ok,出現上面的信息,則證明哨兵服務已經正常運行

 


免責聲明!

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



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