亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Redis哨兵模式實(shí)現(xiàn)一主二從三哨兵

 更新時(shí)間:2022年07月04日 10:26:17   作者:這個(gè)名字先用著  
本文主要介紹了Redis哨兵模式實(shí)現(xiàn)一主二從三哨兵,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、redis環(huán)境:

環(huán)境:redis6.2.6
linux虛擬機(jī)一臺(tái),contos7;

二、哨兵介紹:

1.一主二從三哨兵理論圖:

一主兩從三哨兵集群,當(dāng)master節(jié)點(diǎn)宕機(jī)時(shí),通過哨兵(sentinel)重新推選出新的master節(jié)點(diǎn),保證集群的可用性。

2.哨兵的主要功能:
1.集群監(jiān)控:負(fù)責(zé)監(jiān)控 Redis master 和 slave 進(jìn)程是否正常工作。
2.消息通知:如果某個(gè) Redis 實(shí)例有故障,那么哨兵負(fù)責(zé)發(fā)送消息作為報(bào)警通知給管理員。
3.故障轉(zhuǎn)移:如果 master node 掛掉了,會(huì)自動(dòng)轉(zhuǎn)移到 slave node 上。
4.配置中心:如果故障轉(zhuǎn)移發(fā)生了,通知 client 客戶端新的 master 地址。

PS:根據(jù)推舉機(jī)制,集群中哨兵數(shù)量最好為奇數(shù)(3、5…)

3.哨兵用于實(shí)現(xiàn) redis 集群的高可用,本身也是分布式的,作為一個(gè)哨兵集群去運(yùn)行,互相協(xié)同工作。

  • 故障轉(zhuǎn)移時(shí),判斷一個(gè) master node 是否宕機(jī)了,需要大部分的哨兵都同意才行,涉及到了分布式選舉的問題。
  • 即使部分哨兵節(jié)點(diǎn)掛掉了,哨兵集群還是能正常工作的,因?yàn)槿绻粋€(gè)作為高可用機(jī)制重要組成部分的故障轉(zhuǎn)移系統(tǒng)本身是單點(diǎn)的,那就很坑爹了。

4.哨兵的核心知識(shí):

  • 哨兵至少需要 3 個(gè)實(shí)例,來保證自己的健壯性。
  • 哨兵 + redis 主從的部署架構(gòu),是不保證數(shù)據(jù)零丟失的,只能保證 redis 集群的高可用性。
  • 對于哨兵 + redis 主從這種復(fù)雜的部署架構(gòu),盡量在測試環(huán)境和生產(chǎn)環(huán)境,都進(jìn)行充足的測試和演練。

三、安裝redis:

此處省略redis的安裝。

四、使用Redis主從復(fù)制的作用:

主從復(fù)制,是指將一臺(tái)Redis主節(jié)點(diǎn)服務(wù)器的數(shù)據(jù),復(fù)制到其他的Redis從節(jié)點(diǎn)服務(wù)器。

主節(jié)點(diǎn)稱為(master/leader),從節(jié)點(diǎn)稱為(slave/follower);

1,數(shù)據(jù)冗余:主從復(fù)制實(shí)現(xiàn)了數(shù)據(jù)的熱備份,這也是持久化實(shí)現(xiàn)的另一種方式。

2,故障恢復(fù):當(dāng)主節(jié)點(diǎn)出現(xiàn)問題時(shí),可以由從節(jié)點(diǎn)提供服務(wù),實(shí)現(xiàn)快速的故障恢復(fù);實(shí)際上是一種服務(wù)的冗余。

3,讀寫分離:master服務(wù)主要用來寫,slave服務(wù)主要用來讀數(shù)據(jù)??梢蕴岣叻?wù)器的負(fù)載能力,可以根據(jù)需求的變化,添加從節(jié)點(diǎn)的數(shù)量。

