redis主从复制及keepalived方式实现高可用测试

前言:

redis高可用有Sentinel、Cluster等多种方式,本文主要介绍keepalived方式。

架构:

配置:

hostname ip os redis版本 keepalived版本 备注
redis-master 172.27.9.30 Centos7.3.1611 4.0.10 1.3.5 关闭防火墙和selinux
redis-slave 172.27.9.31 Centos7.3.1611 4.0.10 1.3.5 关闭防火墙和selinux

一、redis安装

redis安装有yum和编译两种方式,本文以编译方式安装,参考文档为官网安装文档

1.gcc安装

[[email protected] ~]# yum -y install gcc

2.下载安装包

[[email protected] ~]# wget http://download.redis.io/redis-stable.tar.gz

3.解压编译

[[email protected] ~]# tar xvzf redis-stable.tar.gz
[[email protected] ~]# cd redis-stable
[[email protected] redis-stable]# make
[[email protected] redis-stable]# make install

4.修改配置文件

[[email protected] redis-stable]# mkdir /etc/redis[[email protected] redis-stable]# mkdir -p /var/redis/6379
[[email protected] redis-stable]# cp redis.conf /etc/redis/6379.conf
[[email protected] redis-stable]# cd /etc/redis/
[[email protected] redis]# cp 6379.conf 6379.conf.bak
[[email protected] redis]# grep -Ev '^$|#' 6379.conf.bak > 6379.conf

主要配置修改如下:

#bind 127.0.0.1
protected-mode no
daemonize yes
pidfile /var/run/redis_6379.pid
logfile /var/log/redis_6379.log
dir /var/redis/6379

5.制作启动服务

[[email protected] redis-stable]# cp utils/redis_init_script /etc/init.d/redis_6379

6.启动服务并加入开机启动

[[email protected] redis]# service redis_6379 start
[[email protected] redis]# chkconfig redis_6379 on

7.RedisDesktopManager管理工具

该工具为redis图形化管理工具

软件下载:https://pan.baidu.com/s/1no0IWcIEBapfehNi8dfCfw 密码:7dvc

连接设置:

连接后效果

二、redis主从复制及持久化

1.从服务器设置

redis主从复制很简单,只需要在从服务器配置文件新增一条配置即可

[[email protected] redis]# sed -i '$a slaveof 172.27.9.30 6379' /etc/redis/6379.conf

2.主从测试

2.1主机上写入值

[[email protected] ~]# redis-cli set test-key abc
OK

查看从机redis键值:

2.2从机写入值

[[email protected] redis]# redis-cli set test-key 123
(error) READONLY You can't write against a read only slave.

发现报错,处于slave状态redis无法写入。

3.持久化

redis持久化有RDB和AOF两种方式,默认持久化为RDB方式,关闭默认持久化只需要把默认配置注释就行:

#save 900 1
#save 300 10
#save 60 10000

三、keepalived安装配置

1.keepalived安装

[[email protected] ~]# yum -y install keepalived

2.keepalived配置

[[email protected] ~]# more /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id master      #router_id 机器标识,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
}
  
vrrp_script chk_redis {
  script "/etc/keepalived/redis-check.sh"
  interval 2    #健康检查周期
  weight 30     #优先级变化幅度
  fall 2        #尝试两次都成功才成功
  rise 2        #尝试两次都失败才失败
}
 
vrrp_instance VI_1 {            #vrrp实例定义部分
    state MASTER               #设置lvs的状态,MASTER和BACKUP两种,必须大写 
    interface ens33               #设置对外服务的接口
    virtual_router_id 100        #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示 
    priority 100               #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
    advert_int 1              #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {           #设置验证类型和密码
        auth_type PASS         #主要有PASS和AH两种
        auth_pass 1111         #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
    }
    virtual_ipaddress {         #设置虚拟ip地址,可以设置多个,每行一个
        172.27.9.100 
    }
    track_script {              #执行脚本chk_redis
        chk_redis
    }
    
notify_master "/etc/keepalived/redis-master.sh" #指定当切换为master时,执行的脚本
}

相比master,slave配置有3点不同:

router_id slave
state BACKUP 
priority 90

3.启动并设置开机启动

[[email protected] ~]# systemctl start keepalived
[[email protected] ~]# systemctl enable keepalived

四、expect安装

[[email protected] ~]# yum -y install expect

expect是一个提供自动交互的工具,本文notify_master中的脚本会使用到。

