redis配置主從沒效果_跟我一起學Redis之加個哨兵讓主從復制更加高可用

Redis哨兵(Sentinel)其實本質就是一個RedisServer節點,通過設置 運行模式 來開啟哨兵的功能;主要功能如下:

  • 監控(Monitoring ):哨兵節點會不斷地檢查的主服務和從服務的運行狀態;
  • 自動故障遷移(Automatic failover) :當Redis主從模式中的主服務器發生故障時,哨兵節點會根據一定的策略自動進行故障遷移,即在原有主服務器下的從服務器中,自動選出一個從服務器作為新的主服務器,及時處理故障;
  • 通知(Notification) :當被監控的Redis服務器故障時,哨兵節點可以向相關人員或客戶端發送通知提醒;
  • 配置提供者(Configuration provider) :可以通過哨兵節點為客戶端提供主從模式中的主節點地址,這里的客戶端指平時寫的程序;

老規矩,還是先不說那么多理論,先來實操一把,然后再來總結:

哨兵模式搭建

先來個最基礎的:一個哨兵監控一主二從的環境;后面小伙伴就知道如何擴展啦,如下圖所示(這里通過一臺機器演示,所以通過端口進行區分各個redis節點):

da53a0aa1ef028ca941dd3a5e3d97bae.png

Redis哨兵模式是基于Redis主從復制的,所以先來搭建主從復制環境,這個過程在 上一篇 中已經詳細分享,這里就不細說,直接動手啦;

  1. 搭建主從復制環境,如上圖所示,6377作為主服務器,6388和6399作為從服務器,這里是通過配置文件的形式修改,最終效果如下:
  2. 主從復制環境搭建完畢之后,接下來需要有一個哨兵對其進行監控;之前有說過,Redis的功能通過配置文件就能快速實現,針對哨兵有一個單獨的配置文件,這里就起名為: sentinel.conf ,內容如下:sentinel monitor mymaster 127.0.0.1 6377 1大概意思就是哨兵要監控對應的主服務器,其他啥都不用配置;這里對于配置文件內容先不解釋這么多,接下來會專門進行介紹,先把環境搭建起來,玩一把再說;
  3. 啟動哨兵,兩種方式:redis-sentinel啟動,redis-sentinel其實是用redis的一個代碼分支分離出來的,安裝完redis就有,命令如下:./redis-sentinel ZoeConfig/sentinel.confredis-server啟動,指定為哨兵模式即可,命令如下:./redis-server ZoeConfig/sentinel.conf --sentinel啟動效果如下:如上圖所示,Redis哨兵其實本質還是一個Redis節點,只是運行模式不一樣而已;
  4. 哨兵模式運行起來,模擬主服務器宕機,這里直接將6377服務器shutdown, 注意看哨兵打印的日志:先將主服務器6377關掉,如下:由于哨兵定時對主服務器進行監控,如果在30秒內(默認30秒)發現主服務器無法正常通訊時,就開始進行投票選舉原主服務器下的從服務器作為新主服務器,哨兵打印日志如下:大概流程如下圖:哨兵最后的狀態會持久化到指定的配置文件中,之前只是簡單配置了一條監控語句,現在如下:
  5. 驗證故障轉移結果;光說6388變成了主服務器沒證據,連上6388看看,同時再看看6399有沒有換新主人,如下圖:6388主從信息:對應的配置文件中將之前的主從關系配置已經去掉了。6399主從信息:對應的配置文件也已經改了,如下:

以上就完成了哨兵模式搭建的演示啦,是不是很簡單,只要稍微改改配置文件即可完成自動化故障恢復。 到這小伙伴可能會問,原來故障的主服務器恢復了會怎么樣? 一個哨兵誤判主服務器下線或高并發抗不住怎么辦?嘿嘿嘿,接著來搞,接下來邊操作邊總結;

原故障的主服務器恢復之后只能當小兵

原有通訊異常的主服務器如果恢復正常,那它還能恢復原來的地位嗎?,還是另有安排呢?這個很好演示,直接將之前shutdown的主服務器重新起來即可;6377啟動后查看主從關系信息如下圖:

