redis(密码验证) +keepalived 主从高可用

 

主机 master 192.168.2.28

主机 slave  192.168.2.29

vir ip192.168.2.32

 

背景:

1, master 的redis 服务挂掉会vir ip自动切换

2, master 的keepalived 服务挂掉会vir ip自动切换

3, master 主机宕机会vir ip自动切换

4,master 主机的redis 和keepalived 恢复后,vir ip 又会自动切回到 master 主机 

#一,redis 的安装配置

1 编译和安装所需的包:

 yum install gcc tcl gcc-c++ make wget lsof  -y

2 解压Redis(此处须自行去官网下载Redis安装包,并上传到服务器)

 tar -zxvf redis-3.2.8.tar.gz

3 进入Redis所在文件夹

 cd redis-3.2.8

4 编译安装Redis

make && make install

[root@redis-master redis-3.2.8]# cp redis.conf /etc/

 

服务启动脚本内容太多,你可以在网上随便找一下,因为内容太多我就不贴在文章里面了

 

介绍:5.1-5.10 主从配置都一样, 5.11 只有slave配置

 

5 更改配置文件,vi /etc/redis.conf

5.1 设置redis会后台启动.找到daemonize no 修改为 daemonize yes。

5.2 找到port 6379 修改为对应节点目录的端口号

5.3 找到bind这一行,bind后要修改为 0.0.0.0的IP地址。

5.4 找到 dir 这一行 指定数据文件的存放路径。设置为各个节点下的目录。目录结构类似为,需要预先建立目录

"/data/redis/"

5.5 开启持久化 appendonly yes

5.6 # 指定 AOF 文件名 appendfilename appendonly.aof

5.7# 关闭保护模式

protected-mode no

5.8   设置密码,在配置文件中加

requirepass  123456

5.9 , redis 设置了密码验证,所以在主从的配置文件中都要加

masterauth 123456
5.10 日志路径设置
logfile "/var/log/redis.log"

5.11, slave 主机的配置 redis.conf 文件最后添加从复制  

slaveof  192.168.2.47  6379

 

#二,keepalived 安装配置

1,安装基础库

yum -y install openssl-devel libnl3-devel ipset-devel iptables-devel libnfnetlink-devel net-snmp-devel

2,源码安装keepalived

1. tar zxf  keepalived-1.3.5.tar.gz 

2. cd keepalived-1.3.5 

3. ./configure --prefix=/usr/local/keepalived/ 

4. make 

5. make install 拷贝需要的文件: $ cp /usr/local/src/keepalived-1.3.5/keepalived/etc/init.d/keepalived /etc/init.d/keepalived 

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

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

$ mkdir -p /etc/keepalived/ 

$ cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

 /etc/keepalived/keepalived.conf是默认的配置文件

 

三,主从公共脚本 和keepalived 配置

3.2.1 Redis监控脚本

该脚本检测redis的运行状态,并在nginx进程不存在时尝试重新启动ngnix,如果启动失败则停止keepalived,准备让其它机器接管。

 

/etc/keepalived/scripts/check_redis.sh(主从不一样)

```   

  #!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

CHECK=`/usr/local/bin/redis-cli -h 192.168.2.28 -p 6379 -a vkel2018 PING`         #这里要改为相应的ip

if [ "$CHECK" == "PONG" ] ;then

      echo $CHECK

      exit 0

else

      echo $CHECK

      service stop keepalived #可确保让出MASTER

      exit 1

fi

```

3.2.2 redis_fault.sh  (主从都一样)

vim /etc/keepalived/scripts/redis_fault.sh

```

    # !/bin/bash

    LOGFILE=/usr/local/src/redis-2.8.19/keepalived-redis-state.log

    echo "[fault]" >> $LOGFILE

    date >> $LOGFILE

  ```

 3.2.3 redis_stop.sh   (主从都一样)

vim /etc/keepalived/scripts/redis_stop.sh

```

    # !/bin/bash

    LOGFILE=/usr/local/src/redis-2.8.19/keepalived-redis-state.log

    echo "[stop]" >> $LOGFILE

    date >> $LOGFILE

```

3.3 keepalived scripts for redis

  为redis配置keepalived所需要的脚本。

3.3.1 Redis Master scripts

  在redis master配置:

   vim/etc/keepalived/scripts/redis_master.sh

```

#!/bin/bash

REDISCLI="/usr/local/bin/redis-cli"

LOGFILE="/var/log/keepalived-redis-state.log"

echo "[master]" >> $LOGFILE

date >> $LOGFILE

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

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

$REDISCLI -h 192.168.2.28 -p 6379 -a 123456 SLAVEOF 192.168.2.29 6379 >> $LOGFILE 2>&1

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

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

$REDISCLI -h 192.168.2.28 -p 6379 -a 123456 SLAVEOF NO ONE >> $LOGFILE 2>&1

```

 

vim /etc/keepalived/scripts/redis_backup.sh

```

#!/bin/bash

REDISCLI="/usr/local/bin/redis-cli"

LOGFILE="/var/log/keepalived-redis-state.log"

echo "[backup]" >> $LOGFILE

date >> $LOGFILE

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

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

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

$REDISCLI -h 192.168.2.28 -p 6379 -a 123456 SLAVEOF 192.168.2.29 6379 >> $LOGFILE 2>&1

```

 

3.3.2 Redis Backup scripts

 和3.3.1节的配置基本一样,只是脚本中redis的IP为原master主机的IP。

  在redis backup配置:

 vim /etc/keepalived/scripts/redis_master.sh

