<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          吃透Redis系列:高可用的哨兵模式

          共 4103字,需瀏覽 9分鐘

           ·

          2024-04-16 11:39

          歡迎關(guān)注微信公眾號:互聯(lián)網(wǎng)全棧架構(gòu)

          哨兵模式介紹


          哨兵模式(Sentinel)是Redis提供的高可用解決方案,作為一個分布式系統(tǒng),它包含了多個Sentinel節(jié)點(diǎn)和Redis節(jié)點(diǎn),這些Sentinel節(jié)點(diǎn)會監(jiān)控Redis節(jié)點(diǎn)的狀態(tài)(通常為主從復(fù)制),如果發(fā)現(xiàn)master節(jié)點(diǎn)不可用時,會自動將其中一個slave節(jié)點(diǎn)提升為master節(jié)點(diǎn),從而實現(xiàn)了自動故障轉(zhuǎn)移。

          總體來講,哨兵模式的主要功能有如下幾個方面:

          監(jiān)控:Sentinel會不斷檢查Redis的主、從服務(wù)器是否正常工作;

          通知:如果Redis實例有故障,會通知到系統(tǒng)管理員或者相關(guān)程序;

          自動故障轉(zhuǎn)移:如果主節(jié)點(diǎn)不可用,自動把其中一個從節(jié)點(diǎn)提升為主節(jié)點(diǎn);

          配置提供者:如果發(fā)生了故障轉(zhuǎn)換,把新的master地址通知到客戶端。
          Redis哨兵的架構(gòu)圖如下:

          環(huán)境搭建


          接下來我們演示一下Redis哨兵模式的搭建,為了簡化起見,哨兵只有一個實例,而Redis服務(wù)器有三個,分別為一主兩從。同時,都在一臺服務(wù)器上搭建,如果在正式的生產(chǎn)環(huán)境,需要在不同的服務(wù)器上進(jìn)行配置,這樣才能實現(xiàn)真正的高可用,不管是在一臺或者多臺服務(wù)器上搭建,操作步驟和配置項幾乎完全一樣。

          一、搭建三個Redis服務(wù)

          先搭建三個Redis服務(wù),一主兩從,因為是在一臺服務(wù)器上操作,通過端口來區(qū)分不同的服務(wù),分別為6379、6380、6381,拷貝三份Redis配置文件,按照redis_6379.conf這樣的方式命名。修改的主要信息如下:

          port 6379
          pidfile /var/run/redis_6379.pid
          logfile "6379.log"
          dbfilename "dump6379.rdb"

          分別啟動三個服務(wù)和客戶端:

          ./redis-server redis_6379.conf &
          ./redis-server redis_6380.conf &
          ./redis-server redis_6381.conf &

          ./redis-cli -h 127.0.0.1 -p 6379
          ./redis-cli -h 127.0.0.1 -p 6380
          ./redis-cli -h 127.0.0.1 -p 6381

          把端口為6380和6381的服務(wù),設(shè)置為6379的從服務(wù)器。在新版本中也可以使用命令replicaof,在客戶端執(zhí)行下面的命令(也可以寫在配置文件中):

          slaveof 127.0.0.1 6379

          在6380上執(zhí)行info replication,它已經(jīng)成了從服務(wù)器

          127.0.0.1:6380> info replication
          # Replication
          role:slave
          master_host:127.0.0.1
          master_port:6379
          master_link_status:up
          master_last_io_seconds_ago:6
          master_sync_in_progress:0
          slave_read_repl_offset:14
          slave_repl_offset:14
          slave_priority:100
          slave_read_only:1
          replica_announced:1
          connected_slaves:0
          master_failover_state:no-failover
          master_replid:4f5754021bbd189c622c14321af8d80840432bd7
          master_replid2:0000000000000000000000000000000000000000
          master_repl_offset:14
          second_repl_offset:-1
          repl_backlog_active:1
          repl_backlog_size:1048576
          repl_backlog_first_byte_offset:1
          repl_backlog_histlen:14

          另外,如果主服務(wù)器需要密碼,還需要在配置文件.conf中加上masterauth的配置項。

          這樣,一主兩從的服務(wù)就搭建好了,在主服務(wù)器上執(zhí)行一些命令,可以看到,它的數(shù)據(jù)也同步到了兩臺從服務(wù)器上。

          二、搭建哨兵服務(wù)

          創(chuàng)建配置文件:sentinel.conf

          port 26379

          # sentinel monitor <master-name> <ip> <port> <quorum>
          # master-name: 被監(jiān)控的redis master名稱
          # quorum: 認(rèn)定master下線的哨兵個數(shù)
          sentinel monitor redis_6379 127.0.0.1 6379 1

          # redis master的密碼
          sentinel auth-pass redis_6379 123456

          # 判定主觀下線的時間長度,單位為毫秒
          sentinel down-after-milliseconds redis_6379 5000

          測試


          環(huán)境搭建好了,我們來測試一下,先啟動哨兵服務(wù):

          ./redis-sentinel sentinel.conf

          在日志里面可以看到,選舉6379端口的redis服務(wù)為master:

          在6380、6381客戶端執(zhí)行命令info replication,也可以看出它們是從服務(wù)器,而6379是master。

          接下來我們把6379的服務(wù)關(guān)掉,直接在對應(yīng)的客戶端執(zhí)行shutdown,在6380的客戶端看看它的復(fù)制信息(info replication):

          127.0.0.1:6380> info replication
          # Replication
          role:master
          connected_slaves:1
          slave0:ip=127.0.0.1,port=6381,state=online,offset=60102,lag=0
          master_failover_state:no-failover
          master_replid:78b90907468c5721834570114a74ff9bcce302c5
          master_replid2:fb94f4afa0b3535b79e54f9287f60150b76cd9d5
          master_repl_offset:60102
          second_repl_offset:2694
          repl_backlog_active:1
          repl_backlog_size:1048576
          repl_backlog_first_byte_offset:1
          repl_backlog_histlen:60102

          發(fā)現(xiàn)6380端口對應(yīng)的服務(wù)已經(jīng)成為了master,對6381是其對應(yīng)的slave,如果再把6379的服務(wù)啟動起來,它也成為了6380的slave。

          可以看出,Redis的哨兵模式可以進(jìn)行自動故障轉(zhuǎn)換,當(dāng)master宕機(jī)以后,自動把其中的一個slave提升為master,從而繼續(xù)對外提供服務(wù),當(dāng)然,這樣的切換需要一定的時間。

          總結(jié)


          哨兵模式是Redis提供的一個高可用架構(gòu),它有一組專門的哨兵進(jìn)程來監(jiān)控Redis主從節(jié)點(diǎn),并在發(fā)現(xiàn)故障后自動進(jìn)行轉(zhuǎn)移,從而實現(xiàn)了Redis服務(wù)的高可用,系統(tǒng)的健壯性也更高。

          然而,哨兵模式也有它的缺點(diǎn),比如增加維護(hù)成本,容量有限等,相應(yīng)地,Redis官方還提供集群模式,我們會在后續(xù)的文章中進(jìn)行介紹,敬請期待。

          創(chuàng)作不易,煩請點(diǎn)贊分享,感謝!

          鳴謝:
          https://www.cnblogs.com/wanghuizhao/p/17521636.html


          推薦閱讀:

          吃透Redis系列:數(shù)據(jù)持久化

          吃透Redis系列:琳瑯滿目的數(shù)據(jù)類型(下篇,文末彩蛋)

          吃透Redis系列:琳瑯滿目的數(shù)據(jù)類型(上篇)

          吃透Redis系列:總體介紹

          離大譜,MySQL竟然無視空格的存在!

          瀏覽 160
          10點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          10點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费在线一级黄色电影网站 | 色播激情 | 亚洲AV成人无码网天堂 | a无吗在线观看 | 最新黄色做爱在钱网站 |