7c663f9360e7f2f5d35994abc3687594.png

如上圖實操驗證,原來異常的主服務器(6377)恢復之后就變成新主服務器(6388)的從服務器了(原來再屌,現在也只是小弟,重新再混等機會)。

哨兵集群高可用

以上演示就一個哨兵,這樣有很明顯的兩個缺點,如下:

  • 單個哨兵容易導致誤判主節點下線,比如主節點正常,只是在與哨兵之間通訊出現短暫異常,如果是單個哨兵,在指定的時間間隔沒有通訊就認為主節點下線了,但其實沒有;如果哨兵集群,可以詢問多個哨兵指定的主節點是否下線,這樣就顯得更有保障;
  • 哨兵掛了,故障轉移就沒法繼續啦,哨兵集群的話就會選擇其他哨兵繼續處理;

配置哨兵集群超級簡單,就是增加節點即可,哨兵節點會通過發布與訂閱功能來自動發現正在監視 相同主服務器 的其他哨兵 , 這一功能是通過向頻道 sentinel :hello 發送信息來實現的。如下圖再新增一個哨兵節點,同時增加一個配置文件,由于默認端口為26379,上一個哨兵已經占用,這里在新增的配置文件中指定新哨兵的端口為:26388;

配置文件名為 sentinel26388.conf ,內容如下:

sentinel monitor mymaster 127.0.0.1 6388 1port 26388

指定配置文件啟動第二個哨兵,啟動命令為 ./redis-sentinel ZoeConfig/sentinel26388.conf ,效果如下:

c7123b39aa8039e9486fb63e97fd59fc.png

哨兵如何做到互相交流和監控從服務器的

到這應該有小伙伴會有疑問:在配置哨兵的時候,只配置監控主服務器,從服務器是怎么知道的?哨兵之間的交流是通過什么形式實現的?

關于從服務器:哨兵會自動詢問主服務器獲得對應從服務器的信息,因為從服務器會在連接主服務器的時候把相關信息給主服務器,所以哨兵能通過主服務器拿到從服務器的信息;

關于哨兵之間:哨兵節點會通過發布與訂閱功能來自動發現正在監視 相同主服務器 的其他哨兵 , 這一功能是通過向頻道 sentinel :hello 發送信息來實現的;

注:一個哨兵可以同時監控多個主服務器;

哨兵配置文件介紹

以上配置只是為了快速實現演示,其實關于哨兵還有其他很多配置,接下來都過一遍:

  • port:哨兵的端口,默認是26379,可以通過此配置項進行修改;
  • dir:哨兵的工作目錄;
  • sentinel monitor : 指定哨兵監控的主服務器;master-name:對監控的節點進行命名,方便后續根據名稱獲取信息;ip:主節點ip;redis-port:主節點的端口;quorum:整數,及設置有幾個哨兵統一認為主節點下線為條件,滿足這個數量就將主節點標記為客觀下線;例:sentinel monitor mymaster 127.0.0.1 6388 2,意思就是當有兩個哨兵都認為監控的mymaster主節點下線了,就將此主節點標記為客觀下線;則可以進行下一步故障轉移操作了;
  • sentinel auth-pass : 設置主節點和從節點的連接密碼,這里只能統一設置,所以主節點和從節點的密碼要一樣;
  • sentinel down-after-milliseconds : 設置失聯時間,單位為毫秒,默認為30秒,如果哨兵在30秒內沒有接收到主節點的應答,就認為主節點異常了,并將其標記為主觀下線;
  • sentinel parallel-syncs : 故障轉移之后,在新的主從關系下,同時有多少個從節點向主節點要求進行數據同步; 默認設置是1,即一個一個同步,這樣可以減少主節點同步壓力;如果主節點機器性能允許,可以適當增加數量;
  • sentinel failover-timeout : 用于故障轉移超時過程判斷,默認設置為180000,即3分鐘;
  • sentinel notification-script : 設置腳本路徑; 哨兵有任何警告級別時間發生時都會執行這個腳本,可以通過該腳本實現郵件等信息通知;

