本篇內容主要講解“redis怎么搭建哨兵集群”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“redis怎么搭建哨兵集群”吧!
環境說明:
redis使用的是6.2.6版本
| 主機 | IP | 系統 |
|---|---|---|
| master | 192.168.129.136 | redhat8 |
| slave | 192.168.182.135 | redhat8 |
| slave2 | 192.168.182.134 | redhat8 |
準備工作
// 三臺主機都要做 [root@master opt] wget https://download.redis.io/releases/redis-6.2.6.tar.gz //三臺主機都做 [root@master opt]# tar -zxf redis-6.2.6.tar.gz //編譯安裝 [root@master redis-6.2.6]# pwd //進入redis目錄 /opt/redis-6.2.6 [root@master redis-6.2.6]# yum -y install gcc gcc-c++ //安裝c語言編譯器 [root@master redis-6.2.6]# yum -y install make //安裝make編譯器 [root@master redis-6.2.6]# make MALLOC=libc
配置環境變量
// redis的二進制文件放在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 //使其生效
//啟動redis
啟動方式有以下兩種:
[root@master redis-6.2.6]# vim redis.conf
257 daemonize yes //把no改為yes
啟動一:
[root@master src]# ./redis-server //不建議用這種方式啟動
[root@master redis-6.2.6]# redis-server /opt/redis-6.2.6/redis.conf //推薦使用這種方式
啟動二:
[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端口號說明成功
6379
進入客戶端的命令
redis-cli -p 6379
127.0.0.1:6379>
[root@master redis-6.2.6]# redis-cli -p 6379 shutdown //關閉redis服務以上操作三臺主機都需要做
現在所部署的哨兵集群是基于redis主從的基礎上的,整體架構如下:
一個主節點(master)可擁有多個從節點(slave),從節點實現對主節點的復制,保證數據同步。而哨兵(sentinel)則對各節點進行監控,主要包括主節點存活檢測、主從運行情況檢測等,一旦主節點宕機,哨兵可自動進行故障轉移 (failover)、主從切換。
修改redis配置文件
建議在修改配置文件之前寫備份
//在master要做的事 [root@master redis-6.2.6]# mkdir logs 75 bind 192.168.129.136 //本機IP地址 94 protected-mode no 302 logfile "/opt/redis-6.2.6/logs/redis.log"
注意replicaof指定master的IP地址和端口號,在老版本上要做的事 slaveof
//在slave2上要做的事 [root@slave2 redis-6.2.6]# vim redis.conf 75 bind 192.168.129.135 //本機IP 477 replicaof 192.168.129.136 6379 master的IP和端口號 //在slave2上要做的事 [root@slave2 redis-6.2.6]# vim redis.conf 75 bind 192.168.129.135 //本機IP 477 replicaof 192.168.129.136 6379 master的IP和端口號
注意修改完配置文件之后需要重啟redis服務才能生效
[root@master redis-6.2.6]# redis-cli -h 192.168.129.136 -p 6379 192.168.129.136:6379> set name tom // 設置一個value值 OK [root@slave ~]# redis-cli -h 192.168.129.135 //這里也可以不指定端口號,因為redis默認使用的事6379端口號 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 Sentinel是Redis 的高可用性解決方案由一個或多個Sentinel(哨兵)實例組成。它可以監視任意多個主服務器,以及這些主服務器屬下的所有從服務器,并在被監視的主服務器進入下線狀態時,自動將下線主服務器屬下的某個從服務器升級為新的主服務器,它的主要功能如下:
監控: Sentinel會不斷地檢查你的主服務器和從服務器是否運作正常。
通知:當被監控的某個 Redis 服務器出現問題時, Sentinel可以通過API向管理員或者其他應用程序發送通知。
故障遷移:當主服務器不能正常工作時,Sentinel會自動進行故障遷移,也就是主從切換。
統一的配置管理:連接者詢問sentinel取得主從的地址。
Sentinel 使用的算法核心是 Raft 算法,主要用途就是用于分布式系統,系統容錯,以及Leader選舉,每個Sentinel都需要定期的執行以下任務:
每個 Sentinel 會自動發現其他 Sentinel 和從服務器,它以每秒鐘一次的頻率向它所知的主服務器、從服務器以及其他 Sentinel 實例發送一個 PING 命令。
如果一個實例(instance)距離最后一次有效回復 PING 命令的時間超過 down-after-milliseconds 選項所指定的值, 那么這個實例會被 Sentinel 標記為主觀下線。 有效回復可以是: +PONG 、 -LOADING 或者 -MASTERDOWN 。
如果一個主服務器被標記為主觀下線, 那么正在監視這個主服務器的所有Sentinel要以每秒一次的頻率確認主服務器的確進入了主觀下線狀態。
如果一個主服務器被標記為主觀下線, 并且有足夠數量的Sentinel(至少要達到配置文件指定的數量)在指定的時間范圍內同意這一判斷, 那么這個主服務器被標記為客觀下線。
在一般情況下, 每個Sentinel會以每 10 秒一次的頻率向它已知的所有主服務器和從服務器發送 INFO 命令。 當一個主服務器被Sentinel標記為客觀下線時,Sentinel向下線主服務器的所有從服務器發送 INFO 命令的頻率會從 10 秒一次改為每秒一次。
當沒有足夠數量的Sentinel同意主服務器已經下線, 主服務器的客觀下線狀態就會被移除。 當主服務器重新向Sentinel的 PING 命令返回有效回復時, 主服務器的主管下線狀態就會被移除。
// 三臺主機做同樣的操作 [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 //啟動哨兵 // 查看哨兵信息 [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
模擬主機故障,進行容災切換
[root@master ~]# systemctl stop redis.service //關閉redis服務 [root@master redis-6.2.6]# ps -ef | grep redis //使用此命令找到sentinel進程,然后再kill掉sentinel的進程 //因為主機切換到了144主機,因此原來主機的配置文件也會隨之更改,所以在137啟動前需要更改配置文件,將其配置成144的從機: [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 //啟動redis服務 [root@master redis-6.2.6]# systemctl restart redis.service //也可以使用此命令啟動redis服務 [root@master redis-6.2.6]# redis-sentinel /opt/redis-6.2.6/sentinel.conf //啟動sentinel服務 ##至此哨兵集群搭建完畢
到此,相信大家對“redis怎么搭建哨兵集群”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。