4,負(fù)載均衡:同時(shí)配合讀寫分離,由主節(jié)點(diǎn)提供寫服務(wù),從節(jié)點(diǎn)提供讀服務(wù),分擔(dān)服務(wù)器的負(fù)載。在寫少讀多的情況下,通過多個(gè)從節(jié)點(diǎn)分擔(dān)讀負(fù)載,能夠大大提高Redis服務(wù)的并發(fā)量和負(fù)載。

5,高可用的基石,主從復(fù)制是哨兵和集群模式能夠?qū)嵤┑幕A(chǔ)。

五、配置redis一主二從:

在正常的生產(chǎn)中我們是準(zhǔn)備多臺(tái)服務(wù)器,比如三臺(tái),每臺(tái)都在各自的linux系統(tǒng)中安裝redis。

但是此處為了演示方便,我使用一臺(tái)電腦安裝虛擬機(jī),在虛擬機(jī)上安裝三份redis服務(wù),來模擬一主二從的效果。

第一步:修改原redis.conf配置文件:

redis.conf配置文件采用默認(rèn)的混合持久化,也可以采用單獨(dú)的RDB持久化,因?yàn)橹鲝膹?fù)制的本質(zhì)是RDB方式,所以要有RDB方式參與即可。

原redis.conf配置文件需要修改的幾個(gè)地方:

1.先在網(wǎng)絡(luò)部分注釋掉單機(jī)連接那一行,即注釋掉bind 127.0.0.1 
2.同樣我們要將后臺(tái)運(yùn)行打開:daemonize no,設(shè)置為yes。
3.將 保護(hù)模式關(guān)閉:protected-mode yes 改為:protected-mode no 


4.打開RDB持久化配置:
#RDB持久化策略 默認(rèn)三種方式,[900秒內(nèi)有1次修改],
#[300秒內(nèi)有10次修改],[60秒內(nèi)有10000次修改]即觸發(fā)RDB持久化,
#我們可以手動(dòng)修改該參數(shù)或新增策略
save 900 1
save 300 10
save 60 10000 
#RDB文件名
dbfilename dump.rdb
#RDB文件存儲(chǔ)路徑
dir ./
策略配置:
#在seconds秒內(nèi)有changes次數(shù)據(jù)修改就觸發(fā)RDB持久化


5.開啟AOF持久化配置
appendonly yes
#AOF文件名
appendfilename "appendonly.aof"
#AOF文件存儲(chǔ)路徑 與RDB是同一個(gè)參數(shù),共用一個(gè)文件路徑
dir ./  #即bin目錄下
#AOF策略,一般都是選擇第一種[always:每個(gè)命令都記錄],
#[everysec:每秒記錄一次],[no:看機(jī)器的心情高興了就記錄,linux一般半個(gè)小時(shí)同步一次]
#appendfsync always
appendfsync everysec
# appendfsync no
#aof文件大小比起上次重寫時(shí)的大小,增長100%(配置可以大于100%)時(shí),觸發(fā)重寫。
#[假如上次重寫后大小為10MB,當(dāng)AOF文件達(dá)到20MB時(shí)也會(huì)再次觸發(fā)重寫,以此類推
auto-aof-rewrite-percentage 100 
#aof文件大小超過64MB*2時(shí),觸發(fā)重寫,
#為何要乘以2,因?yàn)閍uto-aof-rewrite-percentage 100 是翻倍即100%,
#達(dá)到翻倍時(shí)才重寫
auto-aof-rewrite-min-size 64mb 

6.打開混合持久化:
#6.aof-use-rdb-preamble yes # 檢查混合持久化是否打開,redis5.0后默認(rèn)開啟

第二步:將修改后的redis.conf配置文件復(fù)制出來三份:

1.進(jìn)入redis默認(rèn)的安裝路徑:cd /usr/local/bin
ll #查看文件夾內(nèi)容
cp redis.conf redis_bk.conf #盡量備份一個(gè)配置文件,防止修改錯(cuò)了,可以重新用
cp redis.conf redis6379.conf
cp redis.conf redis6380.conf
cp redis.conf redis6381.conf

