網站首頁 編程語言 正文
一、redis環境:
環境:redis6.2.6
linux虛擬機一臺,contos7;
二、哨兵介紹:
1.一主二從三哨兵理論圖:
一主兩從三哨兵集群,當master節點宕機時,通過哨兵(sentinel)重新推選出新的master節點,保證集群的可用性。
2.哨兵的主要功能:
1.集群監控:負責監控 Redis master 和 slave 進程是否正常工作。
2.消息通知:如果某個 Redis 實例有故障,那么哨兵負責發送消息作為報警通知給管理員。
3.故障轉移:如果 master node 掛掉了,會自動轉移到 slave node 上。
4.配置中心:如果故障轉移發生了,通知 client 客戶端新的 master 地址。
PS:根據推舉機制,集群中哨兵數量最好為奇數(3、5…)
3.哨兵用于實現 redis 集群的高可用,本身也是分布式的,作為一個哨兵集群去運行,互相協同工作。
- 故障轉移時,判斷一個 master node 是否宕機了,需要大部分的哨兵都同意才行,涉及到了分布式選舉的問題。
- 即使部分哨兵節點掛掉了,哨兵集群還是能正常工作的,因為如果一個作為高可用機制重要組成部分的故障轉移系統本身是單點的,那就很坑爹了。
4.哨兵的核心知識:
- 哨兵至少需要 3 個實例,來保證自己的健壯性。
- 哨兵 + redis 主從的部署架構,是不保證數據零丟失的,只能保證 redis 集群的高可用性。
- 對于哨兵 + redis 主從這種復雜的部署架構,盡量在測試環境和生產環境,都進行充足的測試和演練。
三、安裝redis:
此處省略redis的安裝。
四、使用Redis主從復制的作用:
主從復制,是指將一臺Redis主節點服務器的數據,復制到其他的Redis從節點服務器。
主節點稱為(master/leader),從節點稱為(slave/follower);
1,數據冗余:主從復制實現了數據的熱備份,這也是持久化實現的另一種方式。
2,故障恢復:當主節點出現問題時,可以由從節點提供服務,實現快速的故障恢復;實際上是一種服務的冗余。
3,讀寫分離:master服務主要用來寫,slave服務主要用來讀數據??梢蕴岣叻掌鞯呢撦d能力,可以根據需求的變化,添加從節點的數量。
4,負載均衡:同時配合讀寫分離,由主節點提供寫服務,從節點提供讀服務,分擔服務器的負載。在寫少讀多的情況下,通過多個從節點分擔讀負載,能夠大大提高Redis服務的并發量和負載。
5,高可用的基石,主從復制是哨兵和集群模式能夠實施的基礎。
五、配置redis一主二從:
在正常的生產中我們是準備多臺服務器,比如三臺,每臺都在各自的linux系統中安裝redis。
但是此處為了演示方便,我使用一臺電腦安裝虛擬機,在虛擬機上安裝三份redis服務,來模擬一主二從的效果。
第一步:修改原redis.conf配置文件:
redis.conf配置文件采用默認的混合持久化,也可以采用單獨的RDB持久化,因為主從復制的本質是RDB方式,所以要有RDB方式參與即可。
原redis.conf配置文件需要修改的幾個地方:
1.先在網絡部分注釋掉單機連接那一行,即注釋掉bind 127.0.0.1
2.同樣我們要將后臺運行打開:daemonize no,設置為yes。
3.將 保護模式關閉:protected-mode yes 改為:protected-mode no
4.打開RDB持久化配置:
#RDB持久化策略 默認三種方式,[900秒內有1次修改],
#[300秒內有10次修改],[60秒內有10000次修改]即觸發RDB持久化,
#我們可以手動修改該參數或新增策略
save 900 1
save 300 10
save 60 10000
#RDB文件名
dbfilename dump.rdb
#RDB文件存儲路徑
dir ./
策略配置:
#在seconds秒內有changes次數據修改就觸發RDB持久化
5.開啟AOF持久化配置
appendonly yes
#AOF文件名
appendfilename "appendonly.aof"
#AOF文件存儲路徑 與RDB是同一個參數,共用一個文件路徑
dir ./ #即bin目錄下
#AOF策略,一般都是選擇第一種[always:每個命令都記錄],
#[everysec:每秒記錄一次],[no:看機器的心情高興了就記錄,linux一般半個小時同步一次]
#appendfsync always
appendfsync everysec
# appendfsync no
#aof文件大小比起上次重寫時的大小,增長100%(配置可以大于100%)時,觸發重寫。
#[假如上次重寫后大小為10MB,當AOF文件達到20MB時也會再次觸發重寫,以此類推
auto-aof-rewrite-percentage 100
#aof文件大小超過64MB*2時,觸發重寫,
#為何要乘以2,因為auto-aof-rewrite-percentage 100 是翻倍即100%,
#達到翻倍時才重寫
auto-aof-rewrite-min-size 64mb
6.打開混合持久化:
#6.aof-use-rdb-preamble yes # 檢查混合持久化是否打開,redis5.0后默認開啟
第二步:將修改后的redis.conf配置文件復制出來三份:
1.進入redis默認的安裝路徑:cd /usr/local/bin
ll #查看文件夾內容
cp redis.conf redis_bk.conf #盡量備份一個配置文件,防止修改錯了,可以重新用
cp redis.conf redis6379.conf
cp redis.conf redis6380.conf
cp redis.conf redis6381.conf
第三步:分別修改三個配置文件:
vim redis6379.conf
修改的內容:
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
vim redis6380.conf
修改的內容:
pidfile /var/run/redis_6380.pid
port 6380
dbfilename dump6380.rdb
vim redis6381.conf
修改的內容:
pidfile /var/run/redis_6381.pid
port 6381
dbfilename dump6381.rdb
redis啟動前的準備工作:
查看虛擬機防火墻是否關閉,需要關閉防火墻
1:查看防火狀態
systemctl status firewalld
service iptables status
2:暫時關閉防火墻
systemctl stop firewalld
service iptables stop
3:永久關閉防火墻
systemctl disable firewalld
chkconfig iptables off
關閉后再查看防火墻狀態
開放指定端口6379:
開放指定端口的方式一:
在linux中執行: /sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
redis默認端口號6379是不允許進行遠程連接的,所以在防火墻中設置6379開啟遠程服務;
開放指定端口的方式二:
先開啟防火墻才能開放指定端口的:systemctl start firewalld
firewall-cmd --zone=public --add-port=6379/tcp --permanent
第四步:啟動三臺redis服務器,并查看是否啟動成功:
redis-server redis6379.conf
redis-server redis6380.conf
redis-server redis6381.conf
ps -ef | grep redis
第五步:配置從庫不配置主庫 :
先連接上redis客戶端:
redis-cli -p 6380
然后將6380機器配置成從機:
slaveof 主機ip 主機端口號
#slaveof 127.0.0.1 6379
info replication
然后將6381機器配置成從機:
redis-cli -p 6381
#slaveof 主機ip 主機端口號
slaveof 127.0.0.1 6379
info replication
在主機查看從機信息:發現配置成功。
redis-cli -p 6379
info replication
六、配置redis三哨兵:
將官方自帶的sentinel.conf(此文件在redis的源碼目錄下,即解壓路徑下)復制到/usr/local/bin:
然后復制出來三份:
修改的內容如下:
vim sentinel0.conf
文件修改內容如下:
protected-mode no
daemonize yes
port 26379 #sentinel 端口
dir “/usr/local/bin”
sentinel monitor mymaster 127.0.0.1 6379 2
然后分別修改sentinel1.conf信息如下:
protected-mode no
daemonize yes
port 26380 # sentinel 端口,因為我們在一臺虛擬機上,所以端口要不一樣
dir “/usr/local/bin”
sentinel monitor mymaster 127.0.0.1 6379 2 #這里的mymaster 兩個副本的要一樣,mymaster同一個主機名
然后分別修改sentinel2.conf信息如下:
protected-mode no
daemonize yes
port 26381 # sentinel 端口,因為我們在一臺虛擬機上,所以端口要不一樣
dir “/usr/local/bin”
sentinel monitor mymaster 127.0.0.1 6379 2 #這里的mymaster 兩個副本的要一樣
配置文件詳解
哨兵的配置主要就是修改sentinel.conf配置文件中的參數,在Redis安裝目錄即可看到此配置文件,各參數詳解如下:
# 哨兵sentinel實例運行的端口,默認26379
port 26379
# 哨兵sentinel的工作目錄
dir ./
# 是否開啟保護模式,默認開啟。
protected-mode:no
# 是否設置為后臺啟動。
daemonize:yes
# 哨兵sentinel的日志文件
logfile:./sentinel.log
# 哨兵sentinel監控的redis主節點的
## ip:主機ip地址
## port:哨兵端口號
## master-name:可以自己命名的主節點名字
## quorum:當這些quorum個數sentinel哨兵認為master主節點失聯 那么這時
#客觀上認為主節點失聯了
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 2
# 當在Redis實例中開啟了requirepass,所有連接Redis實例的客戶端都要提供密碼。
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster 123456
# 指定主節點應答哨兵sentinel的最大時間間隔,超過這個時間,哨兵主觀上認為主節點下線,
#默認30秒
# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 30000
# 指定了在發生failover主備切換時,最多可以有多少個slave同時對新的master進行同步。
#這個數字越小,完成failover所需的時間就越長;反之,但是如果這個數字越大,就意味著
#越多的slave因為replication而不可用??梢酝ㄟ^將這個值設為1,來保證每次只有一個slave,
#處于不能處理命令請求的狀態。
# sentinel parallel-syncs <master-name> <numslaves>
sentinel parallel-syncs mymaster 1
# 故障轉移的超時時間failover-timeout,默認三分鐘,可以用在以下這些方面:
## 1. 同一個sentinel對同一個master兩次failover之間的間隔時間。
## 2. 當一個slave從一個錯誤的master那里同步數據時開始,直到slave被糾正為從正確
#的master那里同步數據時結束。
## 3. 當想要取消一個正在進行的failover時所需要的時間。
## 4.當進行failover時,配置所有slaves指向新的master所需的最大時間。不過,
#即使過了這個超時,slaves依然會被正確配置為指向master,
但是就不按parallel-syncs所配置的規則來同步數據了
# sentinel failover-timeout <master-name> <milliseconds>
sentinel failover-timeout mymaster 180000
# 當sentinel有任何警告級別的事件發生時(比如說redis實例的主觀失效和客觀失效等等),
#將會去調用這個腳本。一個腳本的最大執行時間為60s,如果超過這個時間,
#腳本將會被一個SIGKILL信號終止,之后重新執行。
# 對于腳本的運行結果有以下規則:
## 1. 若腳本執行后返回1,那么該腳本稍后將會被再次執行,重復次數目前默認為10。
## 2. 若腳本執行后返回2,或者比2更高的一個返回值,腳本將不會重復執行。
## 3. 如果腳本在執行過程中由于收到系統中斷信號被終止了,則同返回值為1時的行為相同。
# sentinel notification-script <master-name> <script-path>
sentinel notification-script mymaster /var/redis/notify.sh
# 這個腳本應該是通用的,能被多次調用,不是針對性的。
# sentinel client-reconfig-script <master-name> <script-path>
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh
最后是先啟動三個服務,然后起送三個哨兵,然后客戶端;
啟動哨兵:
redis-sentinel sentinel0.conf
redis-sentinel sentinel1.conf
redis-sentinel sentinel2.conf
啟動后查看sentinel信息:redis-cli -p sentinel的端口號
redis-cli -p 26379
info sentinel
原文鏈接:https://blog.csdn.net/weixin_38568503/article/details/124411426
相關推薦
- 2022-07-07 opencv學習筆記C++繪制灰度直方圖_C 語言
- 2022-08-28 Python代碼中引用已經寫好的模塊、方法的兩種方式_python
- 2023-09-12 SpringBoot整合MQTT(MqttClient)
- 2022-03-24 .Net?Core服務治理Consul自動擴展和服務調用_自學過程
- 2022-04-25 C#使用NPOI讀取excel轉為DataSet_C#教程
- 2022-09-08 Python支持異步的列表解析式_python
- 2022-12-29 解決React報錯You?provided?a?`checked`?prop?to?a?form?f
- 2022-03-30 詳解Python的多任務進程_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支