redis keepalive+redis 主从高可用

1 准备

1.1 准备
keepalived-2.0.18.tar.gz
redis-5.0.4.tar.gz
1.2 说明
当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby;
当 Master 挂掉,Slave 正常时, Slave接管服务升级Master,有写权限,同时关闭主从复制功能;
当 Master 恢复正常, Master降级为Slave同步数据,开启主从复制。

1.3 测试服务器信息

Master redis: 192.168.56.103

Slave redis: 192.168.56.104

2. 配置redis 服务

1. 解压缩

tar zxf redis-5.0.4.tar.gz
mv redis-5.0.4 /soft/server
cd /soft/server
mv redis-5.0.4 redis

2. 编译安装

cd /soft/server/redis
make && make install

3. redis配置文件修改

vim redis.conf
...
bind 0.0.0.0   # 修改支持网络访问
protected-mode no   # 同样一个安全配置,默认yes是不能网络访问的
daemonize yes   # 后台运行redis
slaveof 192.168.56.103 6379   # 指定Master IP,同步(仅从配置)

4. 配置redis服务启动脚本

vim /etc/init.d/redis-server

#!/usr/bin/env bash
#
# redis start up the redis server daemon
#
# chkconfig: 345 99 99
# description: redis service in /etc/init.d/redis
#            chkconfig --add redis or chkconfig --list redis
#            service redis start  or  service redis stop
# processname: redis-server
# config: /etc/redis.conf
# 注意不同位置要修改变量
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/paic/rd6379/bin/redis-server
REDIS_CLI=/paic/rd6379/redis-cli

PIDFILE=/var/run/redis.pid
CONF="/soft/server/redis/redis.conf"
#make sure some dir exist
if [ ! -d /var/lib/redis ] ;then
    mkdir -p /var/lib/redis
    mkdir -p /var/log/redis

fi

case "$1" in
    status)
        ps -A|grep redis
        ;;
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        if [ "$?"="0" ]
        then
              echo "Redis is running..."
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $REDIS_CLI -p $REDISPORT SHUTDOWN
                while [ -x ${PIDFILE} ]
              do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
  restart|force-reload)
        ${0} stop
        ${0} start
        ;;
  *)
    echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
    exit 1

esac

5. 配置开机自启

chkconfig --add redis-server
chkconfig redis-server on

配置keepalive服务

1. 编译安装

tar zxf keepalived-1.2.22.tar.gz
cd keepalived-1.2.22
./configure --prefix=/usr/local/keepalived
make && make install

2. 配置文件设置

# 拷贝keepalived服务
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived

# 配置keepalived服务
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
mkdir /etc/keepalived

# 拷贝配置文件
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

3. keepalive配置文件

Master节点

! Configuration File for keepalived
vrrp_script chk_redis {

    script "/root/scripts/redis_check.sh"    ###监控脚本
    interval 2                         ###监控时间
    }

#网卡需要注意,使用ifconfig查看一下当前活动网卡

vrrp_instance VI_1 {
    state BACKUP                ###设置为BACKUP
    nopreempt                   # 不抢占MASTER
    interface eth0                ###监控网卡
    virtual_router_id 51
    priority 100            ###权重值
    authentication {
        auth_type PASS        ###加密
        auth_pass 1q2w3e        ###密码
    }
    #设置额外的监控,里面的任意一个网卡出现问题,都会进入FAULT状态
    track_interface {
       eth0
    }
    track_script {
         chk_redis            ###执行上面定义的chk_redis
    }
    virtual_ipaddress {
       192.168.0.99        ######VIP
    }
        notify_master /root/scripts/redis_master.sh
        notify_backup /root/scripts/redis_backup.sh
        notify_fault  /root/scripts/redis_fault.sh
        notify_stop  /root/scripts/redis_stop.sh

}

Slave节点

! Configuration File for keepalived

vrrp_script chk_redis {
    script "/root/scripts/redis_check.sh"    ###监控脚本
    interval 2                  ###监控时间
    }

 #同样要注意网卡

vrrp_instance VI_1 {
    state BACKUP        ###设置为BACKUP
    interface eth0      ###监控网卡
    virtual_router_id 51
    priority 10          ###比MASTRE权重值低
    authentication {
        auth_type PASS
        auth_pass 1q2w3e        ###密码与MASTRE相同
    }
    #设置额外的监控,里面的任意一个网卡出现问题,都会进入FAULT状态
    track_interface {
       eth0
    }
    track_script {
    chk_redis        ###执行上面定义的chk_redis
    }
    virtual_ipaddress {
        192.168.0.99 ####vip
    }
        notify_master /root/scripts/redis_master.sh
        notify_backup /root/scripts/redis_backup.sh
        notify_fault  /root/scripts/redis_fault.sh
        notify_stop  /root/scripts/redis_stop.sh
}

4. keepalive脚本

# Keepalive 定义的四种状态脚本说明
当进入Master状态时会呼叫notify_master
当进入Backup状态时会呼叫notify_backup
当发现异常情况时进入Fault状态呼叫notify_fault
当Keepalived程序终止时则呼叫notify_stop

redis_check.sh 检测redis是否正常脚本,正常则返回PONG,返回代码0,否则返回代码1

#!/bin/bash 

ALIVE=`/usr/local/bin/redis-cli PING`
if [ "$ALIVE" == "PONG" ]; then
  echo $ALIVE
  exit 0
else
  echo $ALIVE
  exit 1
fi

redis_master.sh 我被选入Master时,执行的脚本

#!/bin/bash

REDISCLI="/usr/local/bin/redis-cli"

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_fault.sh 当检测服务不正常是,执行fault脚本

#!/bin/bash 

LOGFILE=/var/log/keepalived-redis-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE

redis_stop.sh keepalive终止时写入日志

