redis搭建哨兵集群的實(shí)現(xiàn)步驟
redis安裝部署
環(huán)境說(shuō)明:
redis使用的是6.2.6版本
主機(jī) | IP | 系統(tǒng) |
---|---|---|
master | 192.168.129.136 | redhat8 |
slave | 192.168.182.135 | redhat8 |
slave2 | 192.168.182.134 | redhat8 |
準(zhǔn)備工作
// 三臺(tái)主機(jī)都要做 [root@master opt] wget https://download.redis.io/releases/redis-6.2.6.tar.gz //三臺(tái)主機(jī)都做 [root@master opt]# tar -zxf redis-6.2.6.tar.gz? //編譯安裝 [root@master redis-6.2.6]# pwd ?//進(jìn)入redis目錄 /opt/redis-6.2.6 [root@master redis-6.2.6]# yum -y install gcc gcc-c++ ?//安裝c語(yǔ)言編譯器 [root@master redis-6.2.6]# yum -y install make ?//安裝make編譯器 [root@master redis-6.2.6]# make MALLOC=libc ?
配置環(huán)境變量
// redis的二進(jìn)制文件放在src目錄下 [root@master redis-6.2.6]# cat /etc/profile.d/redis.sh ? //為了能直接使用redis命令 export PATH=/opt/redis-6.2.6/src:$PATH [root@master redis-6.2.6]# source /etc/profile.d/redis.sh ?//使其生效 //啟動(dòng)redis 啟動(dòng)方式有以下兩種: [root@master redis-6.2.6]# vim redis.conf 257 daemonize yes //把no改為yes 啟動(dòng)一: [root@master src]# ./redis-server ?//不建議用這種方式啟動(dòng) [root@master redis-6.2.6]# redis-server /opt/redis-6.2.6/redis.conf ?//推薦使用這種方式 啟動(dòng)二: [root@master opt]# cat /usr/lib/systemd/system/redis.service? [Unit] Description=redis server daemon After=network.target [Service] Type=forking ExecStart=/opt/redis-6.2.6/src/redis-server /opt/redis-6.2.6/redis.conf ExecStop=/bin/kill -s QUIT $MAINPID ExecReload=/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target [root@master opt]# systemctl daemon-reload [root@master opt]# systemctl enable --now redis.service [root@master opt]# ss -anlt | awk -F " ?*|:" 'NR==2{print $5}' ? //看到6379端口號(hào)說(shuō)明成功 6379 進(jìn)入客戶端的命令 redis-cli -p 6379? 127.0.0.1:6379> [root@master redis-6.2.6]# redis-cli -p 6379 shutdown ?//關(guān)閉redis服務(wù)
以上操作三臺(tái)主機(jī)都需要做
redis集群架構(gòu)
現(xiàn)在所部署的哨兵集群是基于redis主從的基礎(chǔ)上的,整體架構(gòu)如下:
一個(gè)主節(jié)點(diǎn)(master)可擁有多個(gè)從節(jié)點(diǎn)(slave),從節(jié)點(diǎn)實(shí)現(xiàn)對(duì)主節(jié)點(diǎn)的復(fù)制,保證數(shù)據(jù)同步。而哨兵(sentinel)則對(duì)各節(jié)點(diǎn)進(jìn)行監(jiān)控,主要包括主節(jié)點(diǎn)存活檢測(cè)、主從運(yùn)行情況檢測(cè)等,一旦主節(jié)點(diǎn)宕機(jī),哨兵可自動(dòng)進(jìn)行故障轉(zhuǎn)移 (failover)、主從切換。
配置redis主從
修改redis配置文件
建議在修改配置文件之前寫備份
//在master要做的事 [root@master redis-6.2.6]# mkdir logs 75 bind 192.168.129.136 //本機(jī)IP地址 94 protected-mode no 302 logfile "/opt/redis-6.2.6/logs/redis.log"
注意replicaof指定master的IP地址和端口號(hào),在老版本上要做的事 slaveof
//在slave2上要做的事 [root@slave2 redis-6.2.6]# vim redis.conf 75 bind 192.168.129.135 ?//本機(jī)IP 477 ? replicaof 192.168.129.136 6379 ?master的IP和端口號(hào) //在slave2上要做的事 [root@slave2 redis-6.2.6]# vim redis.conf 75 bind 192.168.129.135 ?//本機(jī)IP 477 ? replicaof 192.168.129.136 6379 ?master的IP和端口號(hào)
注意修改完配置文件之后需要重啟redis服務(wù)才能生效
測(cè)試主從
[root@master redis-6.2.6]# redis-cli -h 192.168.129.136 -p 6379 192.168.129.136:6379> set name tom ?// 設(shè)置一個(gè)value值 OK [root@slave ~]# redis-cli -h 192.168.129.135 ?//這里也可以不指定端口號(hào),因?yàn)閞edis默認(rèn)使用的事6379端口號(hào) 192.168.129.135:6379> get name "tom" [root@slave2 redis-6.2.6]# redis-cli -h 192.168.129.134 192.168.129.134:6379> get name "tom" ###主從同步成功
搭建redis哨兵集群
哨兵集群詳解:
Redis Sentinel是Redis 的高可用性解決方案由一個(gè)或多個(gè)Sentinel(哨兵)實(shí)例組成。它可以監(jiān)視任意多個(gè)主服務(wù)器,以及這些主服務(wù)器屬下的所有從服務(wù)器,并在被監(jiān)視的主服務(wù)器進(jìn)入下線狀態(tài)時(shí),自動(dòng)將下線主服務(wù)器屬下的某個(gè)從服務(wù)器升級(jí)為新的主服務(wù)器,它的主要功能如下:
- 監(jiān)控: Sentinel會(huì)不斷地檢查你的主服務(wù)器和從服務(wù)器是否運(yùn)作正常。
- 通知:當(dāng)被監(jiān)控的某個(gè) Redis 服務(wù)器出現(xiàn)問(wèn)題時(shí), Sentinel可以通過(guò)API向管理員或者其他應(yīng)用程序發(fā)送通知。
- 故障遷移:當(dāng)主服務(wù)器不能正常工作時(shí),Sentinel會(huì)自動(dòng)進(jìn)行故障遷移,也就是主從切換。
- 統(tǒng)一的配置管理:連接者詢問(wèn)sentinel取得主從的地址。
哨兵集群原理
Sentinel 使用的算法核心是 Raft 算法,主要用途就是用于分布式系統(tǒng),系統(tǒng)容錯(cuò),以及Leader選舉,每個(gè)Sentinel都需要定期的執(zhí)行以下任務(wù):
- 每個(gè) Sentinel 會(huì)自動(dòng)發(fā)現(xiàn)其他 Sentinel 和從服務(wù)器,它以每秒鐘一次的頻率向它所知的主服務(wù)器、從服務(wù)器以及其他 Sentinel 實(shí)例發(fā)送一個(gè) PING 命令。
- 如果一個(gè)實(shí)例(instance)距離最后一次有效回復(fù) PING 命令的時(shí)間超過(guò) down-after-milliseconds 選項(xiàng)所指定的值, 那么這個(gè)實(shí)例會(huì)被 Sentinel 標(biāo)記為主觀下線。 有效回復(fù)可以是: +PONG 、 -LOADING 或者 -MASTERDOWN 。
- 如果一個(gè)主服務(wù)器被標(biāo)記為主觀下線, 那么正在監(jiān)視這個(gè)主服務(wù)器的所有Sentinel要以每秒一次的頻率確認(rèn)主服務(wù)器的確進(jìn)入了主觀下線狀態(tài)。
- 如果一個(gè)主服務(wù)器被標(biāo)記為主觀下線, 并且有足夠數(shù)量的Sentinel(至少要達(dá)到配置文件指定的數(shù)量)在指定的時(shí)間范圍內(nèi)同意這一判斷, 那么這個(gè)主服務(wù)器被標(biāo)記為客觀下線。
- 在一般情況下, 每個(gè)Sentinel會(huì)以每 10 秒一次的頻率向它已知的所有主服務(wù)器和從服務(wù)器發(fā)送 INFO 命令。 當(dāng)一個(gè)主服務(wù)器被Sentinel標(biāo)記為客觀下線時(shí),Sentinel向下線主服務(wù)器的所有從服務(wù)器發(fā)送 INFO 命令的頻率會(huì)從 10 秒一次改為每秒一次。
- 當(dāng)沒(méi)有足夠數(shù)量的Sentinel同意主服務(wù)器已經(jīng)下線, 主服務(wù)器的客觀下線狀態(tài)就會(huì)被移除。 當(dāng)主服務(wù)器重新向Sentinel的 PING 命令返回有效回復(fù)時(shí), 主服務(wù)器的主管下線狀態(tài)就會(huì)被移除。
哨兵集群
// 三臺(tái)主機(jī)做同樣的操作 [root@master redis-6.2.6]# vim sentinel.conf 26 daemonize yes 36 logfile "/opt/redis-6.2.6/logs/sentinel.conf" 84 sentinel monitor mymaster 192.168.129.136 6379 2 [root@master ~]# redis-sentinel /opt/redis-6.2.6/sentinel.conf //啟動(dòng)哨兵 // 查看哨兵信息 [root@master ~]# redis-cli -h 192.168.129.136 -p 26379 192.168.129.136:26379> info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=192.168.129.136:6379,slaves=2,sentinels=3 [root@slave ~]# redis-cli -h 192.168.129.135 -p 26379 192.168.129.135:26379> info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=192.168.129.136:6379,slaves=2,sentinels=3 [root@slave2 ~]# redis-cli -h 192.168.129.134 -p 26379 192.168.129.134:26379> info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=192.168.129.136:6379,slaves=2,sentinels=3
模擬主機(jī)故障,進(jìn)行容災(zāi)切換
[root@master ~]# systemctl stop redis.service ?//關(guān)閉redis服務(wù) [root@master redis-6.2.6]# ps -ef | grep redis ?//使用此命令找到sentinel進(jìn)程,然后再kill掉sentinel的進(jìn)程 //因?yàn)橹鳈C(jī)切換到了144主機(jī),因此原來(lái)主機(jī)的配置文件也會(huì)隨之更改,所以在137啟動(dòng)前需要更改配置文件,將其配置成144的從機(jī): [root@master redis-6.2.6]# vim redis.conf 477 ? replicaof 192.168.129.134 6379 [root@master redis-6.2.6]# redis-server /opt/redis-6.2.6/redis.conf //啟動(dòng)redis服務(wù) [root@master redis-6.2.6]# systemctl restart redis.service ?//也可以使用此命令啟動(dòng)redis服務(wù) [root@master redis-6.2.6]# redis-sentinel /opt/redis-6.2.6/sentinel.conf ?//啟動(dòng)sentinel服務(wù) ##至此哨兵集群搭建完畢
到此這篇關(guān)于redis搭建哨兵集群的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)redis 哨兵集群內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
redis實(shí)現(xiàn)簡(jiǎn)單分布式鎖
這篇文章主要介紹了redis實(shí)現(xiàn)簡(jiǎn)單分布式鎖,文中通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下2013-09-09通過(guò) Redis 實(shí)現(xiàn) RPC 遠(yuǎn)程方法調(diào)用(支持多種編程語(yǔ)言)
這篇文章主要介紹了通過(guò) Redis 實(shí)現(xiàn) RPC 遠(yuǎn)程方法調(diào)用,支持多種編程語(yǔ)言,本文就以Ruby和Python為例,給出了實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-09-09redis分布式鎖優(yōu)化的實(shí)現(xiàn)
本文主要介紹了redis分布式鎖優(yōu)化的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Redis?異常?read?error?on?connection?的解決方案
這篇文章主要介紹了Redis異常read?error?on?connection的解決方案,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-08-08Redis5之后版本的高可用集群搭建的實(shí)現(xiàn)
這篇文章主要介紹了Redis5之后版本的高可用集群搭建的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04淺談Redis?中的過(guò)期刪除策略和內(nèi)存淘汰機(jī)制
本文主要介紹了Redis?中的過(guò)期刪除策略和內(nèi)存淘汰機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04