redis哨兵模式沒有切換主機_Redis哨兵(Sentinel)模式

Redis哨兵(Sentinel)模式

f5cd4eaaf14bd7772ab36aa533ed54e6.png
在這里插入圖片描述

一、主從復制高可用

當我們使用主從復制出現的問題

  • 手動故障轉移
  • 寫能力和存儲能力受限
  • 主從復制 -master 宕機故障處理970d4d665639c711a8f50ed35ce08684.png

主從切換技術的方法是:當主服務器宕機后,需要手動把一臺從服務器切換為主服務器,這就需要人工干預,費事費力,還會造成一段時間內服務不可用。這不是一種推薦的方式,更多時候,我們優先考慮哨兵模式。


~哨兵模式概述

哨兵模式是一種特殊的模式,首先Redis提供了哨兵的命令,哨兵是一個獨立的進程,作為進程,它會獨立運行。其原理是哨兵通過發送命令,等待Redis服務器響應,從而監控運行的多個Redis實例。

哨兵主要有兩個作用

  • 通過發送命令,讓Redis服務器返回監控其運行狀態,包括主服務器和從服務器。

  • 當哨兵監測到master宕機,會自動將slave切換成master,然后通過發布訂閱模式通知其他的從服務器,修改配置文件,讓它們切換主機。

然而一個哨兵進程對Redis服務器進行監控,可能會出現問題,為此,我們可以使用多個哨兵進行監控。各個哨兵之間還會進行監控,這樣就形成了多哨兵模式。

故障切換(failover)的過程。假設主服務器宕機,哨兵1先檢測到這個結果,系統并不會馬上進行failover過程,僅僅是哨兵1主觀的認為主服務器不可用,這個現象成為主觀下線。當后面的哨兵也檢測到主服務器不可用,并且數量達到一定值時,那么哨兵之間就會進行一次投票,投票的結果由一個哨兵發起,進行failover操作。切換成功后,就會通過發布訂閱模式,讓各個哨兵把自己監控的從服務器實現切換主機,這個過程稱為客觀下線。這樣對于客戶端而言,一切都是透明的。

二、架構說明

bf6d8c0f30fd82bf9c6c27f84244f6e4.png
在這里插入圖片描述
  1. 多個sentinel 發現并確認master有問題。
  2. 選舉出一個sentinel作為領導
  3. 選出一個slave作為master
  4. 通知其余的slave成為新的master的slave
  5. 通知客戶端主從變化
  6. 等待老的master復活成新的master的slave

三、安裝配置

e9a8ad8c4df51b05357108904ee33005.png
在這里插入圖片描述
  1. 配置主從節點
  • 主節點
啟動命令:redis-server redis-7000.conf

配置

port?7000
daemonize?yes
pidfile?/var/run/redis-7000.pid
logfile?"7000.log"
dir?"/opt/soft/redis/data/"
  • Redis從節點
redis-server?redis-7001.conf
redis-server?redis-7002.conf

slave-1:

port?7002
daemonize?yes
pidfile?/var/run/redis-7002.pid
logfile?"7002.log"
dir?"/opt/soft/redis/data/"
slaveof?127.0.0.1?7000

slave-2:

port?7001
daemonize?yes
pidfile?/var/run/redis-7001.pid
logfile?"7001.log"
dir?"/opt/soft/redis/data/"
slaveof?127.0.0.1?7000


  1. 配置開啟sentinel監控主節點
  • sentine 主要配置 ?編輯 sentinel.conf
port?${port}
dir?"/opt/soft/redis/data/"
logfile?"${port}.log"
//?配置監聽的主服務器,這里sentinel monitor代表監控,mymaster代表服務器的名稱,可以自定義,192.168.11.128代表監控的主服務器,6379代表端口,2代表只有兩個或兩個以上的哨兵認為主服務器不可用的時候,才會進行failover操作。
sentinel?monitor?mymaster?127.0.0.1?7000?2???
sentinel?down-after-millseseconds?mymaster?30000?//判斷主節點時間
sentinel?parallel-syncs?mymaster?1????
sentinel?failover-timeout?mymaster?180000

啟動

redis-sentinel?sentinel.conf

可以使用 ps -ef|grep redis-sentinel 命令查看進程、9fe7aaa5fe695d6c059414efa473306f.png


四、實現原理

  • 故障轉移 ? ? --- java實現
