redis哨兵高可用
基本環境
| 機器 | IP |
|---|---|
| db01 | 192.168.0.51(master) |
| db02 | 192.168.0.52(slave) |
| db03 | 192.168.0.53(slave) |
1:VIP隨MASTER飄動,無需手動改
2:主從關系切換由sentinel管理
3:keepalived三個state全部設定為BACKUP,如果role:master的話,優先級+10(默認三個優先級全為100),不能開啟nopreempt,否則只要keepalived運行,就不會釋放VIP(即使這個節點已經變為redis-slave了)
systemd服務管理
Redis
[Unit]
Description=Redis
After=network.target
[Service]
Type=forking
PIDFile=/var/run/redis.pid
ExecStart=/opt/redis-6.2.1/src/redis-server /opt/redis-6.2.1/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/opt/redis-6.2.1/src/redis-cli -a password shutdown
[Install]
WantedBy=multi-user.target
Sentinel
[Unit]
Description=Sentinel
After=network.target
[Service]
Type=forking
PIDFile=/var/run/sentinel.pid
ExecStart=/opt/redis-6.2.1/src/redis-sentinel /opt/redis-6.2.1/sentinel.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Redis配置
初始時,db02,db03需要在組態檔中寫slaveof db01,后續sentinel會自動去改
db01-redis
daemonize yes
bind 0.0.0.0
port 6379
timeout 300
loglevel notice
logfile "/opt/redis-6.2.1/redis.log"
pidfile "/var/run/redis.pid"
databases 16
save 900 1
save 300 10
save 60 10000
dbfilename "dump.rdb"
rdbcompression yes
dir "/opt/redis-6.2.1"
maxclients 20480
appendonly no
appendfsync no
requirepass "password"
masterauth "password"
db02-redis
daemonize yes
bind 0.0.0.0
port 6379
timeout 300
loglevel notice
logfile "/opt/redis-6.2.1/redis.log"
pidfile "/var/run/redis.pid"
databases 16
save 900 1
save 300 10
save 60 10000
dbfilename "dump.rdb"
rdbcompression yes
dir "/opt/redis-6.2.1"
maxclients 20480
appendonly no
appendfsync no
requirepass "password"
masterauth "password"
slaveof 192.168.0.51 6379
db03-redis
daemonize yes
bind 0.0.0.0
port 6379
timeout 300
loglevel notice
logfile "/opt/redis-6.2.1/redis.log"
pidfile "/var/run/redis.pid"
databases 16
save 900 1
save 300 10
save 60 10000
dbfilename "dump.rdb"
rdbcompression yes
dir "/opt/redis-6.2.1"
maxclients 20480
appendonly no
appendfsync no
requirepass "password"
masterauth "password"
slaveof 192.168.0.51 6379
sentinel配置
db01-sentinel
protected-mode no
port 26379
daemonize yes
logfile "/opt/redis-6.2.1/sentinel.log"
pidfile "/var/run/sentinel.pid"
dir "/tmp"
sentinel monitor mymaster 192.168.0.51 6379 1 #只要一個節點認為master有問題,即可發送failover
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster password
db02-sentinel
protected-mode no
port 26379
daemonize yes
logfile "/opt/redis-6.2.1/sentinel.log"
pidfile "/var/run/sentinel.pid"
dir "/tmp"
sentinel monitor mymaster 192.168.0.51 6379 1
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster password
db03-sentinel
protected-mode no
port 26379
daemonize yes
logfile "/opt/redis-6.2.1/sentinel.log"
pidfile "/var/run/sentinel.pid"
dir "/tmp"
sentinel monitor mymaster 192.168.0.51 6379 1
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster password
keepalived配置
將IP換了即可,三個節點全部設定為BACKUP,但是不能設定為nopreempt
db01-keepalived
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
script_user root
enable_script_security
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script sentinel_check {
script "/etc/keepalived/sentinel-check.sh 127.0.0.1 6379 password"
interval 2
weight 10
fall 3
rise 1
}
vrrp_instance VI_1 {
state BACKUP ##
interface ens33
virtual_router_id 51
priority 100
# nopreempt # 這里不要開nopreempt,只要keepalived在運行,會一直霸占VIP,我們要讓VIP飄
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 192.168.0.51
unicast_peer {
192.168.0.52
192.168.0.53
virtual_ipaddress {
192.168.0.55/24
}
track_script {
sentinel_check
}
}
db02-keepalived
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
script_user root
enable_script_security
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script sentinel_check {
script "/etc/keepalived/sentinel-check.sh 127.0.0.1 6379 password"
interval 2
weight 10
fall 3
rise 1
}
vrrp_instance VI_1 {
state BACKUP ####
interface ens33
virtual_router_id 51
priority 100
# nopreempt
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 192.168.0.52
unicast_peer {
192.168.0.51
192.168.0.53
}
virtual_ipaddress {
192.168.0.55/24
}
track_script {
sentinel_check
}
}
db03-keepalived
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
script_user root
enable_script_security
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script sentinel_check {
script "/etc/keepalived/sentinel-check.sh 127.0.0.1 6379 password"
interval 2
weight 10
fall 3
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 100
# nopreempt
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 192.168.0.53
unicast_peer {
192.168.0.52
192.168.0.51
}
virtual_ipaddress {
192.168.0.55/24
}
track_script {
sentinel_check
}
}
使用說明
1:三臺節點啟動redis
2:三臺節點啟動sentinel
3: 三臺節點啟動keepalived
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/282604.html
標籤:其他
上一篇:DDD之應用架構
