安装keepalived+redis实现主被切换

本文详细介绍了如何在Linux环境下搭建Redis主从复制架构,并结合Keepalived实现高可用集群的配置过程。包括Redis的安装、编译、配置文件解析,以及Keepalived的安装、配置脚本说明,旨在构建稳定、高可用的Redis服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装redis

*保证系统已安装有gcc和ruby

解压:tar -zxvf redis-4.0.10.tar.gz

进入redis目录进行编译:

make

进入src目录:

make install PREFIX=/root/redis

配置config文件;redis.conf

启动:./redis-server redis.conf

连接:./redis-cli  或  ./redis-cli -p 6379  或  ./redis-cli -h 127.0.0.0 -p 6379

 

主配置文件:

bind 0.0.0.0

protected-mode yes

port 6379

tcp-backlog 511

timeout 0

tcp-keepalive 300

daemonize yes

supervised no

pidfile /root/redis/redis_6379.pid

loglevel notice

logfile "/root/redis/redis.log"

databases 16

always-show-logo yes

save 900 1

save 300 10

save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

dir ./

slave-serve-stale-data yes

slave-read-only yes

repl-diskless-sync no

repl-diskless-sync-delay 5

repl-disable-tcp-nodelay no

slave-priority 100

lazyfree-lazy-eviction no

lazyfree-lazy-expire no

lazyfree-lazy-server-del no

slave-lazy-flush no

appendonly no

appendfilename "appendonly.aof"

appendfsync everysec

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

aof-use-rdb-preamble no

lua-time-limit 5000

slowlog-log-slower-than 10000

slowlog-max-len 128

latency-monitor-threshold 0

notify-keyspace-events ""

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

activerehashing yes

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

aof-rewrite-incremental-fsync yes

 

从配置文件:

bind 0.0.0.0

protected-mode yes

port 6379

tcp-backlog 3000

timeout 0

tcp-keepalive 300

daemonize yes

supervised no

pidfile /root/redis/redis_6379.pid

loglevel notice

logfile "/root/redis/redis.log"

databases 16

always-show-logo yes

save 900 1

save 300 10

save 60 10000

stop-writes-on-bgsave-error no

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

dir ./

slave-serve-stale-data yes

slave-read-only yes

repl-diskless-sync no

repl-diskless-sync-delay 5

repl-timeout 300

repl-disable-tcp-nodelay no

repl-backlog-size 512mb

repl-backlog-ttl 3600

slave-priority 100

maxclients 30000

lazyfree-lazy-eviction no

lazyfree-lazy-expire no

lazyfree-lazy-server-del no

slave-lazy-flush no

appendonly yes

appendfilename "appendonly.aof"

appendfsync everysec

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

aof-use-rdb-preamble no

lua-time-limit 5000

slowlog-log-slower-than 10000

slowlog-max-len 128

latency-monitor-threshold 0

notify-keyspace-events ""

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

activerehashing yes

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

aof-rewrite-incremental-fsync yes

 

此节点配置为主节点关闭AOP和RDB,从节点开启AOF和RDB,为了RDB配置方便,再启动redis后需要再主节点执行config set save ‘’

 

安装keepalived

安装需要的环境

yum install openssl-devel

yum install kernel-devel

解压:tar -zxvf keepalived-1.2.22.tar.gz

 

进入keepalived目录:

编译:./configure --prefix=/usr/local/keepalived

安装:make && make install

 

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

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

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

在/etc目录创建keepalived目录,在keepalived目录下配置keepalived.conf文件

 

将keepalived添加为系统服务:chkconfig –add keepalived

设置为开机启动:chkconfig keepalived on

服务启停:

service keepalived start/stop/restart

观察日志:

在/var/log 目下下的message文件

 

keepalived.conf主节点:

! Configuration File for keepalived

global_defs {

   router_id REDIS_CHECK

}

vrrp_script chk_redis {

     script "/root/shell/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 9

    priority 170

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.91.9

    }

    track_script {

         chk_redis

    }

    notify_master /root/shell/redis_master.sh

    notify_backup /root/shell/redis_slave.sh

    notify_fault /root/shell/redis_fault.sh

    notify_stop /root/shell/redis_stop.sh

}

 

从节点:

! Configuration File for keepalived

global_defs {

   router_id REDIS_CHECK

}

vrrp_script chk_redis {

     script "/root/shell/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 9

    priority 160

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.91.9

    }

    track_script {

         chk_redis

    }

    notify_master /root/shell/redis_master.sh

    notify_backup /root/shell/redis_slave.sh

    notify_fault /root/shell/redis_fault.sh

    notify_stop /root/shell/redis_stop.sh

}

 

脚本说明:

redis_check.sh       #keepalived检查redis状态

ALIVE=`/root/redis/redis-cli PING`

LOGFILE="/root/keepalived/logs/keepalived-redis-check.log"

data=`date "+%Y-%m-%d %H:%M:%S"`

data=$data" "$ALIVE

echo $data >> $LOGFILE

#date >> $LOGFILE

if [ $ALIVE == "PONG" ]; then :

#    echo $ALIVE >> $LOGFILE

    exit 0

else

#    echo $ALIVE >> $LOGFILE

    exit 1

fi

notify_master /root/shell/redis_master.sh     #当当前节点成为master时

REDISCLI="/root/redis/redis-cli"

LOGFILE="/root/keepalived/logs/keepalived-redis-state.log"

echo "[master]" >> $LOGFILE

date >> $LOGFILE

echo "Being master...." >> $LOGFILE 2>&1

echo "Run SLAVEOF cmd ..." >> $LOGFILE

$REDISCLI SLAVEOF 192.168.91.11 6379 >>$LOGFILE  2>&1

sleep 10

 #延迟10秒以后待数据同步完成后再取消同步状态

echo "Run SLAVEOF NO ONE cmd ..." >>$LOGFILE

$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1

notify_backup /root/shell/redis_slave.sh      #当当前节点成为backup时

REDISCLI="/root/redis/redis-cli"

LOGFILE="/root/keepalived/logs/keepalived-redis-state.log"

echo "[backup]" >> $LOGFILE

date >> $LOGFILE

echo "Being slave...." >> $LOGFILE 2>&1

sleep 15  #延迟15秒待数据被对方同步完成之后再切换主从角色

echo "Run SLAVEOF cmd ..." >> $LOGFILE

$REDISCLI SLAVEOF 192.168.91.11 6379 >>$LOGFILE  2>&1

notify_fault /root/shell/redis_fault.sh        #当当前节点出现故障

LOGFILE="/root/keepalived/logs/keepalived-redis-state.log"

echo "[fault]" >> $LOGFILE

date >> $LOGFILE

notify_stop /root/shell/redis_stop.sh        #当当前节点停止

LOGFILE="/root/keepalived/logs/keepalived-redis-state.log"

echo "[stop]" >> $LOGFILE

date >> $LOGFILE

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值