redis配置读写分离以及利用哨兵sentinel进行自动主从切换

redis利用哨兵(sentinel)进行主从切换,断断续续,自己终于通过配置验证了一下该功能,其中遇到过一些的问题,也是耗费了大量的时间才解决,接下来分享下配置的过程以及遇到的问题和解决方法。希望对各位有所帮助。

首先说一下实验环境:

redis软件:redis-3.2.1(安装在虚拟机的linux系统中)

宿主主机:window8.1 x64

secureCRT:宿主主机安装此软件来操作linux,这只是个人喜欢,大家可以不装。

对于redis在linux如何安装这里不进行说明,不懂的朋友可以自己百度,相信网上有很多相关的资料。在这里将要搭建的是一个主服务器,两个从服务器以及三个哨兵(sentinel)。其中主服务器用的端口为默认端口6379,两个从服务器的端口分别为6380和6381;三个哨兵(sentinel)的端口分别为26379、26380和26381.
安装好redis之后,我们拷贝三份出来,并且修改名字加以区分,这里分出几个文件夹,是比较清晰一点。如下:

redis-3.2.1:这个文件夹用作主服务器
redis_6380:这个文件夹用作从服务器
redis_6381:这个文件夹用作从服务器
redis_sentinel:这个文件夹用作哨兵配置

几个文件里的文件是一样的,内容如下:

配置主服务器

首先,我们进入到redis-3.2.1文件夹进行主服务器的配置,修改redis.conf文件如下:

1、bind 127.0.0.1 修改为bind 0.0.0.0,这样是允许任何机器都可以访问该服务器

2、daemonize no 修改为daemonize yes ,redis将以守护进程的方式运行,这样可以在redis服务启动的窗口中再可以进行其它操作

3、增加masterauth “redis”,这是设置从服务器和哨兵连接主服务器需要的密码,我这里设置为”redis“

4、增加requirepass “redis”,这是设置redis客户端或者远程机器连接redis服务器需要的密码,这里同样设为“redis”

至此,主服务器就算是配置好了。

配置从服务器

进入到redis_6380文件夹进行从服务器的配置,修改redis.conf文件如下:

1、bind 127.0.0.1 修改为bind 0.0.0.0

2、port 6379 修改为port 6380

3、daemonize no 修改为daemonize yes

4、增加slaveof 192.168.81.129 6379,指定当前服务器是哪个服务器的从服务器,这里指定当前服务器的主服务器是192.168.81.129:6379

5、增加masterauth “redis”,设置连接主服务器的密码

6、增加requirepass “redis”,这是设置redis客户端或者远程机器连接redis服务器需要的密码,这里同样设为“redis”(6381的密码也设为“redis”)

至此,6380这台从服务器的配置文件就修改完成了。

对于6381这台从服务器与修改6380的步骤一样,只是在第二步中记得把端口改为6381

至此,一个主服务器和两个从服务器的配置已经完成了。在这里我们先验证下配置是否正确:

1、首先启动主服务器(按照图中命令顺序输入即可,命令含义不懂自己百度):

通过info replication命令我们可以看到,当前的服务器角色是主服务器(role master),并且没有从服务器(connected_slaves:0)

2、新开一个secureCRT窗口,并进入到6380从服务器文件夹中,启动6380redis服务器:

通过info replication命令我们可以看到,当前服务器的角色是从服务器,并且主服务器是192.168.81.129:6379,这跟我们在配置文件中配置的一致(slaveof 192.168.81.129 6379),所以主从配置是正确的。用同样的方法启动6381的从服务器:

这时候,我们再回到主服务器的窗口运行info replication命令,可以看到已经有两个从服务器已经连上来了:

当我们在主服务器中设置一个键,在从服务器中可以读到这个键的值,并且从服务器不能进行写入操作,这就实现了主写从读的效果(读写分离):

主服务器写:

从服务器读:

从服务器写入被拒绝:

至此,就实现了主从服务器的读写分离,接下来将介绍如何利用哨兵对主从进行自动切换。

首先,另开一个secureCRT窗口,进入到redis_sentinel文件夹中,文件夹里有一个配置文件sentinel.conf。这个配置文件就是哨兵的配置文件,我们对这个文件拷贝出来三份,名字分别为:sentinel_6379.conf、sentinel_6380.conf和sentinel_6381.conf:

