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. CesiumJS 2022^ 原理[3] 渲染原理之从 Entity 看 DataSource 架构 - 生成 Primitive 的过程

    目录 API 用法回顾 1. 为什么要从 Viewer 访问 Entity API 1.1. 高层数据模型的封装 - DataSource API 1.2. 显示管理器 DataSourceDispl ...

  2. 如何使用 pyqt 实现 Groove 音乐播放器

    前言 Win10 自带了一款很好用的音乐播放器 -- Groove 音乐,但是只能支持本地音乐的播放.2020年3月底到4月底,自己一直在学习 PyQt5,然后从 2020年5月开始,着手使用 PyQ ...

  3. OA办公软件篇(三)—审批流

    背景 作用 迭代历程 具体实现 写在最后   背景 在前面两篇文章中,我们分别讲了组织架构和权限管理,今天我们来讲一个跟组织架构关系比较密切的功能-审批流. 审批流,通俗来说就是一个完整的审批流程,是 ...

  4. 详解Kubernetes存储体系

    Volume.PV.PVC.StorageClass由来 先思考一个问题,为什么会引入Volume这样一个概念? " 答案很简单,为了实现数据持久化,数据的生命周期不随着容器的消亡而消亡. ...

  5. RabbitMQ 3.9( 基础 )

    1.认识MQ 1.1.什么是MQ? MQ全称:message queue 即 消息队列 这个队列遵循的原则:FIFO 即 先进先出 队列里面存的就是message 1.2.为什么要用MQ? 1.2.1 ...

  6. css实现弹框

    CSS遮罩层实现思路:遮罩层的影藏方式一般有display:none.visibility:none.opacity: 0.遮罩层从无到有的出现效果一般是opacity值从0~1,结合transiti ...

  7. MYSQL如何比对版本号字符串

    MYSQL如何比对版本号字符串 mysql 数据库中存储了一个形如"2.7.6.526" 的版本号,现在要获取出小于某个版本号的数据,怎么做?这个就是昨天遇到的一个问题,记录下查到 ...

  8. yarn/npm 设置镜像地址

    注意 如果开发 electron 桌面软件,需要设置以下两个镜像地址 disturl.electron_mirror 如果用到了 node-sass 需要设置以下一个镜像地址 sass_binary_ ...

  9. Git命令行提交代码步骤

    先进入对应的项目目录 1.拉取服务器代码,避免覆盖他人代码 git pull 2.查看当前项目中有哪些文件被修改过 git status 具体状态如下: 1:Untracked: 未跟踪,一般为新增文 ...

  10. 项目中导入本地jar包问题

    1. 问题 一个Maven项目,需要依赖一个本地jar包,以如下方式引用: <dependency> <groupId>xxx.sdk</groupId> < ...