Keepalived+redis高可用 安装部署 redis-cli一次执行多条命令

Keepalived+redis高可用安装部署

简单介绍keepalived: keepalived将自己的ip地址扩展, 在自己机器ip地址的基础上使用虚拟ip (Vip) , 那么就可以使用虚拟ip访问到当前的机器, 而不是单纯的使用自己机器的ip地址, 当然如果仅只是生成一个虚拟ip地址的话是没什么用的, 但是如果配置两台或者多台服务器keepalived, 那么他们可以配置相同的虚拟ip, keepalived会根据内部脚本检测当前机器在这个虚拟ip地址上面的服务是否正常, 如果当前机器的服务挂掉, 就可以自动切换到另外一台机器的相同服务上, 保证了服务的高可用,


前言

提示:默认redis已经安装好了,可能还有些步骤缺少,后期在补充。


提示:以下是本篇文章正文内容,下面案例可供参考

一、安装部署

# 先安装依赖包,下面展示,有网络情况下的例子

yum update
yum install -y gcc gcc-c++  openssl-devel
# ------------------------------------------------------------------
cd /opt/cloudquery/env
tar -zxvf keepalived-1.4.3.tar.gz
cd keepalived-1.4.3
# ( yum install -y libnfnetlink-devel  如果make命令失败 说明./configure失败了,需要执行这个命令)
./configure --prefix=/usr/local/keepalived 

make && make install

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
mkdir -p /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp ./keepalived/etc/init.d/keepalived /etc/init.d/
chmod 755 /etc/init.d/keepalived


#编辑keepalived.service,将所有的字符串 “/usr/local/keepalived” 替换为空白,vi编辑器命令:【%s/\/usr\/local\/keepalived//g】
vi /lib/systemd/system/keepalived.service
:wq
# 刷新配置
systemctl daemon-reload

修改配置文件

# 修改文件中所有标注的地方
vi /etc/keepalived/keepalived.conf
# virtual_ipaddress  虚拟ip可以根据现场情况进行调整.但是主从一定要保持一致

执行上面所有的命令, 但是这个安装包是直接下载好上传到服务器上面的, 大家可以根据版本情况自己下载所使用的版本,已经基本完成keepalived的安装

# 启动
systemctl start keepalived
# 配置开机自启动
chkconfig keepalived on

二、使用步骤

1.配置文件内容

keepalived.conf

global_defs {
   router_id LVS_DEVEL1
   script_user root
   enable_script_security
}

# @warning
# 1.所有标注的地方均需要根据机器情况进行相应的修改.
# 2.vrrp_script 一定要放在 vrrp_instance 的上面


#==============================================  nginx  555===============================
vrrp_script chk_ng
{
    script "/etc/keepalived/scripts/ng/ng_check.sh"    #监控脚本
    interval 10
    fall 10
}
vrrp_instance VI_ng {
    state BACKUP
    interface ens192 # 改成主机的网卡名称
    virtual_router_id 555   # 为了方便统一, 直接修改为对应ip地址的参数即可, 避免重复 .主从一致  ( ID必须是网段里的唯一值,主从一致(避免与网段里其他安装的Keepalived服务冲突))
    mcast_src_ip 192.168.3.111 #  改成主机的IP
    priority 80
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.555 #改成自己的浮动IP
    }

    track_script {
        chk_ng
    }
}



