admin 管理员组

文章数量: 887021


2024年1月17日发(作者:发的头条视频为什么突然没有播放了)

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. 安装keepalived

wget /software/

tarzxvf

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/6.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/

global_defs {

router_id LVS_DEVEL

}

vrrp_scriptMonitor_Redis {

script "/home/bbcv/redis/redis_"

interval 3 #每3秒执行一次

weight 2

}

# VIP1

vrrp_instance VI_1 {

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

interfaceeth0

virtual_router_id55

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

advert_int 1 #检查间隔

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

authentication {

auth_type PASS

auth_pass 1111

}

notify_master/home/bbcv/redis/redis_

notify_backup/home/bbcv/redis/redis_

track_script {

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

}

virtual_ipaddress {

192.168.20.110

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

}

}

启动keepalived

servicekeepalived start

2.

redis_脚本

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

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

chmod +x redis_

#!/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/

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|greprole|awk -F ":" '{print $2}'`

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

if [ $? -eq0 ]; 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 [ $? -eq0 ]; 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

3.

redis_脚本

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

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

chmod +x redis_

#!/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/

for p in $port

do

{

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

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

sleep 1

}

done

4.

redis_

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

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

chmod +x redis_

#!/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/

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

5. 安装redis

1.新建文件夹,如mkdirredis

2.将拷入其中

3.解压并进入主目录

install(Ubuntu上需要sudo执行)

6.修改配置文件

修改如下:

daemonize no 改为 daemonize yes

取消注释:

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

syslog-facility local0

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

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

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

需要执行 mmit_memory=1 修改内核参数

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

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中同步数据


本文标签: 端口 切换 脚本 部署 修改