当前位置:网站首页>Redis之哨兵模式
Redis之哨兵模式
2022-07-06 09:12:00 【~龐貝】
Redis之哨兵模式
1.哨兵介紹
哨兵(sentinel) 是一個分布式系統,用於對主從結構中的每臺服務器進行監控,當出現故障時通過投票機制選擇新的aster並將所有slave連接到新的master。
2.哨兵作用
1.監控
不斷的檢查master和slave是否正常運行。
master存活檢測、master與slave運行情况檢測
2.通知(提醒)
當被監控的服務器出現問題時,向其他(哨兵間,客戶端)發送通知。
3.自動故障轉移
斷開master與slave連接,選取一個slave作為master,將其他slave連接到新的master,並告知客戶端新的服務器地址
注意:
哨兵也是一臺redis服務器,只是不提供數據服務
通常哨兵配置數量為單數(一般最少三個起)
3.哨兵相關配置
注:一般情况下rdb文件、aof文件、”哨兵的一些工作信息“都存在一個目錄下面,即使不同的端口的也給存到一個目錄下;
sentinel.conf與redis-conf文件也存放在一個目錄下,即使不同端口的sentinel.conf與redis-conf文件也給存到一個目錄下
1.port 26379:
哨兵通常默認端口是26379
2.dir “/var/lib/redis”:
存儲哨兵的一些工作信息
3.sentinel monitor :
讓 sentinel 去監控一個地址為 ip:port 的主服務器,這裏的 master-name 可以自定義; 是一個數字,錶示當有多少個 sentinel 認為主服務器宕機時,它才算真正的宕機掉,通常數量為半數或半數以上才會認為主機已經宕機, 需要根據 sentinel 的數量設置。
4.sentinel monitor mymaster 127.0.0.1 6379 2:
監控的主機,mymaster這個單詞可以更改,可以自定義名字
2是指2個哨兵認定主機掛那麼才會認為主機掛,相當於是一個標准,通常設定為哨兵數量的一半加1,這就是為什麼我們的哨兵數量通常設為單數(比如設置3個哨兵的時候,有2個哨兵認為主機掛了,才認為主機是掛了)(3個哨兵配置2)(5個哨兵配置3)(7個哨兵配置4)
5.sentinel down-after-milliseconds :
在指定的毫秒數內,若主節點沒有應答哨兵的 PING 命令,此時哨兵認為服務器主觀下線,默認時間為 30 秒。 與mymaster需要一一對應,是毫秒單比特
6.sentinel parallel-syncs :
指定可以有多少個 Redis 服務同步新的主機,即可以有多少個redis同時開始同步數據,一般而言,這個數字越小同步時間越長,而越大,則對網絡資源要求就越高。
7.# sentinel auth-pass mymaster MySUPER–secret-0123passw0rd:
sentinel auth-pass <服務器名稱><密碼>
若主服務器設置了密碼,則哨兵必須也配置密碼,否則哨兵無法對主從服務器進行監控。該密碼與主服務器密碼相同。
8.# sentinel failover-timeout :
指定故障轉移允許的毫秒數,若超過這個時間,就認為故障轉移執行失敗,默認為 3 分鐘。
4.配置哨兵
1)配置一拖二的主從結構
2)配置三個哨兵(配置相同,端口不同)
3)參看sentinel.conf
注:啟動順序是,先啟動主機,再啟動從機再啟動哨兵
啟動哨兵命令如下:
redis-sentinel sentinel-端口號.conf
5.演示(配置哨兵)
創建了3個哨兵,一個master,2個slave。
“哨兵1”、“哨兵2“、”哨兵3“窗口用於看日志;
可以看到有一個 sentinel.conf配置文件
複制sentinel.conf配置文件,並進行修改成sentinel-26379.conf、sentinel-26380.conf、sentinel-26381.conf:
查看redis-6379.conf、redis-6380.conf配置文件
創建redis-6381.conf配置文件
啟動6379master主機、6380slave從機、6381salve從機、:
啟動26379哨兵
可以進入哨兵26379客戶端進行查看key即get操作,不過不允許進行set操作;
還可以info查看信息
再次查看26379配置文件,發現裏面新增添了許多信息,即一旦啟動哨兵,它的配置文件信息就要變化
啟動26380哨兵:
從最後一行可以看到哪個id就是26379哨兵的id了
再次查看26379哨兵日志,發現也多了一行,是26380哨兵的id,即說明哨兵之間是可以互相通信的
再次查看26379配置文件,發現裏面信息又發生了一次變化
啟動26381哨兵
再次查看26379配置文件,發現裏面信息又發生了一次變化
ctrl+c停掉6379master主機
30秒以後,26379哨兵開始打印大量日志
進行選舉投票,讓6381當主機,讓6379、6380當從機,這就是主從切換,但是6379仍然是掉線的,即再sdown 6379
6.主從切換過程
哨兵在進行主從切換過程中經曆三個階段
1.監控:
同步信息
2.通知:
保持聯通
3.故障轉移:
1)發現問題
2)競選負責人
3)優選新master
4)新master上任,其他slave切換master,原master作為slave故障回複後連接
7.階段一監控階段
為了哨兵與master更好的進行信息交互,建立一個cmd連接(相當於通道)
master也會生成一個“SentinelRedisInstance”信息,與""SentinelState“幾乎一模一樣
第二個sentinel來之後,會發現“SentinelRedisInstance”信息,這樣的話也就知道其他哨兵的信息了
此時第一個sentinel只有一個哨兵的信息,但是sentinel有兩個哨兵的信息,為了保證哨兵之間同步,建立起”發布訂閱通道“,這樣的話就可以相互對稱信息了
為了保證第一個哨兵與第二個哨兵之間可以長期對稱,它們之間需要ping命令來維持
8.階段二通知階段
第一次可能是sentinel1發送hello給master與slave,收到回複後再轉發給其他哨兵,第二次可能就是sentinel2發送hello給master與slave,收到回複後再轉發給其他哨兵
9.階段三故障轉移階段
1.服務器列錶中挑選備選master
1)不在線的
2)響應慢的
3)與原master斷開時間久的
4)優先原則
4.1)優先級
4.2)offset
4.3)runid
2.發送指令( sentinel )
1)向新的master發送slaveof no one
2)向其他slave發送slaveof 新masterIP端口
一個sentinel標記主機掛了是sdown,超過半數sentinel標記主機下線是odown
边栏推荐
- Detailed explanation of dynamic planning
- [today in history] February 13: the father of transistors was born The 20th anniversary of net; Agile software development manifesto was born
- [OC foundation framework] - string and date and time >
- Nacos installation and service registration
- Leetcode: Sword finger offer 48 The longest substring without repeated characters
- LeetCode:673. Number of longest increasing subsequences
- LeetCode41——First Missing Positive——hashing in place & swap
- 多元聚类分析
- LeetCode:162. Looking for peak
- Advanced Computer Network Review(4)——Congestion Control of MPTCP
猜你喜欢
Compétences en mémoire des graphiques UML
postman之参数化详解
Mongodb installation and basic operation
【剑指offer】序列化二叉树
[oc]- < getting started with UI> -- common controls - prompt dialog box and wait for the prompt (circle)
Intel Distiller工具包-量化实现1
Pytest parameterization some tips you don't know / pytest you don't know
Intel Distiller工具包-量化实现2
一篇文章带你了解-selenium工作原理详解
LeetCode41——First Missing Positive——hashing in place & swap
随机推荐
【剑指offer】序列化二叉树
不同的数据驱动代码执行相同的测试场景
BMINF的後訓練量化實現
MySQL uninstallation and installation methods
[daily question] Porter (DFS / DP)
Advanced Computer Network Review(4)——Congestion Control of MPTCP
Pytest之收集用例规则与运行指定用例
【图的三大存储方式】只会用邻接矩阵就out了
Pytest parameterization some tips you don't know / pytest you don't know
Leetcode: Jianzhi offer 04 Search in two-dimensional array
什么是MySQL?MySql的学习之路是怎样的
如何正确截取字符串(例:应用报错信息截取入库操作)
Selenium+pytest automated test framework practice (Part 2)
【shell脚本】使用菜单命令构建在集群内创建文件夹的脚本
Chapter 1 :Application of Artificial intelligence in Drug Design:Opportunity and Challenges
LeetCode41——First Missing Positive——hashing in place & swap
[OC foundation framework] - [set array]
BN折叠及其量化
LeetCode:387. The first unique character in the string
Mongodb installation and basic operation