#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE

redis_backup.sh 进入slave时执行的脚本

#!/bin/bash 

REDISCLI="/usr/local/bin/redis-cli"

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 192.168.0.4 6379 >> $LOGFILE  2>&1  # IP为指定主redis的IP

这里backup 脚本主要说明一下,我的keepalive配置了不去抢占Master,也就是当我Master 宕机后,我master再次起来就是slave,这时就是执行redis_backup的时候了,我去指定我的Master去同步

5. 配置开机自启

chkconfig --add keepalived
chkconfig keepalived on

原文地址:https://www.cnblogs.com/adam19/p/11535983.html

时间: 2024-10-28 16:13:06

redis keepalive+redis 主从高可用的相关文章

部署redis主从高可用集群

部署redis主从高可用集群本文部署的redis集群是一主一从,这两台服务器都设置了哨兵进程,另外再加一台哨兵做仲裁,建议哨兵数量为基数172.16.1.187    redis主+哨兵172.16.1.188    redis从+哨兵172.16.1.189    哨兵以上系统均为CentOS6 在187,188,189上部署redis过程如下:(1)redis使用编译安装方式,所以需要安装编译基本组件# yum -y install gcc gcc-c++ make cmake cpp gl

Redis Sentinel(哨兵)主从高可用方案

环境搭建 三台服务器: 192.168.126.100(master) 192.168.126.110(slaver) 192.168.126.120(slaver) 拷贝192.168.126.100(主)服务器中的Redis到从机,保证Redis版本.环境一致: scp -r redis-3.2.0/ [email protected]192.168.126.110:/usr/local/ // 安装目录 scp -r redis/ [email protected]192.168.126.

redis 系列26 Cluster高可用 (1)

原文:redis 系列26 Cluster高可用 (1) 一.概述 Redis集群提供了分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能.在大数据量方面的高可用方案,cluster集群比Sentinel有优势.但Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.学习集群同样先了解一些原理方面包括:节点.槽指派.命令执行.重新分片,转向.故障转移.消息.后面再操作集群演示.

redis 系列27 Cluster高可用 (2)

原文:redis 系列27 Cluster高可用 (2) 一. ASK错误 集群上篇最后讲到,对于重新分片由redis-trib负责执行,关于该工具以后再介绍.在进行重新分片期间,源节点向目标节点迁移一个槽的过程中,可以会出现该槽中的一部分键值对保存在源节点中,另一部份键值对则保存在目标节点中. 当客户端向源节点发送一个与数据库键有关的命令时,并且命令要处理的数据库键正好就是正在被迁移的槽时,会出现二种情况的一种: (1) 源节点会先在自己的数据库中查找指定的键,如果找到的话,就会直接执行客户端

Heartbeat+Drbd+Mysql主从高可用实现

在上一篇中已经实现了MySQL服务的高可用,MySQL的数据目录放在drbd的共享目录中,并且只有获取到heartbeat资源的VIP才能挂载共享目录,从而启动MySQL服务,但是两端的数据使用drbd同步,保证发生故障时,服务和资源能够从一个节点切换到另外一个节点,下面是一个简略的架构图: 对于MySQL服务,一般在生产环境中都要做主从结构,从而保证数据的完整性,所以这次要在这个架构的前提下,在两个heartbeat节点下再部署一台MySQL从库,而主库是heartbeat集群中的一台(主库的

Keepalived+Mysql互为主从高可用安装配置

Keepalived+Mysql互为主从高可用安装配置环境介绍:keepalived_vip=192.168.1.210    (写虚拟ip)mysql_master01      eth0:192.168.1.211  eth1:172.20.27.211 (1核1G)mysql_master02      eth0:192.168.1.212  eth1:172.20.27.212 (1核1G) 1.安装mysql数据库(所有节点安装)  //此处省略安装mysql服务2.编辑my.cnf配

nopCommerce 3.9 大波浪系列 之 使用Redis主从高可用缓存

一.概述 nop支持Redis作为缓存,Redis出众的性能在企业中得到了广泛的应用.Redis支持主从复制,HA,集群. 一般来说,只有一台Redis是不可行的,原因如下: 单台Redis服务器会发生单点故障,并且单服务器需要处理所有的请求会导致压力较大. 单台Redis服务器内存容量有限,不易扩展. 第一个问题可以通过Redis主从模式实现单节点的高可用(HA). 从节点(slave)是主节点(master)副本,当主节点(master)宕机后,Redis 哨兵(Sentinel)会自动将从

浅谈小白如何读懂Redis高速缓存与持久化并存及主从高可用集群

一.简介 Redis是一个基于键值(K-V)的高速缓存软件,和他具有相同功能的软件有memcached,但其支持更为复杂的数据结构,例如:List,set,sorted set,同时redis具有持久性功能.redis究竟是什么?对于不同的应用场合,对redis的理解也不相同,如下有三种不同的理解. ①key value store(键值存储),是一个以键值形式存储的数据库,用来作为唯一的存储系统,同时借助于sentinel实现一定意义上的高可用. ②memory cached(内存缓存),是一

Redis集群服务器-高可用调研随笔[转]

今天改了一天的Bug,本想下午开始专研Redis命令集,结果也泡汤了.只能在下班的路上考虑下Redis集群服务器的高可用方案.随笔而已,尚未成型,仅作记录. 当然,我说的可能比较片面,欢迎拍砖.斧正. 一.Redis与MySQL对比 相同点: Master-Slave架构,集群架构下无法很好的完成数据拷贝,确保数据一致性. 支持数据文件持久化存储,但数据文件过大时,宕机重启可能存在安全隐患. 不同点: Redis时效性能远比MySQL要高得多,支持复杂的数据类型,基本上都是内存操作,效率远胜于M