redis主备部署方案

Redis部署方式采用主备的方式,通过keepalived来对外提供虚IP,并实现主备自动切换功能。

主实例A:192.168.20.30

备实例B:192.168.20.232

虚IP:192.168.20.110

正常工作时,虚IP在主实例A上,主实例A上的数据自动同步到备实例B上,当主实例A挂掉之后,备实例B将自动接管虚IP,并将redis转换为主模式,待原主实例A恢复后,A将自动切换成备模式,从B上同步数据,主备角色互换,实现融灾备份。

安装部署步骤如下:

  1. 1.       安装keepalived

wget http://www.keepalived.org/software/keepalived-1.2.6.tar.gz

tar zxvf keepalived-1.2.6.tar.gz

cd keepalived-1.2.6

./configure

如果报错

configure: error:

!!! OpenSSL is not properly installed on your system. !!!

!!! Can not include OpenSSL headers files.

解决办法:

yum -y install openssl-devel

yum -y install popt-devel

ln -s /usr/src/kernels/2.6.32-220.el6.x86_64/ /usr/src/linux

./configure

make

make install

cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

cp /usr/local/sbin/keepalived /usr/sbin/

mkdir /etc/keepalived

添加keepalived的配置项:

vi /etc/keepalived/keepalived.conf

global_defs {

router_id LVS_DEVEL

}

vrrp_script Monitor_Redis {

script "/home/bbcv/redis/redis_keepalive.sh"

interval 3 #每3秒执行一次

weight 2

}

# VIP1

vrrp_instance VI_1 {

state BACKUP           #主备服务器都设置成BACKUP

interface eth0

virtual_router_id 55

priority 100     # 备份服务上将100改为90

advert_int 1    #检查间隔

nopreempt     #设置为不抢占,注意这个配置只能设置在state为BACKUP的主机上,而且这个主机的priority必须比另外一台高

authentication {

auth_type PASS

auth_pass 1111

}

notify_master /home/bbcv/redis/redis_master.sh

notify_backup /home/bbcv/redis/redis_backup.sh

track_script {

Monitor_Redis #(调用redis进程检测脚本)

}

virtual_ipaddress {

192.168.20.110

#(如果有多个VIP,继续换行填写.)

}

}

启动keepalived

service keepalived start

  1. 2.       redis_keepalive.sh脚本

该脚本主要实现对redis进程进行监控,当检测到redis进程挂掉时,自动停止keepalived进程,使虚IP进行漂移

2  注意添加该脚本的可执行权限!

chmod +x redis_keepalive.sh

#!/bin/bash

time=$(date ‘+%Y-%m-%d %H:%M:%S‘ )

#redis部署路径

redispath=/home/bbcv/redis

#redis-cli部署路径

rediscli=$redispath/redis-2.0.0-rc4/redis-cli

if [ ! -d "logs" ]; then

mkdir $redispath/logs

fi

logfile=$redispath/logs/redis-state.log

oldfile=$logfile‘.‘$(date +%Y-%m-%d --date=‘30 days ago‘)

yesterdayfile=$logfile‘.‘$(date +%Y-%m-%d --date=‘1 days ago‘)

#把昨天的日志重命名

if [ -f $yesterdayfile ]

then

echo "OK"

else

mv $logfile $yesterdayfile >> $logfile 2>&1

echo "$time [$yesterdayfile] Move yesterdayfile Success!" >> $logfile

fi

#删除老的日志文件

if [ -f $oldfile ]

then

rm -f $oldfile >> $logfile 2>&1

echo "$time [$oldfile] Delete Old File Success!" >> $logfile

else

echo "no old file"

fi

#检测redis端口是否正常

status=`$rediscli -h 127.0.0.1 -p 6379 info|grep role|awk -F ":" ‘{print $2}‘`

$rediscli -h 127.0.0.1 -p 6379 info > /dev/null

if [ $? -eq 0 ]; then

echo "$time redis server is OK" >>$logfile

echo 目前状态为:$status >>$logfile

else

echo "$time no redis service found!" >>$logfile

sleep 2

# try to found it again

$rediscli -h 127.0.0.1 -p 6379 info > /dev/null

if [ $? -eq 0 ]; then

