当前位置:网站首页>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
边栏推荐
- 【shell脚本】使用菜单命令构建在集群内创建文件夹的脚本
- Notes 01
- LeetCode:498. Diagonal traversal
- AcWing 2456. Notepad
- 使用标签模板解决用户恶意输入的问题
- Booking of tourism products in Gansu quadrupled: "green horse" became popular, and one room of B & B around Gansu museum was hard to find
- MongoDB 的安装和基本操作
- [three storage methods of graph] just use adjacency matrix to go out
- [Hacker News Weekly] data visualization artifact; Top 10 Web hacker technologies; Postman supports grpc
- What is an R-value reference and what is the difference between it and an l-value?
猜你喜欢
什么是MySQL?MySql的学习之路是怎样的
BMINF的后训练量化实现
Multivariate cluster analysis
Advance Computer Network Review(1)——FatTree
KDD 2022 paper collection (under continuous update)
数字人主播618手语带货,便捷2780万名听障人士
A convolution substitution of attention mechanism
ant-design的走马灯(Carousel)组件在TS(typescript)环境中调用prev以及next方法
数学建模2004B题(输电问题)
CUDA实现focal_loss
随机推荐
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
KDD 2022论文合集(持续更新中)
Intel distiller Toolkit - Quantitative implementation 2
Philosophical enlightenment from single point to distributed
LeetCode:剑指 Offer 48. 最长不含重复字符的子字符串
[oc foundation framework] - < copy object copy >
go-redis之初始化連接
LeetCode:236. The nearest common ancestor of binary tree
随手记01
LeetCode:673. Number of longest increasing subsequences
LeetCode:836. 矩形重叠
CUDA realizes focal_ loss
AcWing 2456. Notepad
Multivariate cluster analysis
Leetcode problem solving 2.1.1
requests的深入刨析及封装调用
SimCLR:NLP中的对比学习
opencv+dlib实现给蒙娜丽莎“配”眼镜
Implement window blocking on QWidget
postman之参数化详解