/**
?*?測試Redis哨兵模式
?*?@author?liu
?*/
public?class?TestSentinels?{
????@SuppressWarnings("resource")
????@Test
????public?void?testSentinel()?{
????????JedisPoolConfig?jedisPoolConfig?=?new?JedisPoolConfig();
????????jedisPoolConfig.setMaxTotal(10);
????????jedisPoolConfig.setMaxIdle(5);
????????jedisPoolConfig.setMinIdle(5);
????????//?哨兵信息
????????Set?sentinels?=?new?HashSet<>(Arrays.asList("127.0.0.1:26379","1127.0.0.1:26379","127.0.0.1:26379"));//?創建連接池
????????JedisSentinelPool?pool?=?new?JedisSentinelPool("mymaster",?sentinels,jedisPoolConfig,"123456");//?獲取客戶端
????????Jedis?jedis?=?pool.getResource();//?執行兩個命令
????????jedis.set("mykey",?"myvalue");
????????String?value?=?jedis.get("mykey");
????????System.out.println(value);
????}
}

如果我們把主服務器停掉,在經過一段時間的報錯后,redis集群會恢復

  • 主觀下線和客觀下線

    • 主觀下線:當前sentintel節點認為某個redis節點不可用。

    • 客觀下線:所有sentinel節點認為某個redis節點不可用。

  • 三個定時任務

  1. 每10秒每個sentinel對master 和 slave執行info

     - 發現slave節點
    - 確認主從關系
  2. 每2秒每個sentinel通過master節點對channel交換信息(發布訂閱)

     - 通過_sentinel_:hello頻道交互
    - 交互對節點的“看法”和自身信息
  3. 每1秒每個sentinel 對其他sentinel和redis執行ping

  • 領導者選舉

    • 只需要一個sentinel節點完成故障轉移

    • 通過sentinel is - master -down -by-addr 命令都希望成為領導者

        -1. 每個主觀下線都Sentitle 節點向其他Sentinel節點發送命令,要求將它設置為領導者

      -2. 收到命令對Sentinel節點如果沒有同一通過其他Sentinel節點發送的命令,那么就將同一該請求,否則拒絕

      -3. 如果該Sentinel節點發現直接的票數已經超過Sentinel集合半數且超過quorum,那么它將成為領導者

      -4. 如果此過程由多個Sentinel節點成為領導者,那么將來等待一段時間重新進行選舉
beb6b9ef207a064e4f651fb19341f9bd.png
在這里插入圖片描述
  • 故障轉移(Sentinel領導者節點完成)

    • 1.從slave節點中選出一個 “合適點”節點作為master節點
    • 2.對上面對slave節點執行slaveof no one 命令讓其成為master節點。
    • 3.向剩余的slave節點發送命令,讓它們成為新的maater節點的slave節點,復制規避和parallel-syncs參數有關
    • 4.更新對原來master節點配置為slave,并保持著對其 “關注”,當其恢復后命令他去復制新對master節點
  • 選擇 “合適的” slave節點

    • 1.選擇slave-priority(slave節點優先級)最高對slave節點,如果存在返回,不存在繼續
    • 2.選擇復制偏移量最大的slave節點,復制最完整,存在返回,不存在繼續
    • 3.選擇runId最小的slave節點

五、需要說明的問題

  • 盡可能在不同物理機上和同一個網絡部署Redis sentinel的所有節點
  • Redis sentinel中的sentinel節點個數應該大于等于3且最好是奇數。(節點數多可以保證高可用)
  • Redis sentinel中的數據節點和普通數據節點沒有區別。每個sentinel節點在本質上還是一個Redis實例,只不過和Redis數據節點不同的是,其主要作用是監控Redis數據節點
  • 客戶端初始化時連接的是sentinel節點集合,不再是具體的Redis節點,但sentinel只是配置中心不是代理。

個人博客:http://blog.yanxiaolong.cn/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533392.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533392.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533392.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql rpm 安裝6_linux6.5 RPM方式安裝 mysql5.6

步驟一、檢查下linux是不是已經安裝了MySQL# rpm -qa|grep mysqlmysql-libs-5.1.71-1.el6.x86_64# rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64 //卸載# find / -name mysql//有mysql文件夾的話&#xff0c;把mysql的文件夾刪掉步驟二、下載需要的安裝包&#xff0c;下載地…

php mysql 索引_MySQL索引

