目前项目组还处于刚刚成立阶段,有许多东西需要从零到一,借着这个机会,学习到许多以前没有接触过的东西,Redis哨兵模式主从集群也是在这个阶段搭建的,其实在很久以前就一直有搭建哨兵集群的想法,直到一年之后才来做这件事感到挺惭愧的,将知识点记录和总结下来也是一种快乐。
Redis-Sentinel是官方推荐的高可用解决方案,当redis在做master-slave的高可用方案时,假如master宕机了,redis本身(以及其很多客户端)都没有实现自动进行主备切换,而redis-sentinel本身也是独立运行的进程,可以部署在其他与redis集群可通讯的机器中监控redis集群。
它的主要功能有一下几点:
1、不时地监控redis是否按照预期良好地运行;
2、如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
3、能够进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址;
4、哨兵为客户端提供服务发现,客户端链接哨兵,哨兵提供当前master的地址然后提供服务,如果出现切换,也就是master挂了,哨兵会提供客户端一个新地址。
环境是Centos7,其他的没什么需要准备的了。
1、安装
搭建哨兵模式主从集群之前,需要先安装一下redis,写文章的时候redis稳定版是5.0.5
$ cd /usr/local
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar -zxvf redis-5.0.5.tar.gz
$ mv ./redis-5.0.5 ./redis
$ cd redis
$ make
$ cd src && make install
注:如果下载速度较慢,可以选择下载附件中的redis-5.0.5安装包
修改redis.conf文件,将 daemonize no 改为 daemonize yes,然后启动,命令如下:
$ cd ./src
$ nohup ./redis-server /usr/local/redis/redis.conf &
2、配置允许远程访问
修改 /usr/local/redis/redis.conf 文件,找到 bind 127.0.0.1,改为以下内容:
bind 0.0.0.0
同时设置密码为openailab,添加以下内容:
requirepass openailab
到此redis安装完成。
redis安装完成之后来搭建一下主从集群,首先我们创建一个文件夹放配置文件,这边我就搞一台机器的伪集群,有经济实力的可以搞多台机器,改一下配置文件IP就可以,这里我搭建的是一主两从的集群,这里最好是2n+1台,redis也是通过投票来进行选举的
$ cd /usr/local
$ mkdir msredis
$ cd msredis
$ mkdir 7000 7001 7002
然后我们把redis启动文件拿过来
$ cp /usr/local/redis/src/redis-server /usr/local/msredis/
之后我们分别在7000、7001、7002中新建配置文件,7001是主节点,7000、7002是从节点
首先防火墙打开上面这三个端口
CentOS7开启端口(永久)
然后配置7000的配置文件
$ cd /usr/local/msredis/7000
$ vim redis_7000.conf
在redis_7000.conf写入以下内容
port 7000
daemonize yes
requirepass "openailab"
masterauth "openailab"
appendonly yes
logfile "/usr/local/msredis/7000/redis.log"
dir "/usr/local/msredis/7000/data"
bind 192.168.3.203
replica-read-only yes
replicaof 192.168.3.203 7001
port是指你的redis启动端口;daemonize是指以守护进程的方式运行;requirepass是配置7000的redis密码;masterauth是配置访问master节点的redis密码;logfile是配置7000的redis日志存放路径;dir是配置7000的redis数据存放路径;bind是配置7000的redis所在机器的IP;replica-read-only是配置从节点只可读不可写;replicaof是配置master节点的redis所在IP和端口。
这里需要新建一个文件夹存放7000的数据文件
$ cd /usr/local/msredis/7000
$ mkdir data
然后我们来配置7002的配置文件
$ cd /usr/local/msredis/7002
$ vim redis_7002.conf
在redis_7002.conf写入以下内容
port 7002
daemonize yes
appendonly yes
requirepass "openailab"
masterauth "openailab"
logfile "/usr/local/msredis/7002/redis.log"
dir "/usr/local/msredis/7002/data"
bind 192.168.3.203
replica-read-only yes
replicaof 192.168.3.203 7001
这个配置文件和上面7000配置内容是基本一样的,这里需要注意的是如果你7002是配置在另一台机器的,需要改一下bind为那台机器IP,然后新建一个文件夹存放7002的数据文件
$ cd /usr/local/msredis/7002
$ mkdir data
从节点配置完成之后,开始配置主节点的配置文件
$ cd /usr/local/msredis/7001
$ vim redis_7001.conf
在redis_7001.conf写入以下内容
port 7001
daemonize yes
appendonly yes
requirepass "openailab"
masterauth "openailab"
logfile "/usr/local/msredis/7001/redis.log"
dir "/usr/local/msredis/7001/data"
bind 192.168.3.203
replica-read-only yes
同样我们新建一个文件夹存放7001的数据文件
$ cd /usr/local/msredis/7001
$ mkdir data
之后我们来依次启动一下(这里我是写了一个启动脚本)
$ cd /usr/local/msredis
$ vim ./start.sh
redis启动脚本内容如下
#!/bin/sh
#description:start.sh
./redis-server ./7000/redis_7000.conf
./redis-server ./7001/redis_7001.conf
./redis-server ./7002/redis_7002.conf
然后跑一下这个脚本
$ ./start.sh
验证一下
说明三个节点启动完成了。
三、Redis哨兵集群搭建
这篇文章的哨兵集群是基于主从集群的基础上进行搭建的,首先我们新建一个文件夹存放哨兵配置文件
$ cd /usr/local
$ mkdir sentinel
$ cd sentinel
$ mkdir s0 s1 s2
然后我们将哨兵启动文件拿过来
$ cp /usr/local/redis/src/redis-sentinel /usr/local/sentinel/
我们配置三个哨兵,分别是6000、6001、6002端口,防火墙开一下这三个端口(启用端口方式在上面提过了)
首先配置一下6000的配置文件
$ cd /usr/local/sentinel/s0
$ vim sentinel_6000.conf
在sentinel_6000.conf写入以下内容
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 192.168.3.203 7001 2
sentinel failover-timeout mymaster 18000
sentinel auth-pass mymaster openailab
daemonize yes
port 6000
logfile /usr/local/sentinel/s0/sentinel.log
dir /usr/local/sentinel/s0/data
新建一个文件夹存放6000产生的数据
$ cd /usr/local/sentinel/s0
$ mkdir data
另外两个哨兵配置方式和上面这个一样,需要改动的地方是port、logfile、dir。
三个哨兵配置完成之后来写一下启动脚本
$ cd /usr/local/sentinel
$ vim ./start.sh
启动脚本内容如下
#!/bin/sh
#description:start.sh
./redis-sentinel ./s0/sentinel_6000.conf
./redis-sentinel ./s1/sentinel_6001.conf
./redis-sentinel ./s2/sentinel_6003.conf
运行一下这个脚本
$ ./start.sh
验证一下
到此哨兵集群搭建完成,我们如果kill掉master节点,会发现另外两台slave节点有一台会成为master,并且配置文件也加入了master节点的配置,当你的master节点重新启动的时候,会变为slave节点,配置文件也会改变为slave节点的相关配置。
到此redis哨兵模式主从集群搭建完成。