Redis主从复制+Keepalived+VIP漂移实现HA高可用技术之详细教程
1、大家可以先看我的单台Redis安装教程,链接在此点击Redis在CentOS for LInux上安装详细教程
2、第一台redis配置,是正常配置。作为MASTER主服务器,第二台redis的配置文件中
加 一行代码 slaveof 主redis的IP 6379
例如我的主redis的ip是192.168.1.2
我在从redis配置文件中加一行
从: slaveof 192.168.1.2 6379
3、然后启动从redis服务器,主从复制就搭建好了。当然你的配置文件中,如果对日志文件有要求,可以这样修改
主: logfile "/var/log/redis/redis_master.log"
从: logfile "/var/log/redis/redis_slava.log"
4、此时如果主master服务器宕机了,此时主从复制就彻底垮掉了,如果你的项目挂载了redis主从复制,则项目就会出错。
5、解决redis主从复制,主服务器宕机,从服务器充当主服务器,即主从双机热备技术。使用的技术服务是Keepalived高可用。
6、Linux for CentOS 下的 keepalived 安装与卸载以及相关命令操作之详细教程 点击链接进入Keepalived的安装教程。
7、环境准备工作
准备两台Linux服务器:
1. redis主服务器地址:192.168.1.10 并且该服务器已经安装Keepalived服务
2.redis从服务器地址:192.168.1.11 并且该服务器已经安装Keepalived服务
3.备用一个虚拟IP地址:192.168.1.20(用来做IP地址漂移)
4.此两台服务器已经做好主从复制的配置。
8.登录主redis服务器 192.168.1.10
9.进入/etc/keepalived/keepalived.conf编辑配置文件
global_defs {
router_id redis1
script_user root
enable_script_security
}
vrrp_script chk_redis
{
script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379"
interval 2
timeout 2
fall 3
weight -20
} vrrp_instance redis {
state MASTER
interface eth0
virtual_router_id 100
priority 100
#nopreempt # no seize,must add
advert_int 1
authentication { #all node must same
auth_type PASS
auth_pass 1111
} unicast_src_ip 192.168.1.10
unicast_peer {
192.168.1.11
} virtual_ipaddress {
192.168.1.20
}
track_script {
chk_redis
} notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 192.168.1.11 6379"
notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 192.168.1.11 6379"
notify_fault /etc/keepalived/scripts/redis_fault.sh
notify_stop /etc/keepalived/scripts/redis_stop.sh
}
10. 建立目录 make /etc/keepalived/scripts 用来存放脚本
redis_backup.sh
redis_check.sh
redis_fault.sh
redis_master.sh
redis_stop.sh
每个脚本代码如下:
【redis_backup.sh】 #!/bin/bash
REDISCLI="/usr/local/bin/redis-cli -h $1 -p $3"
LOGFILE="/etc/keepalived/log/keepalived-redis-state.log"
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF $2 $3 >> $LOGFILE 2>&1
# echo "Being slave...." >> $LOGFILE 2>&1
sleep 15
#delay 15 s wait data sync exchange role 【redis_check.sh】 #!/bin/bash
ALIVE=`/usr/local/bin/redis-cli -h $1 -p $2 PING`
LOGFILE="/etc/keepalived/log/keepalived-redis-check.log"
echo "[CHECK]" >> $LOGFILE
date >> $LOGFILE if [[ $ALIVE == "PONG" ]]; then :
echo "SUCCESS:reidis-cli -h $1 -p $2 PING $ALIVE" >> $LOGFILE 2>&1
exit 0
else
echo "FAILED:redis-cli -h $1 -p $2 PING $ALIVE" >> $LOGFILE 2>&1
exit 1
fi 【redis_fault.sh】 #!/bin/bash
LOGFILE=/etc/keepalived/log/keepalived-redis-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE 【redis_master.sh】 #!/bin/bash
REDISCLI="/usr/local/bin/redis-cli -h $1 -p $3"
LOGFILE="/etc/keepalived/log/keepalived-redis-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run MASTER cmd ..." >> $LOGFILE 2>&1
$REDISCLI SLAVEOF $2 $3 >> $LOGFILE
sleep 10
#delay 10 s wait data async cancel sync echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1 【redis_stop.sh】 #!/bin/bash
LOGFILE=/etc/keepalived/log/keepalived-redis-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE
注释:脚本代码,如果和你路径不一样,可根据自己的适当修改
给脚本赋执行权限:chmod a+x /etc/keepalived/scripts/*.sh
11.登录从redis服务器 192.168.1.11
12.进入/etc/keepalived/keepalived.conf编辑配置文件
global_defs {
router_id redis1
script_user root
enable_script_security
}
vrrp_script chk_redis
{
script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379"
interval 2
timeout 2
fall 3
weight -20
} vrrp_instance redis {
state BACKUP
interface eth0
virtual_router_id 100
priority 90
#nopreempt # no seize,must add
advert_int 1
authentication { #all node must same
auth_type PASS
auth_pass 1111
} unicast_src_ip 192.168.1.11
unicast_peer {
192.168.1.10
} virtual_ipaddress {
192.168.1.20
}
track_script {
chk_redis
} notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 192.168.1.10 6379"
notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 192.168.1.10 6379"
notify_fault /etc/keepalived/scripts/redis_fault.sh
notify_stop /etc/keepalived/scripts/redis_stop.sh
}
主服务器的脚本,在从服务器这边也要复制一份过来。
注释:脚本代码,如果和你路径不一样,可根据自己的适当修改
给脚本赋执行权限:chmod a+x /etc/keepalived/scripts/*.sh
温馨提示:
1.keepalived的主备状态与state值设置无关,是简单的标识;
2.主备机由priority值和vrrp_script中的weight值之和决定,大的为主;
3.主备比较权值=priority值+weight值*标志位,当vrrp_script检测脚本为true时标志位为1,反之为0;
4.为保证正常的主备切换,weight值应大于主备priority值之差。
此时启动redis 和keepalived服务吧!
然后再主服务器输入: ip add 查看虚拟ip目前是否在主服务器上。
。。。。。
下面就开始做测试了,比如把主服务器的redis关闭,测试从服务器redis的读写情况。
开启主服务器redis,看看从服务器redis此时会主备切换不。
Redis主从复制+Keepalived+VIP漂移实现HA高可用技术之详细教程的更多相关文章
- Nginx+Keepalived+VIP漂移实现HA高可用技术之详细教程
https://www.cnblogs.com/zcc666/p/13141626.html 这个是nginx安装教程地址 https://www.cnblogs.com/zcc666/p/1313 ...
- redis主从+keepalived实现高可用技术
Redis是我们当下比较流行使用的非关系数据库,可支持多样化的数据类型,多线程高并发支持,redis运行在内存拥有更快的读写.因为redis的表现如此出色,如何能保障redis在运行中能够应对宕机故障 ...
- Kubeadm 1.9 HA 高可用集群本地离线镜像部署【已验证】
k8s介绍 k8s 发展速度很快,目前很多大的公司容器集群都基于该项目,如京东,腾讯,滴滴,瓜子二手车,易宝支付,北森等等. kubernetes1.9版本发布2017年12月15日,每三个月一个迭代 ...
- [K8s 1.9实践]Kubeadm 1.9 HA 高可用 集群 本地离线镜像部署
k8s介绍 k8s 发展速度很快,目前很多大的公司容器集群都基于该项目,如京东,腾讯,滴滴,瓜子二手车,北森等等. kubernetes1.9版本发布2017年12月15日,每是那三个月一个迭代, W ...
- keepalived+mysql实现双主高可用
环境: DB1:centos6.8.mysql5.5.192.168.2.204 hostname:bogon DB2:centos6.8.mysql5.5.192.168.2.205 hostn ...
- mysql+keepalived 双主热备高可用
理论介绍:我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互 ...
- 基于Keepalived实现LVS双主高可用集群
Reference: https://mp.weixin.qq.com/s?src=3×tamp=1512896424&ver=1&signature=L1C7us ...
- centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课
centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课 heartbeat是Linu ...
- 如何实现Nginx+Keepalived中Nginx进程的高可用
此架构我简单说明下: 一般为了维护方便,企业网站的服务器都在自己的内部机房里,只开放了Keepalived的VIP地址的两个端口80.443,通过Juniper SSG550防火墙映射出去,外网DNS ...
随机推荐
- 使用 GO-CQHttp或mirai框架 搭建QQ的机器人
我的博客 Go-CQHttp搭建QQ机器人 官方文档在这-->ATRU官方文档 Go-CQHttp + Atri 使用Linux系统部署 需求 服务器一台/带有Linux的机器 Python环境 ...
- C#接入SMTP邮件服务
我的个人博客 引入SMTP服务包 //引入邮件服务包using System.Net.Mail;using System.Net; 这两个引用用于C#接入邮件的SMTP服务 控件页面 定时器 为了给用 ...
- Linux网络流量相关
一直以来对Linux网络这块都感觉比较乱 遇到一个UDP丢包的问题:在测试中,一台VM虚拟机,CPU利用率55%左右,内存利用率7%左右,网卡流量也远没到限制的时候出现了丢包情况 使用netstat ...
- Ubuntu22.04搭建PWN环境
前言 最近尝试在Ubuntu最新的版本22.04版本上搭建PWN环境,有了之前在kali上搭建的经验,总的来说问题不大.但搭建的时候还是有不少地方出错了,好在搭建的过程中不断的拍摄快照,所以整个过程还 ...
- 【前端干货】别再羡慕别人的Excel啦,教你点击按钮直接打开侧边栏!
负责技术支持的葡萄又来啦. 三日不见,我们的客户又为我们发来新的问题. 这次我们需要实现的场景是在前端表格环境中,像模板按钮那样,点击之后弹出一个侧边栏,然后通过点击不同的单元格显示不同的内容. 挤接 ...
- 史上最全Redis面试题(2020最新版)
一个执着于技术的公众号 导读:2020 年最新版 Redis面试题,两万字干货,为方便读者阅读,已整理为PDF文档,后台回复『redis』即可领取.希望对大家有帮助! 概述 1. 什么是Redis? ...
- 操作系统实现-loader
博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 大家好呀,终于我们到了操作系统的loader部分了,loader也是操作系统中最重要的一个 ...
- os模块,sys模块,json模块,subprocess模块
os模块 一·什么是os模块 os模块提供了多数操作系统的功能接口函数.当os模块被导入后,它会自适应于不同的操作系统平台,根据不同 的平台进行相应的操作,在python编程时,经常和文件.目录打交道 ...
- 四、针对redis容灾切换导致"脑裂"的情况
网上参考到别人博客说,redis容灾切换的时候,有几率出现脑裂的情况. 什么是脑裂: sentinel判断master宕机,切换slave为新master的过程中,业务数据还在持续往原master写入 ...
- MySQL用户管理与字符集
用户管理与字符集 一.用户管理 用户名的概念 用户名是由两部分组成的 user和host 1.1 创建用户 create user 'yysue'@'192.168.5.38' identified ...