mysql 如何創建索引&#xff1f;1.添加PRIMARY KEY(主鍵索引)mysql>ALTER TABLE table_name ADD PRIMARY KEY ( column )2.添加UNIQUE(唯一索引)mysql>ALTER TABLE table_name ADD UNIQUE (column)3.添加INDEX(普通索引)mysql>ALTER TABLE table_name ADD INDEX index…

linux ftp mysql_linux下ftp和ftps以及ftp基于mysql虛擬用戶認證服務器的搭建

命令連接&#xff0c;控制連接&#xff1a;21/tcp數據連接: 主動模式,運行在20/tcp端口 和 被動模式,運行在隨機端口數據傳輸模式(自動模式)&#xff1a;有二進制(mp3,jpg等)和文本(html)兩種傳輸模式ftp服務器端程序&#xff1a;wu-ftpd&#xff1a;vsftpd pureftpd Filezilla…

阿里云rds for mysql平臺介紹_阿里云RDS for MySQL 快速入門——筆記

1初始化配置1.1設置白名單創建RDS實例后&#xff0c;需要設置RDS實例的白名單&#xff0c;以允許外部設備訪問該RDS實例。默認的白名單只包含默認IP地址127.0.0.1&#xff0c;表示任何設備均無法訪問該RDS實例。設置白名單包括兩種操作&#xff1a;設置IP白名單&#xff1a;添加…

mysql數據庫下載壓縮包_mysql 8.0.22 zip壓縮包版(免安裝)下載、安裝配置步驟詳解...

大家好&#xff0c;今天我在學習 MySQL 8.0.22安裝及配置遇到了一些問題&#xff0c;特地將我整個安裝過程分享出來希望可以幫助不會安裝的小伙伴&#x1f61c;。參考鏈接第一步 MySQL的下載進入MySQL官網下載&#xff0c;按下圖所示步驟操作&#xff0c;耐心等待下載完成就可以…

mysql 5.5 主從同步問題_MySQL 5.5 主從復制異步、半同步以及注意事項詳解

大綱一、前言二、Mysql 基礎知識三、Mysql 復制(Replication)四、Mysql 復制(Replication)類型五、Mysql 主從復制基本步驟六、Mysql 主從復制(異步)七、Mysql 主從復制(半同步)八、Mysql 復制工具九、Mysql 復制注意事項十、Mysql 復制過濾一、前言從這一篇博客開始我們就來學…

開源內容管理系統 php mysql_十大免費PHP+MySql平臺內容管理系統推薦

最近&#xff0c;朋友要建站讓我幫著推薦個好的CMS(內容管理系統)&#xff0c;個人認為其實選擇哪個CMS并不重要&#xff0c;除了對搜索引擎的親好外&#xff0c;個人的使用操作習慣和對所選CMS系統的熟悉程度有很大關系。這里為需要建站但又徘徊的朋友介紹10個免費PHPMySql平臺…

mysql導入xml 工具下載_XML導入Mysql工具下載|XmlToMysql 最新版v2.1 下載_當游網

XmlToMysql是一款十分不錯的XML導入Mysql工具&#xff0c;它可以幫助用戶們將XML中的數據快速的導入到MySQL數據庫中&#xff0c;可以直接跳過解析環節&#xff0c;因此可以有效的提升程序員傳輸數據的效率&#xff0c;讓程序員可以擁有更多的時間去處理其他環節的事宜。所以喜…

mysql忽略表名大小寫_Mysql 表名忽略大小寫-連接字符集隨筆記錄

1.參數說明&#xff1a;lower_case_table_names0表名存儲為給定的大小和比較是區分大小寫的lower_case_table_names 1表名存儲在磁盤是小寫的&#xff0c;但是比較的時候是不區分大小寫lower_case_table_names2表名存儲為給定的大小寫但是比較的時候是小寫的unix,linux下lower_…

mysql與orancl_清晰講解SQL語句中的外連接,通用于Mysql和Oracle,全是干貨哦

清晰講解SQL語句中的外連接&#xff0c;通用于Mysql和Oracle&#xff0c;全是干貨哦直入主題&#xff1a;我們做一個操作&#xff0c;將員工SCOTT的部門去掉&#xff0c;再次通過內連接查看數據&#xff0c;看看會產生什么現象&#xff1f;使用內連接&#xff0c;查詢數據問題&…

.net mysql查詢數據庫連接_asp.net連接查詢SQL數據庫并把結果顯示在網頁上(2種方法)...