echo "$time redis server is OK" >>$logfile

echo 目前状态为:$status >>$logfile

#exit 0

else

echo "$time redis server error" >>$logfile

#stop keepalived

/etc/init.d/keepalived stop

echo "$time stop keepalived" >>$logfile

fi

fi

  1. 3.       redis_master.sh脚本

该脚本主要实现当keepalived切换到master时,执行slaveof no one语句把redis的端口转换为主模式

2  注意添加该脚本的可执行权限!

chmod +x redis_master.sh

#!/bin/sh

#本机IP地址

localip=127.0.0.1

#另一台服务器的地址

backip=192.168.20.232

#redis端口号

port="6379 9998 11111 14948"

time=$(date ‘+%Y-%m-%d %H:%M:%S‘ )

#redis部署路径

redispath=/home/bbcv/redis

#redis-cli部署路径

rediscli=$redispath/redis-2.0.0-rc4/redis-cli

#日志文件目录

logfile=$redispath/logs/redis-state.log

for p in $port

do

{

echo "$time redis $p端口切换成主端口" >>$logfile

$rediscli -h $localip -p $p slaveof no one >>$logfile 2>&1

sleep 1

}

done

  1. 4.       redis_backup.sh

该脚本主要实现当keepalived切换到master时,执行slaveof 主redisIP 端口 语句,把redis的端口转换为备模式,并同步主redis的数据

2  注意添加该脚本的可执行权限!

chmod +x redis_backup.sh

#!/bin/sh

#本机IP地址

localip=127.0.0.1

#另一台服务器的地址

backip=192.168.20.232

#redis端口号

port="6379 9998 11111 14948"

time=$(date ‘+%Y-%m-%d %H:%M:%S‘ )

#redis部署路径

redispath=/home/bbcv/redis

#redis-cli部署路径

rediscli=$redispath/redis-2.0.0-rc4/redis-cli

#日志文件目录

logfile=$redispath/logs/redis-state.log

for p in $port

do

{

echo "$time redis $p端口切换成$backip的备端口" >>$logfile

$rediscli -h $localip -p $p slaveof $backip $p  >>$logfile 2>&1

sleep 1

}

done

  1. 5.       安装redis

1.新建文件夹,如mkdir redis

2.将redis-2.2.13.tar.gz拷入其中

3.解压并进入主目录

4.make

5.make install(Ubuntu上需要sudo执行)

6.修改配置文件redis.conf

修改如下:

daemonize no 改为 daemonize yes

取消注释:

syslog-enabled no (改为syslog-enabled yes )

syslog-facility local0

已将修改后的redis.conf文件放入附件,不同需求还需再修改配置文件(如修改端口等)

7.在执行redis-server redis.conf启动时,可能会报如下错误:

Can‘t chdir to ‘/var/db/redis‘: No such file or directory

需要手动创建‘/var/db/redis‘文件夹

# WARNING overcommit_memory is set to 0! Background save may fail under low memory condition

需要执行 sysctl vm.overcommit_memory=1 修改内核参数

8.再次执行redis-server redis.conf可成功启动redis

  1. 6.       测试

1.查看当前redis是主还是备

/home/bbcv/redis/redis-2.0.0-rc4/redis-cli -h 127.0.0.1 -p 6379 info

2.在主redisA上新增一条数据,查看备redisB是否同步该数据

/home/bbcv/redis/redis-2.0.0-rc4/redis-cli -h 127.0.0.1 -p 6379

3.停止主redisA,查看虚IP是否切换到备redisB服务器,并查看备redisB服务器是否切换成主状态

ip a查看虚IP是否在本机上

4.恢复redisA,查看redisA是否从redisB中同步数据

百度原文

http://wenku.baidu.com/view/511754254b73f242336c5f72.html

时间: 2024-10-05 04:58:18

redis主备部署方案的相关文章

阿里云ECS部署Redis主备哨兵集群遇到的问题

一.部署 详细部署步骤:https://blog.csdn.net/lihongtai/article/details/82826809 Redis5.0版本需要注意的参数配置:https://www.cnblogs.com/ibethfy/p/9965902.html 二.遇到的问题 1.bind公网IP地址时,会出现异常:[Cannot assign requested address] 首先理解bind的含义:https://blog.csdn.net/cw_hello1/article/

