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 ...
随机推荐
- Java语言学习day30--8月5日
###10String类的其他方法 * A:String类的其他方法 * a: 方法介绍 * int length(): 返回字符串的长度 * String substring(int beginIn ...
- Attention Mechanism in Computer Vision
前言 本文系统全面地介绍了Attention机制的不同类别,介绍了每个类别的原理.优缺点. 欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结.最新技术跟踪.经典论文解读.CV招聘信息. 概 ...
- XGBoost文本分类,多分类、二分类、10-Fold(K-Fold)
做机器学习的时候经常用到XGB,简单记录一下 K折交叉验证也是模型常用的优化方法.一起记录... K折交叉验证:类似三个臭皮匠,顶个诸葛亮.我的理解是,就是用民主投票的方式,选取票数最高的那个当结果. ...
- js数组操作集合
1. join() 功能:将数组中所有元素都转化为字符串并连接在一起. 2. reverse() 功能:将数组中的元素颠倒顺序. 3. concat() 功能:数组拼接的功能 ,返回新数组,原数组不受 ...
- 浅谈 TCP、IP、DNS 和 HTTP 的关系
一.浅谈三个协议的基本概念 1.IP 协议 按层次分,IP网际协议位于网络层,几乎所有的网络的系统都会用到 IP 协议,其重要性非同一般.IP 协议作用就是把各种数据包传送给对方,对方的地址就要看其 ...
- vue 排错
error The template root requires exactly one element vue/no-multiple-template-root ... 解决办法: .eslint ...
- [STL] set 集合
可以用 if ( a.find(x) == a.end() ) 判断 x 在 a 中是否存在
- 面试官:请用SQL模拟一个死锁
文章首发于公众号:BiggerBoy 有读者说面试被问到怎么用SQL模拟数据库死锁? 这位读者表示对Java中的死锁还是略知一二的,但是突然用SQL写死锁的案例之前还真没遇到过,这个问题没答上来.所以 ...
- ucore lab7 同步互斥机制 学习笔记
管程的设计实在是精妙,初看的时候觉得非常奇怪,这混乱的进程切换怎么能保证同一时刻只有一个进程访问管程?理清之后大为赞叹,函数中途把前一个进程唤醒后立刻把自己挂起,完美切换.后一个进程又在巧妙的时机将自 ...
- 关于控制台报错“Cannot use import statement outside a module”问题的解决
问题还原: 1.首先在main.js里 使用ES6语法import引入另外一个js模块. 2.此时将main.js在index.html中通过script标签引入,如下 3.右键通过vscode提供的 ...