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高可用技术之详细教程的更多相关文章

  1. Nginx+Keepalived+VIP漂移实现HA高可用技术之详细教程

    https://www.cnblogs.com/zcc666/p/13141626.html  这个是nginx安装教程地址 https://www.cnblogs.com/zcc666/p/1313 ...

  2. redis主从+keepalived实现高可用技术

    Redis是我们当下比较流行使用的非关系数据库,可支持多样化的数据类型,多线程高并发支持,redis运行在内存拥有更快的读写.因为redis的表现如此出色,如何能保障redis在运行中能够应对宕机故障 ...

  3. Kubeadm 1.9 HA 高可用集群本地离线镜像部署【已验证】

    k8s介绍 k8s 发展速度很快,目前很多大的公司容器集群都基于该项目,如京东,腾讯,滴滴,瓜子二手车,易宝支付,北森等等. kubernetes1.9版本发布2017年12月15日,每三个月一个迭代 ...

  4. [K8s 1.9实践]Kubeadm 1.9 HA 高可用 集群 本地离线镜像部署

    k8s介绍 k8s 发展速度很快,目前很多大的公司容器集群都基于该项目,如京东,腾讯,滴滴,瓜子二手车,北森等等. kubernetes1.9版本发布2017年12月15日,每是那三个月一个迭代, W ...

  5. keepalived+mysql实现双主高可用

    环境: DB1:centos6.8.mysql5.5.192.168.2.204  hostname:bogon DB2:centos6.8.mysql5.5.192.168.2.205  hostn ...

  6. mysql+keepalived 双主热备高可用

    理论介绍:我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互 ...

  7. 基于Keepalived实现LVS双主高可用集群

    Reference:  https://mp.weixin.qq.com/s?src=3&timestamp=1512896424&ver=1&signature=L1C7us ...

  8. centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课

    centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课 heartbeat是Linu ...

  9. 如何实现Nginx+Keepalived中Nginx进程的高可用

    此架构我简单说明下: 一般为了维护方便,企业网站的服务器都在自己的内部机房里,只开放了Keepalived的VIP地址的两个端口80.443,通过Juniper SSG550防火墙映射出去,外网DNS ...

随机推荐

  1. MySQL 视图简介

    概述 数据库中关于数据的查询有时非常复杂,例如表连接.子查询等,这种查询编写难度大,很容易出错.另外,在具体操作表时,有时候要求只能操作部分字段. 为了提高复杂 SQL 语句的复用性和表的操作的安全性 ...

  2. Java web与web gis学习笔记(二)——百度地图API调用

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  3. python学习-Day16

    目录 今日内容详细 内置函数补充 常见内置函数 help() id() int() isinstance() pow() round() sum() 求和 迭代器 可迭代对象 什么是可迭代对象? 哪些 ...

  4. 【面试普通人VS高手系列】volatile关键字有什么用?它的实现原理是什么?

    一个工作了6年的Java程序员,在阿里二面,被问到"volatile"关键字. 然后,就没有然后了- 同样,另外一个去美团面试的工作4年的小伙伴,也被"volatile关 ...

  5. 浅谈 Linux IO

    公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 来源于:360云计算 1 前言 Linux IO是文件存储的基础.本文参考了网上博主的一些文章,主要总结了LinuxIO的基 ...

  6. MyCat 使用中问题记录

    MyCat问题记录: Unknown charsetIndex:255 异常消息: jvm 1 | 2022-04-27 14:09:13,337 [WARN ][$_NIOREACTOR-13-RW ...

  7. Android添加布局和按键

    Android添加布局和按键 Android布局方式分为 1.LinearLayout (线性布局) 2.ConstraintLayout (约束布局) 3.FrameLayout (帧布局) 4.T ...

  8. 常见排序算法的golang 实现

    五种基础排序算法对比 五种基础排序算法对比 1:冒泡排序 算法描述 比较相邻的元素.如果第一个比第二个大,就交换它们两个: 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素 ...

  9. 482. License Key Formatting - LeetCode

    Question 482. License Key Formatting Solution 思路:字符串转化为char数组,从后遍历,如果是大写字母就转化为小写字母,如果是-就忽略,如果遍历了k个字符 ...

  10. Android Studio中一套代码多版本打包

    一套代码达到以下效果: 打包不同applicationId能同时安装在同一手机上 不同logo,app名称, 不同第三方SDK接入配置(例如微信分享appid,激光推送appkey) 能区分debug ...