```

 #!/bin/bash

REDISCLI="/usr/local/bin/redis-cli"

LOGFILE="/var/log/keepalived-redis-state.log"

echo "[master]" >> $LOGFILE

date >> $LOGFILE

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

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

$REDISCLI -h 192.168.2.29 -p 6379 -a 123456 SLAVEOF 192.168.2.28 6379 >> $LOGFILE 2>&1

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

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

$REDISCLI -h 192.168.2.29 -p 6379 -a 123456 SLAVEOF NO ONE >> $LOGFILE 2>&1

```

 

vim /etc/keepalived/scripts/redis_backup.sh

```

#!/bin/bash

REDISCLI="/usr/local/bin/redis-cli"

LOGFILE="/var/log/keepalived-redis-state.log"

echo "[backup]" >> $LOGFILE

date >> $LOGFILE

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

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

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

$REDISCLI -h 192.168.2.29 -p 6379 -a 123456 SLAVEOF 192.168.2.28 6379 >> $LOGFILE 2>&1

```

 

3.4 配置keepalived.conf

keepalived.conf样例

 

```

! Configuration File for keepalived

    global_defs {

        router_id redis

    }

     

    vrrp_script chk_redis {

        script "/etc/keepalived/scripts/check_redis.sh"

        interval 4

        fall 2

        rise 1

    }

     

    vrrp_instance VI_REDIS {

        state MASTER              #slave 主机改为  BACKUP

        interface eth1

        virtual_router_id 51

        priority 100

        advert_int 1

        nopreempt

     

        authentication {

            auth_type PASS

            auth_pass 11111

        }

     

        virtual_ipaddress {

            192.168.2.49

        }

     

        track_script {

            chk_redis

        }

     

        notify_master /etc/keepalived/scripts/redis_master.sh

        notify_backup /etc/keepalived/scripts/redis_backup.sh

        notify_fault /etc/keepalived/scripts/redis_fault.sh

        notify_stop /etc/keepalived/scripts/redsi_stop.sh

    }

 

```

注意,在同一个网段内的,若为不同的应用做高可用,不同应用使用不同的VIP,那么vrrp_instance的名字(这里是VI_REDIS)、virtual_router_id在不同的高可用实例必须设置不同的值区分开。否则keepalived会报如下错误:

Aug 11 11:28:36 localhostKeepalived_vrrp[16958]: (VI_1): received an invalid ip number count 1, expected2!

Aug 11 11:28:36 localhostKeepalived_vrrp[16958]: bogus VRRP packet received on eth1 !!!

Aug 11 11:28:36 localhostKeepalived_vrrp[16958]: VRRP_Instance(VI_1) Dropping received VRRP packet...

以上是keepalived MASTER节点配置文件/etc/keepalived/keepalived.conf的配置信息。在BACKUP节点,只需把vrrp_instance->state改为BACKUP,vrrp_instance->priority改为99即可。

在默认的keepalive.conf里面还有 virtual_server,real_server 这样的配置,我们这用不到,它是为lvs准备的。 notify 可以定义在切换成MASTER或BACKUP时执行的脚本,如有需求请自行google。

  配置选项说明

global_defs

☉notification_email: keepalived在发生诸如切换操作时需要发送email通知地址,后面的 smtp_server 相比也都知道是邮件服务器地址。也可以通过其它方式报警,毕竟邮件不是实时通知的。

☉router_id: 机器标识,通常可设为hostname。故障发生时,邮件通知会用到

vrrp_instance

☉state : 指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER

☉interface: 实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的,可以用ifconfig命令查看网卡。

☉mcast_src_ip: 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址

☉virtual_router_id: 这里设置VRID,这里非常重要,相同的VRID为一个组,他将决定多播的MAC地址

☉priority: 设置本节点的优先级,优先级高的为master

☉advert_int: 检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常

☉authentication: 定义认证方式和密码,主从必须一样,样例用的是密码方式。

☉virtual_ipaddress: 这里设置的就是VIP,也就是虚拟IP地址,他随着state的变化而增加删除,当state为master的时候就添加,当state为backup的时候删除,这里主要是有优先级来决定的,和state设置的值没有多大关系。这里可以设置多个虚拟IP地址,类似于一个域名可以解析对应多个IP地址。

☉track_script: 引用VRRP脚本,即在 vrrp_script 部分指定的名字。每隔vrrp_script->interval时间运行脚本,如果监控服务有异常则改变优先级,并最终引发主备切换。

vrrp_script

告诉 keepalived 在什么情况下切换,所以尤为重要。可以有多个 vrrp_script

☉script : 自己写的检测脚本。也可以是一行命令如killall-0 nginx

☉interval4 : 每4s检测一次,这里要大于监控脚本执行的时间,监控脚本会执行超时,☉keepalived会发送SIGTERM信号结束监控脚本的执行。

☉weight-5 : 检测失败(脚本返回非0)则优先级 -5

☉fall 2: 检测连续 2 次失败才算确定是真失败。会用weight减少优先级(1-255之间)

☉rise 1: 检测 1 次成功就算成功。但不修改优先级

4.1启动keepalived

在Redis Master和Redis Backup上将keepalived启动

启动keepalived:

service keepalived start

或者

/etc/init.d/keepalived start

或者

/usr/local/keepalived/sbin/keepalived -f/etc/keepalived/keepalived.conf -

查看进程,正常会有三个进程

[root@localhost ~]# ps -ef | grepkeepalived

root 3870 1 0 14:46 ? 00:00:00 keepalived -D

root 3872 3870 0 14:46 ? 00:00:00 keepalived -D

root 3873 3870 0 14:46 ? 00:00:00 keepalived -D

root 3887 18774 0 14:46 pts/1 00:00:00 grep keepalived

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值