數據庫----redis羣集之主從複製+哨兵模式部署

前言:

redis集羣基礎理論知識見我之前博客

一、redis集羣----主從複製

1.1 實驗環境
  • 在主從模式的redis系統中,從數據庫在整個系統中起到了數據冗餘備份和讀寫分離的作用

  • 節點部署

    master IP地址:192.168.226.128

    • 功能:提供讀、寫

    slave1 IP地址:192.168.226.132

    • 功能:只讀

    slave2 IP地址:192.168.226.133

    • 功能:只讀
1.2 實驗過程
  • ① 所有節點安裝redis

    此處只演示master節點

[root@master ~]# yum install -y gcc gcc-c++ make


#可以選擇直接下載壓縮包,本次實驗已將壓縮包下好,所以直接掛載使用就好了
#在線下載命令:
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
#掛載使用
[root@master ~]# mount.cifs //192.168.226.1/LAMP-C7 /mnt
Password for root@//192.168.226.1/LAMP-C7: 
[root@master ~]# cd /mnt
[root@master mnt]# tar zxvf redis-5.0.7.tar.gz -C /usr/local

#編譯安裝
[root@master mnt]# cd /usr/local
[root@master local]# mv redis-5.0.7 redis
[root@master redis]# cd redis
[root@master redis]# make
[root@master src]# cd src
[root@master src]# make install
.......省略部分內容
  • ② 修改主配置文件
#master節點
[root@master src]# vim /usr/local/redis/redis.conf
#69行 修改監聽地址爲0.0.0.0(在實驗環境使用),現網環境建議綁定從服務器IP地址

#136行 開啓守護進程
daemonize yes

#171行 修改日誌文件目錄
logfile /usr/local/redis/redis.log

#263行 修改工作目錄
dir /usr/local/redis

#699行 開啓AOF持久化功能
appendonly yes

#slave節點
#與master節點修改一直,多修改一個同步master節點IP和端口
replicaof 192.168.226.128 6379
  • ③ 所有節點設置防火牆規則、放通6379端口的信息流通
[root@master src]# firewall-cmd --zone=public --add-port=6379/tcp --permanent
success
[root@master src]# firewall-cmd --reload
success
  • ④ 設置內存分配策略
[root@master src]# vim /etc/sysctl.conf
#在行尾添加以下內容
vm.overcommit_memory = 1
----》wq

#刷新生效
[root@master src]# sysctl -p
  • 內核參數overcommit_memory

    overcommit_memory是內核分配策略

    可選值:0、1、2

    • 0 表示內核將檢查是否有足夠的可用內存供應用進程使用;如果有足夠的可用內存,內存申請允許;否則,內存申請失敗,並把錯誤返回給應用進程。
    • 1 表示內核允許分配所有的物理內存,而不管當前的內存狀態如何。
    • 2 表示內核允許分配超過所有物理內存和交換空間總和的內存
  • ⑤ 啓動redis服務,先啓動master節點、再啓動slave節點

[root@master src]# /usr/local/redis/src/redis-server /usr/local/redis/redis.conf
[root@master src]# netstat -natp | grep redis
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      93265/redis-server 
  • 此時查看日誌可看到兩個slave節點已成功連接
[root@master src]# tail -f /usr/local/redis/redis.log 
93265:M 26 Mar 2020 20:43:21.781 * Background saving terminated with success
93265:M 26 Mar 2020 20:43:21.781 * Synchronization with replica 192.168.226.132:6379 succeeded
93265:M 26 Mar 2020 20:43:24.224 * Replica 192.168.226.133:6379 asks for synchronization
93265:M 26 Mar 2020 20:43:24.224 * Full resync requested by replica 192.168.226.133:6379
93265:M 26 Mar 2020 20:43:24.224 * Starting BGSAVE for SYNC with target: disk
93265:M 26 Mar 2020 20:43:24.224 * Background saving started by pid 94625
94625:C 26 Mar 2020 20:43:24.225 * DB saved on disk
94625:C 26 Mar 2020 20:43:24.225 * RDB: 2 MB of memory used by copy-on-write
93265:M 26 Mar 2020 20:43:24.299 * Background saving terminated with success
93265:M 26 Mar 2020 20:43:24.300 * Synchronization with replica 192.168.226.133:6379 succeeded
  • 可通過登錄數據庫查看master信息