連接哨兵常用的命令

  • info sentinel:獲取監控的主節點信息;
  • sentinel masters:獲取監控主節點的詳細信息;
  • sentinel master :上面我們指定的是mymaster,信息和上面類似;
  • sentinel get-master-addr-by-name :根據指定的名稱獲取ip地址和端口信息,上面我們指定的名稱是mymaster;
  • sentinel is-master-down-by-addr:查看監控的主節點是否下線,哨兵之間判斷主節點是否下線原理就是通過此命令;
  • sentinel slaves :獲取監控主節點的從節點信息;上面我們指定的是mymaster
  • sentinel failover :該命令可以 強制對指定監控執行故障轉移 ,即便當前的主節點運行完好也能執行;例如,需要換掉當前監控的主節點,便可以提前通過failover命令進行故障轉移;上面我們指定的名稱是mymaster;

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

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

相關文章

閏秒導致MySQL服務器的CPU sys過高

今天,有個哥們碰到一個問題,他有一個從庫,只要是啟動MySQL,CPU使用率就非常高,其中sys占比也比較高,具體可見下圖。 注意:他的生產環境是物理機,單個CPU,4個Core。 于是&…

position定位——讓人又愛又恨的屬性

關于css中的position這個屬性,在使用的時候,有時很強大,有時又讓人很無奈。 強大的時候,對于div中的一些小物件不方便使用margin或者padding的時候,給與position:absolute;再配備left、right、top和bottom,…

CentOS 6.8安裝Python2.7.13

轉載自:http://www.cnblogs.com/94YY/p/6224441.html查看當前系統中的 Python 版本python --version返回 Python 2.6.6 為正常。檢查 CentOS 版本cat /etc/redhat-release返回 CentOS release 6.8 (Final) 為正常。安裝所有的開發工具包yum groupinstall -y "D…

新安裝數據庫sqlserver2008r2,使用javaweb連接不上問題處理

鼠標右鍵【計算機】--》【管理】,打開界面如下: 選擇自己數據庫的實例名: 選擇TCP/IP:右鍵【屬性】,將所有TCP動態端口的【0】刪掉,TCP端口設為1433;重啟服務,即可連接。PS:不知道這…

vue 鼠標點擊事件_VBA代碼解決方案第115講:點擊鼠標實現精準控制觸發事件的VBA代碼第二方案...

大家好,我們今日繼續講解VBA代碼解決方案的第115講內容:工作表事件中,根據Target參數不同,實現精準控制觸發事件的VBA代碼第二方案。在上一講中我們講了利用Address的屬性實現控制觸發事件的方案,今日講解第二方案&…

mysql注入5.0以上_[Injection]對MYSQL 5.0服務器以上版本注入

How to do a SQL Injection for MYSQL Server 5.01. Find a vulnerable add a ‘ at the end of the site example: news.php?id1 add a ‘ at the end of the 1 and see if you get a syntax error2. order by #–Keep upping the # until you get an error.3. union all sel…

動態規劃(制表法)模板及應用

int cache[100][100] 初始化為全體為 -1,這樣在 cache 中存儲的可以是其他任意非負整數,也可以是布爾類型 0/1 (true/false),1. 模板 int cache[2500][2500];// 初始化為 -1,memset(cache, -1, sizeof(cach…

(翻譯)31天Windows Phone學習-1-項目模板

今天在在外文網站Google關于Windows Phone 7的學習資料,無疑間Google到了Jeff Blankenburg的 31 Days of Windows Phone這個系列,感覺寫的比較基礎和淺顯易懂,適合我這種入們級的人學習,所以準備拿來對Windows Phone 7的簡單入門學…

Mssql 跨域查詢