五、高可用脚本

1.redis-check.sh脚本

[[email protected] keepalived]# more redis-check.sh 
#!/bin/sh
rediscli="/usr/local/bin/redis-cli"
logfile="/var/log/redis_6379.log"
result=$($rediscli ping)
echo $result
echo "-------------------redis-check-------------------" >> $logfile
date >> $logfile
if [ $result == "PONG" ]; then : 
   echo "Success: the result is $result" >> $logfile 2>&1
   exit 0 
else 
   echo "Failed:the result is $result " >> $logfile 2>&1
   exit 1 
fi

该脚本为对redis状态检查

2.redis-master.sh脚本

[[email protected] keepalived]# more redis-master.sh
#!/bin/bash
rediscli="/usr/local/bin/redis-cli"
logfile="/var/log/redis_6379.log"
sync=`$rediscli info replication|grep master_sync_in_progress|awk -F: '{print $2}'|sed 's/\r//'`
#sync=`/usr/local/bin/redis-cli info replication|grep master_sync_in_progress|awk -F: '{print $2}'`
echo $sync
echo "-------------------change to master-------------------" >> $logfile 2>&1
date >> $logfile
if [ $sync == 0 ]; then :
    echo "the master_sync_in_progress is 0 and excute slaveof no one" >>$logfile 2>&1
    $rediscli slaveof no one
elif [ $sync == 1 ]; then :
    sleep 10
    $rediscli slaveof no one
else
    echo "the host is master,do nothing" >>$logfile 2>&1
fi
/etc/keepalived/exp.sh 172.27.9.31 monitor >>$logfile 2>&1

该脚本为本文高可用切换的关键。

monitor为31的root密码;slave脚本的ip应改为172.27.9.30;该脚本为服务器切换为master时执行的脚本,首先会检查切换前与master的主从同步是否完成,然后利用expect工具跳到另一台服务器将其redis状态更改为slave。

3.exp.sh脚本

[[email protected] keepalived]# more exp.sh
#!/usr/bin/expect -f
set ip [lindex $argv 0 ]
set password [lindex $argv 1 ]
set timeout 30
spawn ssh [email protected]$ip
expect {
"*yes/no" { send "yes\r"; exp_continue}
"*password:" { send "$password\r";exp_continue }
}
expect "#*"  
send "/usr/local/bin/redis-cli slaveof 172.27.9.30 6379\r"  
send  "exit\r"  
expect eof

slave脚本中的ip为172.27.9.31;该脚本作用是跳到另一台服务执行slaveof命令。

六、测试

1.模拟redis服务异常

操作:停掉master的redis服务

预期:vip漂移,slave主机的redis状态切换为master

测试过程:

1.1停止master的redis服务

[[email protected] keepalived]# service redis_6379 stop

1.2查看虚ip

发现vip由30漂移至31

1.3查看redis状态

[[email protected] keepalived]# redis-cli info replication

31的redis状态切换为master

1.4回切

启动30的redis服务

[[email protected] keepalived]# service redis_6379 start

查看vip和redis状态

30:

31:

结论:redis服务异常时会发生切换,从机会切换为master状态对外提供服务。

2.模拟keepalived服务异常

操作:停掉master的keepalived服务

预期:vip漂移,master的redis状态切换为slave,slave的redis状态切换为master

测试过程:

2.1停止master的keepalived服务

[[email protected] keepalived]# systemctl stop keepalived

2.2查看vip和redis状态

30:

31:

vip由30漂移至31且主从发生反转;开启keepalived服务会触发回切。

结论:keepalived服务异常时会发生切换,主从会反转。

3.模拟master宕机

操作:master关机

预期:vip漂移,slave的redis状态切换为master

测试过程:

3.1master服务器关机

[[email protected] ~]# init 0

3.2查看vip和redis状态

vip漂移至31且状态切换为master;30开机会触发回切。

结论:master宕机时会发生切换,从机切换为master状态对外提供服务。

至此完成redis高可用测试。

原文地址:http://blog.51cto.com/3241766/2156226

时间: 2024-11-11 05:36:41

redis主从复制及keepalived方式实现高可用测试的相关文章

基于keepalived的nginx高可用

#nginx,keepalived安装略过 MASTER 节点配置文件(192.168.1.11) vi /etc/keepalived/keepalived.conf global_defs { ##keepalived自带的邮件提醒需要开启sendmail服务.建议用独立的监控或第三方SMTP ##标识本节点的字条串,通常为 hostname router_id 192.168.1.11 } ##keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance

inotify+rsync+mysql主主复制+keepalived实现zabbix高可用

思路:主备机通过inotify+rsync实现文件同步,通过mysql主主复制实现数据同步,同一时刻只有一台服务器能对外提供zabbix服务,web端登陆虚ip访问,被监控主机通过配置虚ip来完成监控. 配置: 主机 ip 操作系统 zabbix版本 mysql版本 inotify版本 rsync版本 备注 zabbix-server01 172.27.9.80 Centos7.3.1611 zabbix_server (Zabbix) 3.4.10 5.7.22 3.14 3.1.2 关闭防火

RabbitMq 基于 keepalived+haproxy实现高可用

1  概述 rabbitmq作为消息队列,广泛用于生产环境,但是,如果单节点,将导致故障后,生产环境不可用,因此,需要部署高可用环境 本文将介绍基于keepalived+haproxy实现rabbitmq的高可用 rabbitmq的集群中,所有节点都可读写,因此,可用haproxy调度到后端的任意一台rabbitmq上. 环境准备 三个节点mq-01 mq-02 mq-03 ,这里服务器复用了redis的服务器节点,所以机器名忽略. 添加hosts文件 #这一步很关键,所有的节点都要配置一样,否

整个MHA+keepalived+lvs+mysql高可用架构配置说明

整个MHA+keepalived+lvs+mysql高可用架构配置说明1.1. 环境简介1.1.1.vmvare虚拟机,系统版本CentOS7.5 x86_64位最小化安装,mysql的版本5.7.21,1.1.2.虚拟机器的ssh端口均为默认22,1.1.3.虚拟机的iptables全部关闭,1.1.4.虚拟机的selinux全部关闭,1.1.5.虚拟机服务器时间全部一致 ntpdate 0.asia.pool.ntp.org1.1.6.3台机器的ssh端口为22**1.2.此次试验采用的是3

基于keepalived的Haproxy高可用配置

一.概述: HAProxy是一个用于4层或7层的高性能负载均衡软件,在大型网站的大型Web服务器群集中,HAProxy可用来替代专业的硬件负载均衡设备,节省大量的开支. 通常情况下,为了避免整个体系中出现单点故障,在至关重要的架构中,都需要部署备份设备,同样,负载均衡设备也不能部署单台,一旦主设备出现问题之后,备份设备可对主设备进行接管.实现不间断的服务,这便是Keepalived的作用. 于是,HAProxy和Keepalived的组合便成了省钱高效的Web服务器负载均衡架构. 拓扑图: 二.

MySQL主从复制、读写分离、高可用集群搭建

MySQL主从复制.读写分离.高可用集群搭建  一.服务介绍   1.1 Keepalived     Keepalived,见名知意,即保持存活,其目的是解决单点故障,当一台服务器宕机或者故障时自动切换到其他的服务器中.Keepalived是基于VRRP协议实现的.VRRP协议是用于实现路由器冗余的协议,VRRP协议将两台或多台路由器设备虚拟成虚拟设备,可以对外提供虚拟路由器IP(一个或多个),即漂移IP(VIP). 1.2 ProxySQL ProxySQL是一个高性能,高可用性的MySQL

keepalived+nginx实现高可用and负载均衡集群

keepalived+nginx实现高可用and负载均衡集群 前言 因生产环境需要,现需要搭建一个前端为nginx的HA双向互备.后端为nginx代理的loadbalance负载均衡集群.nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都 由主进程发出,Slave(work

keepalived+nginx搭建高可用and负载均衡集群

keepalived+nginx搭建高可用and负载均衡集群 前言 因生产环境需要,现需要搭建一个前端为nginx的HA双向互备.后端为nginx代理的loadbalance负载均衡集群.nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都由主进程发出,Slave(worke

HAProxy基于KeepAlived实现Web高可用及动静分离

    前言     软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载均衡.LVS是基于Linux操作系统实现的一种软负载,而Haproxy则是基于第三方应用实现的软负载.Haproxy相比LVS的使用要简单很多,但跟LVS一样,Haproxy自己并不能实现高可用,一旦Haprox节点故障,将会影响整个站点.本文是haprox基于keepalived实现web高可用及动静分离.     相关介绍         HAProxy     haproxy是一款提供