在ASP.NET中&#xff0c;使用C#連接SQL數據庫&#xff0c;并使用SQL語句查詢&#xff0c;以前從來沒有接觸過C#&#xff0c;最近用到了&#xff0c;摸索了兩天終于運行起來了&#xff0c;Mark一下&#xff0c;不喜勿噴有兩種方法&#xff1a;(說的是第一種方法不安全&#xff0…

mysql異常恢復工具_[MySQL異常恢復]mysql ibd文件恢復

在mysql中由于某種原因保存有ibd文件&#xff0c;但是表已經被刪除或者frm文件損壞亦或者ibdata文件損壞/丟失等。本文模擬在這種情況下&#xff0c;通過mysql自身技術即可完成ibd文件恢復.測試環境mysql版本mysql> select version();-----------| version() |-----------| …

ddl是什么意思網絡語_DDL(數據定義語言)

DDL&#xff0c;是對數據庫內部的對象進行創建&#xff0c;刪除&#xff0c;修改等的操作語言。它和DML語言最大的區別是DML只是對表內部數據的操作&#xff0c;而不涉及到表的定義&#xff0c;結構的修改&#xff0c;更不會涉及到其它對象。1.連接數據庫:注:1.mysql代表客戶端…

jsp mysql優點_asp、php、asp.net、jsp的介紹和各自的優缺點

現在主流的網站開發語言無外乎asp、php、asp.net、jsp等。主流網站開發語言之ASP:ASP是微軟(Microsoft)所開發的一種后臺&#xff0c;它的語法和Visual BASIC類似&#xff0c;可以像SSI(Server Side Include)那樣把后臺腳本代碼內嵌到HTML頁面中。雖然ASP簡單易用&#xff0c;但…

測試網絡的帶寬指令_單機千萬級MQTT服務器測試報告

目標&#xff1a;測試創建1000萬客戶端連接到Coolpy7 MQTT服務器端&#xff0c;服務器操作系統 Linux(任意一款發行版服務器版本)。分別在兩臺硬件一樣的服務器&#xff0c;其中一臺用于服務器端運行&#xff0c;另一臺用于創建千萬客戶端連接客戶端機器。在硬件一致的情況下請…

python郵箱爆破_Python在線爆破郵箱賬號密碼測試代碼(親測可用)

dic 字典格式如下(mail.txt) :usernamegmail.com:passwordusernamegmail.com:passwordusernamegmail.com:password以此類推&#xff0c;切記保存成utf-8編碼格式。放置在當前腳本目錄&#xff0c;也可自己定義修改。支持ssl https /imap協議。# version 3.4.0# codingUTF-8# ti…

查看redis aof內存_Redis持久化問題定位與優化技巧

今天主要分享繼Redis持久化方式RDB、AOF之后的一些常用的Redis問題定位于優化方式。這里主要CPU、內存、磁盤在三個維度去分析問題&#xff01;Fork操作當Redis做RDB或AOF重寫時&#xff0c;一個必不可少的操作就是執行fork操作創建子進程&#xff0c;對于大多數操作系統來說fo…

mysql新增陣列df_DF學Mysql(三)——索引操作

概要&#xff1a;數據庫對象索引其實與書的目錄非常相似&#xff0c;主要是為了提高從表中檢索數據的速度。由于數據存儲在數據庫表中&#xff0c;所以索引是創建在數據庫表對象上的&#xff0c;由表中的一個字段或多個字段生成的鍵組成&#xff0c;這些鍵存儲在數據結構(B-樹或…

python本地瀏覽器注入js_PyQt5內嵌瀏覽器注入JavaScript腳本實現自動化操作的代碼實例...

概要應同學邀請&#xff0c;演示如何使用 PyQt5 內嵌瀏覽器瀏覽網頁&#xff0c;并注入 Javascript 腳本實現自動化操作。下面測試的是一個廉價機票預訂網站(http://www.flyscoot.com/)&#xff0c;關鍵點如下使用 QWebEngineView 加載網頁&#xff0c;并顯示進度。在默認配置(…

python裝好了怎么啟動車_【填空題】Python安裝好后,可以直接在CMD命令行下輸入( )命令, 可啟動交互式編程,提示窗口如下:...

傾斜巖層的產狀要素是用巖層層面的()。A.傾角B.走向C.范圍D.傾向E.表面積采用深層攪拌法進行地基加固處理&#xff0c;其適用條件為()。A.砂礫石松軟地基B.松散砂地基C.黏土軟弱地基根據《建筑工程建筑面積計算規則》&#xff0c;下列關于建筑物雨篷結構的建筑面積計算&#xf…