部署Redis+Keepalived高可用环境---Elastic Stack之四

1.安装redis服务

服务器角色:

主机名

ip

服务

elk1

192.168.1.223

jdk1.8,es7.2,logstash,

elk2

192.168.1.224

jdk1.8,es7.2,elasticsearch-head,

kibana,cerebro

elk3

192.168.1.225

jdk1.8,es7.2,redis2+keepalived

elk4

192.168.1.226

jdk1.8,redis1+keepalived+vip,

filebeat,metricbeat,rabbitmq,

Packbeat;heartbeat

1.安装redis服务及主从配置elk4(192.168.1.226),elk3(192.168.1.225)节点上都要操作
#yum install make gcc gcc-c++ tcl -y 
#wget http://download.redis.io/releases/redis-3.2.1.tar.gz
#tar xf redis-3.2.1.tar.gz -C /usr/local/
#cd /usr/local/redis-3.2.1/
#make
#cd /usr/local/redis-3.2.1/src
#make test  (如果这一步有报错,也需要处理)

2.添加相关文件及命令
#mkdir -p /usr/local/redis/bin/
#cd /usr/local/redis-3.2.1/src/
#cp -r redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel  /usr/local/redis/bin/
#cp -r  /usr/local/redis-3.2.1/redis.conf   /etc/

3.添加redis启动脚本
#vim /etc/init.d/redis
#!/bin/bash
#chkconfig: 2345 10 90
#description: Start and Stop redis
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
REDIS_CLI=/usr/local/redis/bin/redis-cli
PIDFILE=/var/run/redis.pid
CONF="/etc/redis.conf"

case "$1" in
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

4.添加执行权限
#chmod +x  /etc/init.d/redis 

5.设置开机自启
# chkconfig --add redis
# chkconfig redis on

6.创建redis状态日志和数据目录
#mkdir /var/log/redis/
#touch /var/log/redis/redis.log
#mkdir -p /var/redis/redis

7.redis主从配置(redis-master主节点的配置)
#vim /etc/redis.conf
port 6379
daemonize yes      #这个修改为yes
bind 0.0.0.0       #绑定的主机地址。说明只能通过这个ip地址连接本机的redis。最好绑定0.0.0.0;注意这个不能配置成127.0.0.1,否则复制会失败!用0.0.0.0或者本机ip地址都可以
pidfile /var/run/redis.pid
logfile /var/log/redis/redis.log
dir /var/redis/redis    #redis数据目录
appendonly yes           #启用AOF持久化方式
appendfilename "appendonly.aof" #AOF文件的名称
appendfsync everysec  #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,是受推荐的方式。
save 900 1          #启用RDB快照功能,启用的
save 300 10
save 60 10000      #即在多少秒的时间内,有多少key被改变的数据添加到.rdb文件里
slave-serve-stale-data yes  #默认就会开启
slave-read-only yes
dbfilename dump.rdb   #快照文件名称

注:另一个从节点redis-slave的redis.conf配置和上面基本差不多,只是多了下面一行配置:
slaveof 192.168.1.226 6379

说明: 通过简单的配置slave(master端无需配置),用户就能使用redis的主从复制,即只需在slave端的redis.conf文件中配置下面一行:slaveof <masterip> <masterport>表示该redis服务作为slave,masterip和masterport分别为master 的ip和port;

#192.168.1.226的redis.conf

#192.168.1.225的redis.conf

8.启动redis服务
# /etc/init.d/redis  start
# ps -ef | grep  redis

2.keepalived +redis配置

1.安装keepalived
#yum install -y  keepalived
#cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

2.redis-master主节点的高可用配置
#cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
  router_id  redis-master
}
vrrp_script  check_redis {
  script  "/etc/keepalived/scripts/redis_check.sh  127.0.0.1 6379"
  interval    2
  timeout   2
  fall         3
}

vrrp_instance redis {
    state MASTER
    interface ens33
    lvs_sync_daemon_interface ens33
    virtual_router_id 202
    priority 150
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.230
    }

    track_script {
    check_redis
    }
   notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 192.168.1.225 6379"
   notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 192.168.1.225 6379"
   notify_fault /etc/keepalived/scripts/redis_fault.sh
   notify_stop /etc/keepalived/scripts/redis_stop.sh
}