[root@master src]# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2			#以下爲已連接的從服務器信息
slave0:ip=192.168.226.132,port=6379,state=online,offset=168,lag=1
slave1:ip=192.168.226.133,port=6379,state=online,offset=168,lag=0
master_replid:c358000ba4eaaebd56176e3b273e7973bb5efa8b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:168
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:168
  • ⑤ 驗證主從複製

    再主節點創建鍵值對,從服務也可查詢到信息,但是不能創建新的鍵值對

#master節點
127.0.0.1:6379> set work money
OK
127.0.0.1:6379> keys *
1) "work"
127.0.0.1:6379> get work
"money"
127.0.0.1:6379> exit


#slave節點
[root@slave1 src]# redis-cli -h 192.168.226.132 -p 6379
192.168.226.132:6379> keys *
1) "work"
192.168.226.132:6379> get work
"money"

二、redis 羣集----哨兵模式

2.1 哨兵模式原理
  • 哨兵(sentinel) 是一個分佈式系統,用於對主從結構中的每臺服務器進行監控,當出現故障時通過投票機制選擇新的master並將所有slave連接到新的master。
2.2 哨兵模式作用
  • ① 監控

    不斷的檢查master和slave是否正常運行。

    master存活檢測、master與slave運行情況檢測

  • ② 通知(提醒)

    當被監控的服務器出現問題時,向其他(哨兵間,客戶端)發送通知。

  • ③ 自動故障轉移

    斷開master與slave連接,選取一個slave作爲master,將其他slave連接到新的master,並告知客戶端新的服務器地址

    PS:哨兵也是一臺redis服務器,只是不提供數據服務

    通常哨兵配置數量爲單數(因爲哨兵在監控時通常只要哨兵數量的一半加1認爲master宕機了就認定master宕機了

    哨兵一般是與redis工作節點是分開設置的,服務啓動順序爲:先啓動主機、在啓動從機、最後啓動哨兵

2.3 哨兵配置項

在這裏插入圖片描述

2.4 哨兵工作原理
  • 主從切換

    哨兵在進行主從切換的過程中經歷三個階段

    • ① 監控:同步信息

    • ② 通知:保持連通

    • ③ 故障轉移

      發現問題

      競選負責人

      優先新master

      新master上任後,其他slave切換master,原master作爲slave故障恢復後連接

  • 階段一:監控階段
    在這裏插入圖片描述
    在這裏插入圖片描述

  • 階段二:通知階段

在這裏插入圖片描述

  • 階段三:故障轉移階段

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

2.5 實驗過程
  • 修改哨兵模式的配置文件(所有節點)
[root@master src]# cd ..
[root@master redis]# vim sentinel.conf
#17行 開啓:關閉保護模式
protected-mode no 

#26行 指定sentinel爲後臺啓動
daemonize yes

#36行 指定日誌存放路徑
logfile /usr/local/redis/sentinel.log

#65行 指定數據庫存放路徑
dir /usr/local/redis


#84行 至少有幾個哨兵檢測到主服務器故障了,才進行故障遷移
sentinel monitor mymaster 192.168.226.128 6379 2

#113行 指定哨兵在監控Redis服務時,判定服務器掛掉的時間週期,默認30000毫秒(30秒)
#此處爲了見效快,改爲3秒
sentinel down-after-milliseconds mymaster 3000

#146行 指定出現故障後,故障切換的最大超時時間,超過該值,認定切換失敗,默認爲180000毫秒(3分鐘)
sentinel failover-timeout mymaster 120000
  • 開啓哨兵模式

    哨兵模式,現開啓master節點的,再開啓slave節點的

#後臺運行
/usr/local/redis/src/redis-sentinel /usr/local/redis/sentinel.conf &
  • 查看哨兵信息
[root@master redis]# redis-cli -h 192.168.226.128 -p 26379 info Sentinel
2.6 故障模擬
  • 查看redis-server進程號
[root@master redis]# ps -ef | grep redis
root      29568      1  0 21:39 ?        00:00:01 /usr/local/redis/src/redis-sentinel *:26379 [sentinel]
root      44714  12307  0 21:52 pts/0    00:00:00 grep --color=auto redis
root      93265      1  0 20:42 ?        00:00:04 /usr/local/redis/src/redis-server 0.0.0.0:6379
  • kill進程號模擬故障
[root@master redis]# kill -9

#查看日誌
[root@master redis]# tail -f /usr/local/redis/sentinel.log
#以下爲主節點故障,從節點頂替主節點
switch-master mymaster 192.168.226.128 6379 192.168.226.132 6379
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章