电子邮件系统双机热备部署方案

双机热备部署 双机热备针对的是服务器的临时故障所做的一种备份技术,通过双机热备,来避免长时间的服务中断,保证系统长期.可靠的服务.企业为了避免服务器故障产生数据丢失等现象,旧的技术是利用RAID技术和数据备份技术,但是数据备份只能解决系统出现问题后的恢复.无论是硬件还是软件问题,都可能会造成邮件服务的中断,而RAID及数据备份技术恰恰就不能解决避免服务中断的问题. 发生宕机事故后到恢复服务器运行,再轻微的问题或者强悍的技术支持,服务器也会中断一段时间,可能会造成邮件的丢失,对于一些需要不间断在线

搭建和测试 Redis 主备和集群

本文章只是自我学习用,不适宜转载. 1. Redis主备集群 1.1 搭建步骤 机器:海航云虚机(2核4GB内存),使用 Centos 7.2 64bit 操作系统,IP 分别是 192.168.100.5(主) 和 192.168.100.6(备). Redis 版本:3.2.3 1.1.1 在主备节点上,做如下安装 sudo yum update sudo yum install epel-release sudo yum update sudo yum install redis sudo

如何将两个Redis主备实例建立全球灾备

华为云分布式缓存服务DCS,具有强大的功能,现在小编教大家如何在DCS管理控制台将两个Redis主备实例建立全球灾备.建立全球灾备,会对主实例和备实例进行升级,实例进程会重启,连接会中断.同时备实例会从主实例同步数据,原有的数据会被覆盖,需要谨慎操作.创建了全球灾备后,不同区域的实例可以相互同步数据.当前,该功能只在华北.华东.华南三个区域支持,请以控制台实际情况为准. 1 前提条件 已经创建了主实例和备实例,且实例要求如下:i. 缓存引擎类型,支持Redis 3.x.ii. 缓存实例类型,支持

Redis主备自动切换

Sentinel(哨兵)是用于监控redis集群中Master状态的工具. 一.Sentinel作用  1.Master状态检测   2.如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave;  3.Master-Slave切换后,master_redis.conf.slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,se

keepalived实现redis主备切换

试验目标: 1:主redis发生故障时,从redis自动切换为主redis. 2:主redis恢复正常后,自动降级为从redis. 试验环境: 主redis:192.168.189.138 从redis:192.168.189.131 VIP:192.168.189.123 主从redis均安装了keepalived与redis,redis已配置好主从.Redis端口44444. 1:制作redis监控与主备切换脚本: Redis监控脚本:(监控redis是否正常) # cat /usr/loc

生产环境下Redis主备配置(持久化)

1.redis简介 REmote DIctionary Server(Redis)是一个几乎key-value键值对的持久化数据库存储系统.redis和大名鼎鼎的Memcached缓存服务很像,但是redis支持的数据存储类型更丰富,包括string(字符串).list(链表).set(集合)和zset(有序集合)等. 这些数据类型都支持push/pop.add/remove及取交集.并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排序.与memcac

Redis - Keepalived + redis 主备热备切换

1. 热备方案 硬件:server两台,分别用于master-redis及slave-redis 软件:redis.keepalived 实现目标: 由keepalived对外提供虚拟IP(VIP)进行redis访问 主从redis正常工作,主负责处理业务,从进行数据备份 当主出现故障时,从切换为主,接替主的业务进行工作 当主恢复后,拷贝从的数据,恢复主身份,从恢复从身份 数据采用aof方式进行持久化存储,秒级备份,当出现故障后,损失数据不超过1s Keepalived提供以下服务: 对用户提供

Redis主备复制

Redis 支持 Master-Slave(主从)模式,Redis Server 可以设置为另一个 Redis Server 的主机(从机),从机定期从主机拿数据.特殊的,一个从机同样可以设置为一个 Redis Server 的主机,这样一来 Master-Slave 的分布看起来就是一个有向无环图,形成 Redis Server 集群,无论是主机还是从机都是 Redis Server,都可以提供服务. 在配置后,主机Master可负责读写服务,从机Slave只负责读.Redis 提高这种配置方