3.redis-slave主节点的高可用配置
#cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
  router_id  redis-slave
}

vrrp_script  check_redis {
  script  "/etc/keepalived/scripts/redis_check.sh  127.0.0.1 6379"
  interval  2
  timeout   2
  fall      3
}
vrrp_instance redis {
    state BACKUP
    interface ens33
    lvs_sync_daemon_interface ens33
    virtual_router_id 202
    priority 100
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.230
    }
    track_script {
    check_redis
    }

   notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 192.168.1.226 6379"
   notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 192.168.1.226 6379"
   notify_fault /etc/keepalived/scripts/redis_fault.sh
   notify_stop /etc/keepalived/scripts/redis_stop.sh
}


4.在redis-master和redis-slave两个节点机器上都要创建监控脚本(下面几个脚本,在两个节点上都要同样配置)首先配置监控脚本
#mkdir -pv /etc/keepalived/scripts

#cat /etc/keepalived/scripts/redis_check.sh
#!/bin/bash
ALIVE=`/usr/local/redis/bin/redis-cli -h $1 -p $2 PING`
LOGFILE="/var/log/keepalived-redis-check.log"
echo "[CHECK]" >> $LOGFILE
date >> $LOGFILE
if [ $ALIVE == "PONG" ]; then :
   echo "Success: redis-cli -h $1 -p $2 PING $ALIVE" >> $LOGFILE 2>&1
    exit 0
else
    echo "Failed:redis-cli -h $1 -p $2 PING $ALIVE " >> $LOGFILE 2>&1
    exit 1
fi

5.在redis-master主节点上创建notity_master与notify_backup脚本:
#vim /etc/keepalived/scripts/redis_master.sh
#!/bin/bash
REDISCLI="/usr/local/redis/bin/redis-cli -h $1 -p $3"
LOGFILE="/var/log/keepalived-redis-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ... " >> $LOGFILE
$REDISCLI SLAVEOF $2 $3 >> $LOGFILE 2>&1

#echo "SLAVEOF $2 cmd can't excute ... " >> $LOGFILE
sleep 10                   #延迟10秒以后待数据同步完成后再取消同步状态
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1

#vim /etc/keepalived/scripts/redis_backup.sh
#!/bin/bash
REDISCLI="/usr/local/redis/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 2>&1
$REDISCLI SLAVEOF $2 $3 >> $LOGFILE
sleep 100      #延迟100秒以后待数据同步完成后再取消同步状态
exit(0)

# vim /etc/keepalived/scripts/redis_fault.sh
#!/bin/bash
LOGFILE="/var/log/keepalived-redis-state.log"
echo "[fault]" >> $LOGFILE
date >> $LOGFILE

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

#chmod +x /etc/keepalived/scripts/*.sh

6.将redis-master主节点上的上面5个脚本直接复制到redis-slave节点上即可。
# scp -r /etc/keepalived/scripts/*.sh  elk3:/etc/keepalived/scripts/

7.设置环境变量(两个节点上都要设置)
#echo "export PATH=$PATH:/usr/local/redis/bin" >>/etc/profile
#source /etc/profile

8.启动两个节点上的keepalived服务
# systemctl enable keepalived 
# systemctl start keepalived 
# systemctl status keepalived 
# ps -ef|grep keepalived

9.查看下redis-master主节点,发现虚拟ip已经有了
#ip addr

 

 3.redis+keepalived故障切换测试

1.分别启动redis-mastr和redis-slave两个节点的redis和keepalived服务(如上已启动)
尝试通过VIP连接Redis:
#redis-cli -h 192.168.1.230 INFO|grep role
#redis-cli -h 192.168.1.226 INFO|grep role
#redis-cli -h 192.168.1.225 INFO|grep role

 连接成功,Slave也连接上来了。

2.尝试插入一些数据:
# redis-cli -h 192.168.1.230 SET Hello Redis
#从vip中获取数据
# redis-cli -h 192.168.1.230 GET  Hello
#主节点获取数据
#redis-cli -h 192.168.1.224 GET  Hello
#从节点获取数据
#redis-cli -h 192.168.1.225 GET  Hello


 参考链接:

https://www.cnblogs.com/kevingrace/p/9001975.html

https://www.cnblogs.com/kevingrace/p/910

原文地址:https://www.cnblogs.com/llwxhn/p/12942709.html