腾讯云使用HAVIP+CVM基于keepalived+redis主从搭建高可用。
背景描述:
①、背景说明:
项目上有要求,所有中间件都需要做到高可用,这里需要考虑redis、memcached两个组件的高可用,本篇先将如何做redis的高可用。
redis高可用请参考:Keepalive+redis主从复制实现redis高可用
以上只是在测试环境做的测试!
②、环境准备
服务器:
HAVIP: 10.255.253.83
redis01: 10.255.253.107
redis02: 10.255.253.94
软件:
Keepalived: v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
redis: 3.2.12
注:公有云服务器需要先调研是否支持keepalived。
一、申请HAVIP
CVM架构图
高可用虚拟 IP(HAVIP)是从 VPC 子网 CIDR 分配的一个内网 IP 地址,通常和高可用软件(如 keepalived 或 Windows Server Failover Cluster)配合使用,应用于搭建高可用主备集群场景。
二、安装、部署redis
主要修改如下参数:
bind 0.0.0.0
requirepass aaaaaaa
masterauth aaaaaaa
其他参数默认
详细配置文件如下:
[root@localhost ~]# cat /etc/redis.conf |grep -v '#'|grep -v '^$'
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis/redis.log
databases 96
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis
masterauth aaaaaaa
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
requirepass aaaaaaa
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
三、安装、部署、调试keepalived
[root@VM-253-107-centos script]$ cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id redis01
}
vrrp_script chk_redis
{
script "/bin/bash /data/keepalived/script/redis_check.sh 10.255.253.107 6379 aaaaaaa" ## 修改auth为密码
interval 2
timeout 2
fall 3
}
vrrp_instance redis {
state BACKUP ##两台都是BACKUP角色
interface eth0 ##需要修改为实际网卡名称
virtual_router_id 77
nopreempt # 设置keepalived为不抢占模式需要添加该参数
priority 90 ##权重,数字越大权重越大,主节点数值大于备节点
advert_int 1
unicast_src_ip 10.255.253.107 # 设置本机内网IP地址
unicast_peer {
10.255.253.94 # 对端设备的 IP 地址
}
authentication { #all node must same
auth_type PASS
auth_pass xxxxxxxx
}
virtual_ipaddress {
10.255.253.83 ##需要修改为实际分配的虚拟IP
}
track_script {
chk_redis
}
garp_master_delay 1 # 设置当切为主状态后多久更新 ARP 缓存
garp_master_refresh 5 # 设置主节点发送 ARP 报文的时间间隔
notify_master "/bin/bash /data/keepalived/script/redis_master.sh 127.0.0.1 10.255.253.94 6379 aaaaaaa" ## 172.18.40.174 6379需要修改为实际的远端主机IP ## 修改auth为密码
notify_backup "/bin/bash /data/keepalived/script/redis_backup.sh 127.0.0.1 10.255.253.94 6379 aaaaaaa" ## 172.18.40.174 6379需要修改为实际的远端主机IP ## 修改auth为密码
}
四、测试高可用集群。
①、测试redis主从复制是否正常。
②、停止一台redis,看看keepalived是否会把异常redis服务拉起来。
③、停止keepalived服务,看看另外一台状态是否会变为Master,并且redis是否变成主Master服务器。
腾讯HAVIP参考:https://cloud.tencent.com/document/product/215/20186
阿里云HAVIP参考:https://help.aliyun.com/document_detail/184485.htm?spm=a2c4g.11186623.0.0.370c84a2IlIAe4#task-1938181
阿里云HAVIP还在公测阶段,目前需要提交申请才能使用!