第三步:分別修改三個(gè)配置文件:

vim redis6379.conf
修改的內(nèi)容:
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
vim redis6380.conf
修改的內(nèi)容:
pidfile /var/run/redis_6380.pid
port 6380
dbfilename dump6380.rdb
vim redis6381.conf
修改的內(nèi)容:
pidfile /var/run/redis_6381.pid
port 6381
dbfilename dump6381.rdb

redis啟動(dòng)前的準(zhǔn)備工作:

查看虛擬機(jī)防火墻是否關(guān)閉,需要關(guān)閉防火墻

1:查看防火狀態(tài)

systemctl status firewalld
service iptables status

2:暫時(shí)關(guān)閉防火墻

systemctl stop firewalld
service iptables stop

3:永久關(guān)閉防火墻

systemctl disable firewalld
chkconfig iptables off

關(guān)閉后再查看防火墻狀態(tài)

開放指定端口6379:

開放指定端口的方式一:
在linux中執(zhí)行: /sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
redis默認(rèn)端口號(hào)6379是不允許進(jìn)行遠(yuǎn)程連接的,所以在防火墻中設(shè)置6379開啟遠(yuǎn)程服務(wù);

開放指定端口的方式二:
先開啟防火墻才能開放指定端口的:systemctl start firewalld
firewall-cmd --zone=public --add-port=6379/tcp --permanent

第四步:啟動(dòng)三臺(tái)redis服務(wù)器,并查看是否啟動(dòng)成功:

redis-server redis6379.conf
redis-server redis6380.conf
redis-server redis6381.conf
ps -ef | grep redis

第五步:配置從庫不配置主庫 :

先連接上redis客戶端:

redis-cli -p 6380

然后將6380機(jī)器配置成從機(jī):

slaveof 主機(jī)ip 主機(jī)端口號(hào)
#slaveof 127.0.0.1 6379
info replication

然后將6381機(jī)器配置成從機(jī):

redis-cli -p 6381
#slaveof 主機(jī)ip 主機(jī)端口號(hào)
slaveof 127.0.0.1 6379
info replication

在主機(jī)查看從機(jī)信息:發(fā)現(xiàn)配置成功。

redis-cli -p 6379
info replication

六、配置redis三哨兵:

將官方自帶的sentinel.conf(此文件在redis的源碼目錄下,即解壓路徑下)復(fù)制到/usr/local/bin:

然后復(fù)制出來三份:

修改的內(nèi)容如下:

vim sentinel0.conf
文件修改內(nèi)容如下:
protected-mode no
daemonize yes
port 26379 #sentinel 端口
dir “/usr/local/bin”
sentinel monitor mymaster 127.0.0.1 6379 2

然后分別修改sentinel1.conf信息如下:

protected-mode no
daemonize yes
port 26380 # sentinel 端口,因?yàn)槲覀冊谝慌_(tái)虛擬機(jī)上,所以端口要不一樣
dir “/usr/local/bin”
sentinel monitor mymaster 127.0.0.1 6379 2 #這里的mymaster 兩個(gè)副本的要一樣,mymaster同一個(gè)主機(jī)名

然后分別修改sentinel2.conf信息如下:

protected-mode no
daemonize yes
port 26381 # sentinel 端口,因?yàn)槲覀冊谝慌_(tái)虛擬機(jī)上,所以端口要不一樣
dir “/usr/local/bin”
sentinel monitor mymaster 127.0.0.1 6379 2 #這里的mymaster 兩個(gè)副本的要一樣

配置文件詳解
哨兵的配置主要就是修改sentinel.conf配置文件中的參數(shù),在Redis安裝目錄即可看到此配置文件,各參數(shù)詳解如下:

# 哨兵sentinel實(shí)例運(yùn)行的端口,默認(rèn)26379  
port 26379
# 哨兵sentinel的工作目錄
dir ./
# 是否開啟保護(hù)模式,默認(rèn)開啟。
protected-mode:no
# 是否設(shè)置為后臺(tái)啟動(dòng)。
daemonize:yes