有數據庫test1和數據庫test2。其中test1中有表 table1、table2;test2 中有表 table1。三個表的字段都為為:id、xingming、shijian、shuliang。接下來我們就以上面的條件為例來介紹跨數據庫查詢和跨表 查詢的方法。 SELECT * FROM OPENROWSET(sqloledb…

arch mysql日志位置_MySQL 日志文件與相關參數

1 、參數文件及mysql參數查看mysql 的 my.cnf 配置文件位置命令:>./bin/mysql --help | grep my.cnf查看mysql 的參數設置命令: mysql > show variables --顯示所有參數; // show variables like log_error% 顯示某匹配參數mysql > select se…

MOSS點滴(2):自定義Application Page

在MOSS中后臺管理的頁面都是Application Page,比如網站設置的頁面(settings.aspx)就是典型的Application Page,它不能被Sharepoint Desiger定制。如果我們要修改只能手動的使用其他工具來修改,我們也可以添加Application Page,必須…

wpf使用webbrowser時提示當前頁面腳本發生錯誤_win7系統internet腳本錯誤的應對辦法...

最近有win7系統用戶反饋,上網時遇到ie瀏覽器總會提示internet腳本錯誤的問題,不知如何解決,為此非常苦惱,那么win7系統提示internet腳本錯誤怎么辦呢?就此問題,下面小編教你win7系統internet腳本錯誤的應對辦法。有不…

JDK的目錄結構及結構圖

-bin目錄: JDK開發工具的可執行文件 -lib目錄: 開發工具使用的歸檔包文件 -jre: Java 運行時環境的根目錄,包含Java虛擬機,運行時的類包和Java應用啟動器, 但不包含開發環境中的開發工具 -demo: 含有源代碼的程序示例 -include: 包含…

java9-1.類,抽象類,接口的綜合小練習

1 /*2 教練和運動員案例(學生分析然后講解)3 乒乓球運動員和籃球運動員。4 乒乓球教練和籃球教練。5 為了出國交流,跟乒乓球相關的人員都需要學習英語。6 請用所學知識:7 分析,這個案例中有哪些抽象類,哪些接…

java發送c語言結構體_C語言中結構體直接賦值?

在C語言中結構體變量之間可以進行賦值操作嗎?簡單結構體的賦值先說結論:一般來說,C語言中的結構體變量可以用另一個變量對其進行賦值或初始化。簡單結構體(不包含指針成員)直接賦值沒有問題。我們先下面一段代碼:#include #includ…

Cacti 使用安裝詳解-企業級實例

Cacti是一套基于PHP,MySQL,SNMP及RRDTool開發的網絡流量監測圖形分析工具。Cacti是通過 snmpget來獲取數據,使用 RRDtool繪畫圖形,它提供了非常強大的數據和用戶管理功能,可以指定每一個用戶能查看樹狀結構、host以及任何一張圖,還…

MySQL 插入數據時,中文亂碼???問題的解決

在終端,mysql -u root -p 登錄; show variables like character%; 來查看當前數據庫的相關編碼集。 client為客戶端使用的字符集。connection為連接數據庫的字符集設置類型,如果程序沒有指明連接數據庫使用的字符集類型則按照服務器端默認的字…

mysql時間間隔interval_MySQL DATEDIFF函數獲取兩個日期的時間間隔的方法

描述返回兩個日期之間的時間間隔。語法DateDiff(interval, date1, date2 [ ,firstdayofweek[ , firstweekofyear]] )DateDiff 函數的語法有以下參數:參數描述interval必選。字符串表達式,表示用于計算 date1 和 date2 之間的時間間隔。有關數值&#xff…

linux教程:配置Tomcat開機啟動

我們在linux下安裝好tomcat之后;經常是需要配置到開機啟動的; 這樣的話就不需要我們每次重啟linux服務器之后自己在登陸運行startup.sh文件啟動tomcat了 本次的演示環境是在centos7中完成的;也在centos6.5中測試過;理論上所有版本…

操作系統內存分配算法_操作系統基礎45-伙伴系統和slab內存分配

當在用戶模式下運行進程請求額外內存時,從內核維護的空閑頁幀列表上分配頁面。這個列表通常使用頁面置換算法來填充,如前所述,它很可能包含散布在物理內存中的空閑頁面。也要記住,如果用戶進程請求單個字節內存,那么就…