Centos7 Redis哨兵模式主从集群搭建

目前项目组还处于刚刚成立阶段,有许多东西需要从零到一,借着这个机会,学习到许多以前没有接触过的东西,Redis哨兵模式主从集群也是在这个阶段搭建的,其实在很久以前就一直有搭建哨兵集群的想法,直到一年之后才来做这件事感到挺惭愧的,将知识点记录和总结下来也是一种快乐。

一、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,其他的没什么需要准备的了。

三、Redis安装

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主从集群搭建

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哨兵模式主从集群搭建完成。

你可能感兴趣的:(Redis,Linux)