# 哨兵sentinel的日志文件
logfile:./sentinel.log

# 哨兵sentinel監(jiān)控的redis主節(jié)點(diǎn)的 
## ip:主機(jī)ip地址
## port:哨兵端口號(hào)
## master-name:可以自己命名的主節(jié)點(diǎn)名字
## quorum:當(dāng)這些quorum個(gè)數(shù)sentinel哨兵認(rèn)為master主節(jié)點(diǎn)失聯(lián) 那么這時(shí) 
#客觀上認(rèn)為主節(jié)點(diǎn)失聯(lián)了  
# sentinel monitor <master-name> <ip> <redis-port> <quorum>  
sentinel monitor mymaster 127.0.0.1 6379 2

# 當(dāng)在Redis實(shí)例中開啟了requirepass,所有連接Redis實(shí)例的客戶端都要提供密碼。
# sentinel auth-pass <master-name> <password>  
sentinel auth-pass mymaster 123456  

# 指定主節(jié)點(diǎn)應(yīng)答哨兵sentinel的最大時(shí)間間隔,超過這個(gè)時(shí)間,哨兵主觀上認(rèn)為主節(jié)點(diǎn)下線,
#默認(rèn)30秒  
# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 30000  

# 指定了在發(fā)生failover主備切換時(shí),最多可以有多少個(gè)slave同時(shí)對新的master進(jìn)行同步。
#這個(gè)數(shù)字越小,完成failover所需的時(shí)間就越長;反之,但是如果這個(gè)數(shù)字越大,就意味著
#越多的slave因?yàn)閞eplication而不可用??梢酝ㄟ^將這個(gè)值設(shè)為1,來保證每次只有一個(gè)slave,
#處于不能處理命令請求的狀態(tài)。
# sentinel parallel-syncs <master-name> <numslaves>
sentinel parallel-syncs mymaster 1  

# 故障轉(zhuǎn)移的超時(shí)時(shí)間failover-timeout,默認(rèn)三分鐘,可以用在以下這些方面:
## 1. 同一個(gè)sentinel對同一個(gè)master兩次failover之間的間隔時(shí)間。  
## 2. 當(dāng)一個(gè)slave從一個(gè)錯(cuò)誤的master那里同步數(shù)據(jù)時(shí)開始,直到slave被糾正為從正確
#的master那里同步數(shù)據(jù)時(shí)結(jié)束。  
## 3. 當(dāng)想要取消一個(gè)正在進(jìn)行的failover時(shí)所需要的時(shí)間。
## 4.當(dāng)進(jìn)行failover時(shí),配置所有slaves指向新的master所需的最大時(shí)間。不過,
#即使過了這個(gè)超時(shí),slaves依然會(huì)被正確配置為指向master,
但是就不按parallel-syncs所配置的規(guī)則來同步數(shù)據(jù)了
# sentinel failover-timeout <master-name> <milliseconds>  
sentinel failover-timeout mymaster 180000

# 當(dāng)sentinel有任何警告級(jí)別的事件發(fā)生時(shí)(比如說redis實(shí)例的主觀失效和客觀失效等等),
#將會(huì)去調(diào)用這個(gè)腳本。一個(gè)腳本的最大執(zhí)行時(shí)間為60s,如果超過這個(gè)時(shí)間,
#腳本將會(huì)被一個(gè)SIGKILL信號(hào)終止,之后重新執(zhí)行。
# 對于腳本的運(yùn)行結(jié)果有以下規(guī)則:  
## 1. 若腳本執(zhí)行后返回1,那么該腳本稍后將會(huì)被再次執(zhí)行,重復(fù)次數(shù)目前默認(rèn)為10。
## 2. 若腳本執(zhí)行后返回2,或者比2更高的一個(gè)返回值,腳本將不會(huì)重復(fù)執(zhí)行。  
## 3. 如果腳本在執(zhí)行過程中由于收到系統(tǒng)中斷信號(hào)被終止了,則同返回值為1時(shí)的行為相同。
# sentinel notification-script <master-name> <script-path>  
sentinel notification-script mymaster /var/redis/notify.sh