编辑sentinel_6379.conf配置文件:

1、添加 bind 0.0.0.0 配置信息,这是为了远程机器可以连接当前哨兵;如果不需要被远程机器连接,可以不配置此选项;

2、添加要监控主机的信息:

对”sentinel monitor mymaster 192.168.81.129 6379 2“解释:

mymaster :为主服务器起的名字;

192.168.81.129 6379:主服务器的ip和端口号

2:代表有2个哨兵认为主服务器主观下线时,则认为主服务器是客观下线了,可以执行主从切换,并进行故障转移操作

对“sentinel auth-pass mymaster redis”解释:

mymaster :为主服务器起的名字;

redis:为连接主服务器需要的密码,即主服务器redis.conf中的masterauth属性的值

至此,一个哨兵的配置就已经完成了。对sentinel_6380.conf和sentinel_6381的修改步骤与sentinel_6379.conf的修改步骤一致。但是sentinel_6380.conf文件里的端口要配为26380:

sentinel_6381.conf文件里的端口要配为26381:

至此,主从配置和哨兵配置的任务就算全部完成了。下面将验证下当主服务器断线时候,哨兵是否能自动进行主从切换和故障转移。

首先我们先启动主服务器并连上客户端:

接着新开一个secureCRT窗口,启动6380的从服务器并启动客户端:

接着新开一个secureCRT窗口,启动6381的从服务器并启动客户端:

接着新开一个secureCRT窗口,进入到redis_sentinel文件夹,启动端口号为26379的哨兵:

从打印的日志我们可以知道,当前哨兵的ID,哨兵监控的主服务器配置以及从服务器配置

用同样的方法启动端口号为26380和26381的哨兵:

至此,我们添加了三个哨兵对主服务器(192.168.81.129 6379)进行监控。

故障演示

回到启动主服务器的secureCRT窗口,并shutdown掉主服务器:

等30秒时间(30秒是在哨兵的配置文件“sentinel down-after-milliseconds mymaster 30000”这一行指定的,当哨兵发通讯消息给主服务器,如果30秒之后没有收到主服务器的回复,则认为主观下线)我们分别看下三个哨兵打印的日志信息:

26379日志信息:

26380日志信息:

26381日志信息:

这三个哨兵打印的信息基本上一致,从日志中我们可以看到,现在主服务器已经切换到192.168.81.129:6380这台redis服务器,我们在6380上通过info replicaiton查看是否已经是正确切换:

从显示的信息中可以知道,6380这台redis服务器确实升级为主服务器了。当我们重新启动6379这台redis服务器,那么它将会被降级为从服务器,成为新的主服务器的从服务器:

可以看到,6379重新启动后确实变成了从服务器,而且主服务器是192.168.81.129:6380。从服务器是只读的,所以我们通过set name “redis”会报错。

至此,利用redis的哨兵(sentinel)对主服务器进行监控,并且当主服务器down掉的时候哨兵能自动进行主从切换就算演示完成了。这整个过程的配置都是我已经试验成功之后的,下面将描述下我在配置过程中遇到的问题:

1、主服务器设置了密码(redis.conf文件中的masterauth有设置),如果在哨兵的配置文件(sentinel_6379.conf、sentinel_6380.conf、sentinel_6381.conf)中没有指定连接主服务器的密码(通过sentinel auth-pass mymaster redis指定),那么哨兵将不能连接主服务器,哨兵就会判断主服务器是主观下线的。例如我们注释掉26381配置连接主服务器的密码那一行:

可以看到主服务器是主观下线,但事实上主服务器并没有下线:

2、如果在外部代码需要获取哨兵信息,必须在哨兵的配置文件中配置bind 0.0.0.0,要不然外部代码连不上哨兵。

时间: 2024-08-25 13:50:24

redis配置读写分离以及利用哨兵sentinel进行自动主从切换的相关文章

利用QJM实现HDFS自动主从切换(HA Automatic Failover)源码详析

