Redis高可用配置(Keepalived)
主:172.16.0.104
备:172.16.0.105
VIP:172.16.0.107
客户端直接连VIP,当master 104的redis挂掉后,105作为master。当104重启后,104作为105的slave。当105又挂掉之后,104作为master......
1、安装redis并配置主从同步
安装过程省略
1.1 配置104的redis实例:/etc/redis/redis.conf
requirepass 123456 #生产环境千万不要配置这么简单的密码
masterauth 123456 #备库密码,这里没有配置slaveof却配置masterauth是因为主备切换时需要用到密码
1.2 配置105的redis实例
requirepass 123456 #生产环境千万不要配置这么简单的密码
masterauth 123456 #主库密码
slaveof 172.16.0.104 6379
2、安装keepalived
安装过程省略
3、配置keepalived
Master(104)实例:
keepalived.conf
- global_defs {
- router_id test
- }
- vrrp_script chk_redis
- {
- script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379 123456"
- interval 2
- timeout 2
- fall 3
- }
- vrrp_instance redis {
- state BACKUP # 主也配置为SLAVE
- interface eth0
- virtual_router_id 51
- priority 150
- nopreempt # 不抢占,注意加上
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 123456
- }
- virtual_ipaddress {
- 172.16.0.107
- }
- track_script {
- chk_redis
- }
- notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 6379 123456"
- notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 6379 123456 172.16.0.105 6379"
- notify_fault /etc/keepalived/scripts/redis_fault.sh
- notify_stop /etc/keepalived/scripts/redis_stop.sh
- }
redis_master.sh
- #!/bin/bash
- REDISCLI="redis-cli -h $1 -p $2 -a $3"
- LOGFILE="/var/log/keepalived-redis-state.log"
- echo "[master]" >> $LOGFILE
- date >> $LOGFILE
- echo "Being master...." >> $LOGFILE 2>&1
- echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
- $REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
redis_backup.sh
- #!/bin/bash
- REDISCLI="redis-cli -h $1 -p $2 -a $3"
- LOGFILE="/var/log/keepalived-redis-state.log"
- echo "[backup]" >> $LOGFILE
- date >> $LOGFILE
- echo "Being slave...." >> $LOGFILE 2>&1
- echo "Run SLAVEOF cmd ..." >> $LOGFILE
- $REDISCLI SLAVEOF $4 $5 >> $LOGFILE 2>&1
Slave(105)实例
- global_defs {
- router_id redis
- }
- vrrp_script chk_redis {
- script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379 123456" ###监控脚本
- interval 2 ###监控时间
- timeout 2 ###超时时间
- fall 3 ###重试次数
- }
- vrrp_instance redis {
- state BACKUP ###设置为MASTER
- interface eth0 ###监控网卡
- virtual_router_id 51
- priority 100 ###权重值
- nopreempt # 不抢占,注意加上
- advert_int 1
- authentication {
- auth_type PASS ###加密
- auth_pass 123456 ###密码
- }
- track_script {
- chk_redis ###执行上面定义的chk_redis
- }
- virtual_ipaddress {
- 172.16.0.107 ###VIP
- }
- notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 6379 123456"
- notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 6379 123456 172.16.0.104 6379"
- notify_fault /etc/keepalived/scripts/redis_fault.sh
- notify_stop /etc/keepalived/scripts/redis_stop.sh
- }
- #!/bin/bash
- REDISCLI="redis-cli -h $1 -p $2 -a $3"
- LOGFILE="/var/log/keepalived-redis-state.log"
- echo "[master]" >> $LOGFILE
- date >> $LOGFILE
- echo "Being master...." >> $LOGFILE 2>&1
- echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
- $REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
redis_backup.sh
- #!/bin/bash
- REDISCLI="redis-cli -h $1 -p $2 -a $3"
- LOGFILE="/var/log/keepalived-redis-state.log"
- echo "[backup]" >> $LOGFILE
- date >> $LOGFILE
- echo "Being slave...." >> $LOGFILE 2>&1
- echo "Run SLAVEOF cmd ..." >> $LOGFILE
- $REDISCLI SLAVEOF $4 $5 >> $LOGFILE 2>&1
公共配置
redis_check.sh
- #!/bin/bash
- ALIVE=`redis-cli -h $1 -p $2 -a $3 PING`
- LOGFILE="/var/log/keepalived-redis-check.log"
- echo "[CHECK]" >> $LOGFILE
- date >> $LOGFILE
- if [ $ALIVE == "PONG" ]; then :
- echo "Success: redis-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=/var/log/keepalived-redis-state.log
- echo "[fault]" >> $LOGFILE
- date >> $LOGFILE
redis_stop.sh
- #!/bin/bash
- LOGFILE=/var/log/keepalived-redis-state.log
- echo "[stop]" >> $LOGFILE
- date >> $LOGFILE
启动keepalived:keepalived -D
查看ip漂移情况:ip a
配置要点:
- 双BACKUP + nopreempt,优先级大的先启动作为master,当master挂掉后,slave被选中成为新的master。
参考文章:http://www.cnblogs.com/lulu/archive/2013/04/14/3021261.html
Redis高可用配置(Keepalived)的更多相关文章
- Redis Sentinel实现高可用配置
一般情况下yum安装redis的启动目录在:”/usr/sbin” :配置目录在”/etc/redis/”在其目录下会有默认的redis.conf和redis-sentinel.conf redis高 ...
- Keepalived+Redis高可用部署(第二版)
更新 20150625 脚本由5个减少为4个,sh脚本指令做了精简. 修改了另外3个脚本,在日志里增加了日期显示. 新增redis数据类型,持久化,主从同步简介. 新增hiredis简介. 新增c语言 ...
- MariaDB+Keepalived双主高可用配置MySQL-HA
利用keepalived构建高可用MySQL-HA,保证两台MySQL数据的一致性,然后用keepalived实现虚拟VIP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换. ...
- Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】
No cross,no crown . 不经历风雨,怎么见彩虹. Redis哨兵模式,用现在流行的话可以说就是一个"哨兵机器人",给"哨兵机器人"进行相应的配置 ...
- Redis高可用之集群配置(六)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- Redis高可用之哨兵模式Sentinel配置与启动(五)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- Keepalived保证Nginx高可用配置
Keepalived保证Nginx高可用配置部署环境 keepalived-1.2.18 nginx-1.6.2 VM虚拟机redhat6.5-x64:192.168.1.201.192.168.1. ...
- linux中keepalived实现nginx高可用配置
linux中keepalived实现nginx高可用配置 安装keepalived 运行如下命令即可 tar -zxvf keepalived-2.0.8.tar.gz -C /usr/src cd ...
- Redis高可用方案----Redis主从+Sentinel+Haproxy
安装环境 这里使用三台服务器,每台服务器上开启一个redis-server和redis-sentinel服务,redis-server端口为6379,redis-sentinel的端口为26379. ...
随机推荐
- Mybatis学习笔记(二) 之实现数据库的增删改查
开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...
- php_Symfony_项目实战全过程记录
今天是2017年1月8号,正式接收到一个Symfony 的项目,准备全程记录遇到的问题及解决方法,之前被通知学习该框架,只是一直没有机会做项目,今天终于可以做了,希望2017把Symfony学的能会使 ...
- Python2 基于urllib2 的HTTP请求类
一个利用urllib2模块编写的下载器,虽然有了requests模块,但是毕竟标准库 import urllib2,random class strong_down(): def __init__(s ...
- Token注解防止表单的重复提交
注解的一些基础: 参见http://blog.csdn.net/duo2005duo/article/details/50505884和 http://blog.csdn.net/duo2005duo ...
- Lintcode解题报告
1. Num.196 寻找缺失的数 给出一个包含 0 .. N 中 N 个数的序列,找出0 .. N 中没有出现在序列中的那个数. 注意事项 可以改变序列中数的位置. 您在真实的面试中是否遇到过这个题 ...
- LeetCode 476. Number Complement
Given a positive integer, output its complement number. The complement strategy is to flip the bits ...
- Windows 服务 Error 14001
如果碰到 windows 服务安装不了或者启动不了,报14001的配置文件错误,那么 可以从.exe.config入手,我这次遇到的是配置中有中文注释导致的. 我把空行以及中文的注释去掉以后,整个世界 ...
- AndroidPullToRefresh拉动效果配置
最近用了 开源的 AndroidPullToRefresh 库,但是发现拉动时的效果有个很奇怪的地方,无论上下拉动,当列表滚动到顶部或底部时,会瞬间弹出半个列表高度的拉动提示,感觉很不舒服,这种提示根 ...
- Another Array of Orz Pandas
Another Array of Orz Pandas 题目链接:http://acm.xidian.edu.cn/problem.php?id=1187 线段树 线段树维护区间和以及区间内各个数平方 ...
- 大数据揭示的10个常见JAVA编程错误
初学者最常犯的编程错误是什么呢?有可能他们总是混淆等值(==)与赋值(=),或者 & 和 &&:也有可能是他们在循环中使用错误的分隔符(for (int i = 0, i &l ...