# 這個(gè)腳本應(yīng)該是通用的,能被多次調(diào)用,不是針對性的。
# sentinel client-reconfig-script <master-name> <script-path>
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh

最后是先啟動(dòng)三個(gè)服務(wù),然后起送三個(gè)哨兵,然后客戶端;
啟動(dòng)哨兵:

redis-sentinel sentinel0.conf
redis-sentinel sentinel1.conf
redis-sentinel sentinel2.conf

啟動(dòng)后查看sentinel信息:redis-cli -p sentinel的端口號(hào)

redis-cli -p 26379
info sentinel

 到此這篇關(guān)于Redis哨兵模式實(shí)現(xiàn)一主二從三哨兵的文章就介紹到這了,更多相關(guān)Redis 一主二從三哨兵內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • RedisTemplate訪問Redis的更好方法

    RedisTemplate訪問Redis的更好方法

    這篇文章主要為大家介紹了RedisTemplate訪問Redis的更好方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • redis批量刪除指定前綴key四種方法(收藏)

    redis批量刪除指定前綴key四種方法(收藏)

    這篇文章主要介紹了redis批量刪除指定前綴key四種方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-03-03
  • Redis的持久化詳解

    Redis的持久化詳解

    Redis是一個(gè)基于內(nèi)存的數(shù)據(jù)庫,它的數(shù)據(jù)是存放在內(nèi)存中,內(nèi)存有個(gè)問題就是關(guān)閉服務(wù)或者斷電會(huì)丟失,Redis的數(shù)據(jù)也支持寫到硬盤中,這個(gè)過程就叫做持久化,文中有詳細(xì)的圖介紹,需要的朋友可以參考下
    2023-06-06
  • redis哈希和集合_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    redis哈希和集合_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了redis哈希和集合的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Redis過期數(shù)據(jù)是否會(huì)被立馬刪除

    Redis過期數(shù)據(jù)是否會(huì)被立馬刪除

    這篇文章主要為大家介紹了Redis過期數(shù)據(jù)會(huì)被立馬刪除么的問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 利用Redis實(shí)現(xiàn)訪問次數(shù)限流的方法詳解

    利用Redis實(shí)現(xiàn)訪問次數(shù)限流的方法詳解

    這篇文章主要給大家介紹了關(guān)于如何利用Redis實(shí)現(xiàn)訪問次數(shù)限流的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-02-02
  • redis-cli 使用密碼登錄的實(shí)例

    redis-cli 使用密碼登錄的實(shí)例

    今天小編就為大家分享一篇redis-cli 使用密碼登錄的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • redis緩存數(shù)據(jù)庫中數(shù)據(jù)的方法

    redis緩存數(shù)據(jù)庫中數(shù)據(jù)的方法

    這篇文章主要為大家詳細(xì)介紹了redis緩存數(shù)據(jù)庫中數(shù)據(jù)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Redis?中ZSET數(shù)據(jù)類型命令使用及對應(yīng)場景總結(jié)(案例詳解)

    Redis?中ZSET數(shù)據(jù)類型命令使用及對應(yīng)場景總結(jié)(案例詳解)

    這篇文章主要介紹了Redis?中ZSET數(shù)據(jù)類型命令使用及對應(yīng)場景總結(jié),本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • 基于Redis實(shí)現(xiàn)阻塞隊(duì)列的方式

    基于Redis實(shí)現(xiàn)阻塞隊(duì)列的方式

    本文主要講解基于?Redis?的方式實(shí)現(xiàn)異步隊(duì)列,基于?Redis?的?list?實(shí)現(xiàn)隊(duì)列的方式也有多種,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2021-12-12

最新評(píng)論