最近研究了下NameNode HA Automatic Failover方面的东西,当Active NN因为异常或其他原因不能正常提供服务时,处于Standby状态的NN就可以自动切换为Active状态,从而到达真正的高可用 NN HA Automatic Failover架构图 为了实现自动切换,需要依赖ZooKeeper和ZKFC组件,ZooKeeper主要用来记录NN的相关状态信息,zkfc组件以单独的JVM进程的形式运行在NN所在的节点上.下面首先分析下NN的启动流程,NN对象在实例化过

MyBatis多数据源配置(读写分离)

MyBatis多数据源配置(读写分离) 首先说明,本文的配置使用的最直接的方式,实际用起来可能会很麻烦. 实际应用中可能存在多种结合的情况,你可以理解本文的含义,不要死板的使用. 多数据源的可能情况 1.主从 通常是MySql一主多从的情况,本文的例子就是主从的情况,但是只有两个数据源,所以采用直接配置不会太麻烦,但是不利于后续扩展,主要是作为一个例子来说明,实际操作请慎重考虑. 针对这种情况,一个更好的解决方法可以参考(本人没有实际尝试过): http://blog.csdn.net/lixi

mysql基于amoeba配置读写分离

                     Mysql高级集群-读写分离Amoeba                          mysql在配置好主从复制之后,已经达到双机热备和容灾的效果.此博客是建立在主从复制的前提上 ,mysql基于amoeba的配置读写分离在我看来:就是为了达到数据库高可用性,安全性以及高并发,达到 负载均衡的效果.说简单点,我个人觉得意思就是让主服务器轻松点,不易挂掉.还有就是充分利用从服务器.  本人水平有限,望各位大神多多指点指点.我非常乐意听取意见. 此版本

Mysql主从配置+读写分离

Mysql主从配置+读写分离     MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. 注:安装前须查看是否已经安装了如下依赖包,如果没有请安装. apt-get -y install gcc g++ libncurses5-dev ncurses-devel openssl   一.主库安装及配置 1.源码安装cmake # tar xf cmake-3.0.0.tar.gz #

spring MVC、mybatis配置读写分离

spring MVC.mybatis配置读写分离 1.环境: 3台数据库机器,一个master,二台slave,分别为slave1,slave2 2.要实现的目标: ①使数据写入到master ②读数据时,从slave1和slave2中读取 以此来实现数据库的读写分离 3.原理: 使用MySQL驱动自带的replicationDriver来实现,replicationDriver简单来说就是存在两个Connection,一个masterConnection,一个slaveConnection:

mycat基础实验之主从配置读写分离和分表

mycat实验之主从配置读写分离和分表 架构图: 1.实验环境: vmware虚机3个   (虚机太少了,电脑有点吃力,3个虚机只能达到基本的测试) 系统centos7     (实验是关闭防火墙和selinux做的) mysql版本5.7 mycat版本1.6 虚机名字和ip: mysql1 192.168.211.138 mysql2 192.168.211.139 mysql3 192.168.211.142 mycat安装在mysql1(192.168.211.138) 这台主机须能够解

django+centos+mariadb读写分离完美实现(上)-mysql主从备份实现

首先画图一张,用来展示今天要做的事情,读写分离,个人理解就是使用mysql主从备份的原理,让两个数据库同时为自己提供服务.其中主库负责数据保存,从库负责数据展示,可以一主一从,也可以一主多从.从而降低数据库同时处理读写的压力. 1.环境如下 master 10.10.101.83 slave 10.10.101.184 2.接着搭建数据库备份,使用的是centos7.4+mariadb 2-1-两台服务器安装Mariadb数据库 (ps:mariadb是免费版的mysql,操作很相似,注意,两台

Redis Master-Slave 读写分离测试

1 master/slave server 启动 利用默认redis.conf配置文件启动master server,端口6379 . [7304] 29 Aug 09:57:26 - 0 clients connected (0 slaves), 673996 bytes in use [7304] 29 Aug 09:57:31 - DB 0: 15 keys (0 volatile) in 16 slots HT. [7304] 29 Aug 09:57:31 - 0 clients co

Mysql主从配置+读写分离(转)

   MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. 注:安装前须查看是否已经安装了如下依赖包,如果没有请安装. apt-get -y install gcc g++ libncurses5-dev ncurses-devel openssl 一.主库安装及配置 1.源码安装cmake # tar xf cmake-3.0.0.tar.gz # cd cmake-3.0.0 # .