#==============================================  Redis 主从  666============================
vrrp_script chk_redis 
{
    script "/etc/keepalived/scripts/redis/redis_check.sh"    #监控脚本 监控redis的状态如果故障切换到从机上面去 目录要放对
    interval 30  #redis监控检查时间
    fall 30   # 失败次数切换
}
vrrp_instance VI_redis {
    state MASTER    #  根据实际情况配置, 如果当前机器redis是主机,那么则配置MASTER  , 否则 BACKUP  , 从机需要修改为相反状态
#    state BACKUP
    interface ens192            #  改成主机的网卡名称
    virtual_router_id 666       # 为了方便统一, 直接修改为对应ip地址的参数即可, 避免重复 .主从一致  ( ID必须是网段里的唯一值) 可以修改为任意值 ,但是主机和从机的virtual_router_id 一定要一样.
    mcast_src_ip 192.168.3.999  #改成主机的IP
    priority 80
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.3.143 #这个值就是Redis对外开放的虚拟ip
    }
    track_script {
       chk_redis
    }
    notify_master "/etc/keepalived/scripts/redis/redis_master.sh  192.168.1.222 6379"  # 参数:192.168.1.2221 另外一台机器的ip地址(这是脚本的参数, 不是必须的,根据脚本的情况)
    notify_backup "/etc/keepalived/scripts/redis/redis_backup.sh  192.168.1.222 6379"  # 参数:192.168.1.222 另外一台机器的ip地址(这是脚本的参数, 不是必须的,根据脚本的情况)
}


2.脚本文件

redis_check.sh
检查redis是否正常的脚本,但是这个脚本是基于docker的环境编写的, 可以根据情况重新调整

# 这个脚本
LOGFILE="/var/log/keepalived-redis.log"
echo "[CHECK]  KA 启动ping redis "
date >> $LOGFILE
r=`docker ps | grep cloudquery-redis |wc -l`
echo $r >> $LOGFILE
if [ $r -gt 0 ]; then
    echo " $r Redis check=====>Success " >>$LOGFILE
    echo "==============================================="  >>$LOGFILE
    exit 0
else
    echo "Redis check =====>Failed"  >>$LOGFILE
    echo "==============================================="  >>$LOGFILE
    exit 1
fi

redis_master.sh
先将redis切换为从机同步一下另外一台机器的数据, 然后在切换为主机

#!/bin/bash
LOGFILE="/var/log/redis.log"
echo "切换为主机" >> $LOGFILE
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE
echo "Run MASTER cmd ..." >> $LOGFILE
docker exec -i cloudquery-redis redis-cli <<EOF
auth aaaaa  # 本机redis密码
config set masterauth aaaaa  # 主机redis密码 如果没有密码可以跳过这一步
SLAVEOF $1 $2  # 参数 可以直接写死 192.168.1.111 6379 
exit
EOF
sleep 3 #delay 10 s wait data async cancel sync
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
# <<EOF 括起来的命令可以使得redis-cli一次执行多条,一步一步执行
docker exec -i cloudquery-redis redis-cli <<EOF
auth aaaaa  # 本机redis密码
SLAVEOF NO ONE
exit
EOF
#  进入容器查看状态 可以忽略
docker exec -it  cloudquery-redis redis-cli  -a aaaa(密码) info replication
# 待完善,如果执行失败, 那么将当前机器直接切换为主机即可.保持可用状态
echo "If it is'f', it is a Master"   >> $LOGFILE
echo "Run SLAVEOF NO ONE cmd end" >> $LOGFILE

redis_backu.sh

#!/bin/bash
LOGFILE="/var/log/redis.log"
echo "切换为从机" >> $LOGFILE
date >> $LOGFILE
echo "SLAVEOF $1 $2 Run SLAVEOF cmd ..." >> $LOGFILE
docker exec -i cloudquery-redis redis-cli <<EOF
auth aaaaa # 本机redis密码
config set masterauth aaaaa  # 主机redis密码
SLAVEOF $1 $2  # 参数 可以直接写死 192.168.1.111 6379 
exit 
EOF
# 查看状态 aaaaa  是本机redis的密码
docker exec -it  cloudquery-redis redis-cli  -a aaaaa info replication
# 待完善,如果执行失败, 那么将当前机器直接切换为主机即可.保持可用状态
echo "If it is role:slaveof, it is a SLAVEOF"   >> $LOGFILE
echo "===========================================" >> $LOGFILE

该处使用的url网络请求的数据。


总结

主机配置完成后同样的步骤重新配置一遍从机的keepalived, 然后可以通过虚拟ip访问redis 测试虚拟ip是否正常
当主机redis挂掉之后keepalived检测到主机redis挂掉, 然后从机的keepalived切换到master状态, 执行 notify_master 中路径里面配置的脚本, 将redis切换为主机状态, 保证redis可用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值