10.20.200.128 (redis主+keepalived)
10.20.200.129 (redis从+keepalived)
Vip为:10.20.200.130
第一步:两台服务器分别安装redis,安装方法相同,只是配置文件略有不同
下载redis软件
#cd /usr/local/src
#wget http://download.redis.io/releases/redis-2.8.9.tar.gz
安装redis
#tar zxvf redis-2.8.9.tar.gz
#cd redis-2.8.9
#make
#make install
#mkdir -p /redis/{conf,data,logs}
#mkdir /redis/data/6379
#cd /redis/conf
主配置文件如下:
#vim redis-6379.conf
daemonize yes
pidfile /var/run/redis-6379.pid
port 6379
bind 0.0.0.0
timeout 300
loglevel notice
logfile stdout
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /redis/data/6379
maxclients 10000
maxmemory 512mb
appendonly no
appendfilename appendonly.aof
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
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
slave-read-only no
从配置文件拷贝主配置文件,然后加入如下两行即可:
slaveof 10.20.200.128 6379
第二步:安装keepalived
两台服务器安装方法相同:
安装依赖包
#apt-get install -y libpopt-dev openssl libssl-dev
下载keepalived软件
#wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
# tar zxvf keepalived-1.2.2.tar.gz
# cd keepalived-1.2.2
# ./configure
#make && make install
# mkdir /etc/sysconfig
# cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
# mkdir –p /etc/keepalived/scripts
# cp /usr/local/sbin/keepalived /usr/sbin/
修改keepalived启动脚本:(如果是centos的,不需要次步骤,debian需要修改,)
vim /etc/init.d/keepalived(修改红色部分)
……
<span style="color:#ff0000;">#. /etc/rc.d/init.d/functions
. /lib/lsb/init-functions</span>
# Source configuration file (we set KEEPALIVED_OPTIONS there)
. /etc/sysconfig/keepalived
RETVAL=0
prog="keepalived"
start() {
echo -n $"Starting $prog: "
<span style="color:#ff0000;"># keepalived ${KEEPALIVED_OPTIONS}
keepalived -D</span>
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && <span style="color:#ff0000;">touch /var/lock/$prog</span>
}
stop() {
echo -n $"Stopping $prog: "
killproc keepalived
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f <span style="color:#ff0000;background-color: rgb(255, 255, 255);">/var/lock/$prog</span>
}
……
condrestart)
if [ -f <span style="color:#ff0000;">/var/lock/$prog</span> ]; then
stop
start
fi
;;
……
主服务器配置:
#vim /etc/keepalived/keepalived.conf
vrrp_script chk_redis6379_pid {
script "/etc/keepalived/scripts/redis6379_check.sh"
interval 2
weight 2
}
#####
global_defs {
notification_email {
aaaa@bbbb.com
}
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
####
vrrp_instance VI_1 {
state Backup
nopreempt
priority 105
interface eth0
virtual_router_id 81
mcast_src_ip 10.20.200.128
authentication {
auth_type PASS
auth_pass 1111
}
track_interface {
eth0
}
track_script {
chk_redis6379_pid
}
virtual_ipaddress {
10.20.200.130/16 dev eth0
}
notify /etc/keepalived/scripts/master_backup.sh
}
#cd /etc/keepalived/scripts
#vim redis6379_check.sh
#!/bin/bash
A=`ps -ef | grep redis-6379.conf| grep -v grep|wc -l`
if [ $A -eq 0 ];then
cd /etc/keepalived/scripts
./redis6379_start.sh
if [ `ps -ef | grep redis-6379.conf| grep -v grep|wc -l` -eq 0 ];then
cd /etc/keepalived/scripts
./redis6379_start.sh
fi
fi
# vim redis6379_start.sh
#!/bin/sh
##start##
/usr/local/bin/redis-server /redis/conf/redis-6379.conf
#!/bin/bash
REDISCLI="/usr/local/bin/redis-cli"
VIP_IPADDR=`ip a | grep 10.20.200.130`
if [ "$VIP_IPADDR" != "" ];then
$REDISCLI SLAVEOF NO ONE && $REDISCLI CONFIG REWRITE
fi
if [ "$VIP_IPADDR" == "" ];then
$REDISCLI SLAVEOF 10.20.200.129 6379 && $REDISCLI CONFIG SET save "900 1 300 10 60 10000" && $REDISCLI CONFIG REWRITE
fi
#chmod 711 /etc/keepalived/scripts/*
从服务器配置:
#vim /etc/keepalived/keepalived.conf
vrrp_script chk_redis6379_pid {
script "/etc/keepalived/scripts/redis6379_check.sh"
interval 2
weight 2
}
#####
global_defs {
notification_email {
aaa@bbb.com
}
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
####
vrrp_instance VI_1 {
state Backup
nopreempt
priority 105
interface eth0
virtual_router_id 81
mcast_src_ip 10.20.200.129
authentication {
auth_type PASS
auth_pass 1111
}
track_interface {
eth0
}
track_script {
chk_redis6379_pid
}
virtual_ipaddress {
10.20.200.130/16 dev eth0
}
notify /etc/keepalived/scripts/master_backup.sh
}
#vim /etc/keepalived/scripts/redis6379_check.sh
#!/bin/bash
A=`ps -ef | grep redis-6379.conf| grep -v grep|wc -l`
if [ $A -eq 0 ];then
cd /etc/keepalived/scripts
./redis6379_start.sh
if [ `ps -ef | grep redis-6379.conf| grep -v grep|wc -l` -eq 0 ];then
cd /etc/keepalived/scripts
./redis6379_start.sh
fi
fi
#vim /etc/keepalived/scripts/redis6379_start.sh
#!/bin/sh
##start##
/usr/local/bin/redis-server /redis/conf/redis-6379.conf
#vim /etc/keepalived/scripts/master_backup.sh
#!/bin/bash
REDISCLI="/usr/local/bin/redis-cli"
VIP_IPADDR=`ip a | grep 10.20.200.130`
if [ "$VIP_IPADDR" != "" ];then
$REDISCLI SLAVEOF NO ONE && $REDISCLI CONFIG REWRITE
fi
if [ "$VIP_IPADDR" == "" ];then
$REDISCLI SLAVEOF 10.20.200.128 6379 && $REDISCLI CONFIG SET save "900 1 300 10 60 10000" && $REDISCLI CONFIG REWRITE
fi
#chmod 711 /etc/keepalived/scripts/*
最后启动主从的keepalived即可。
/etc/init.d/keepalived start
查看主从的redis是否已经启动,ip a查看vip地址是否启动。
如果redis主宕机了,会自动切换到从redis,从redis提升为主库,主库回复后,会自动变为从库,依次循环。
Redis命令:
Redis启动方法: redis-server /redis/conf/redis-6379.conf
Redis 关闭方法: redis-cli shutdown
验证主从是否同步:
在主服务器操作:
#redis-cli -p 6379
>set mouyu aaa
>get mouyu
aaa
在从库服务器验证:
#redis-cli -p 6379
>get mouyu
aaa
查看主从配置状态:redis-cli info replication