# Redis主从+Sentinel集群 项目化部署手册

免责声明:

1、目前标准产品还不支持redis主从+Sentinel集群。标准环境部署切勿自行部署!

2、目前Sentinel只是项目化适配,需要提交适配申请,项目化支持打相关补丁才能用!

# 1、概要说明

Redis主从+Sentinel集群 整体架构,如下图所示:

一个主节点(master)可拥有多个从节点(slave),从节点实现对主节点的复制,保证数据同步。而哨兵(sentinel)则对各节点进行监控,主要包括主节点存活检测、主从运行情况检测等,一旦主节点宕机,哨兵可自动进行故障转移(failover)、主从切换。

接下来就开始搭建Redis主从+Sentinel集群

# 2、服务器准备

使用4台Linux服务器搭建环境,其IP地址及部署服务,举例如下:

192.168.110.100	(部署3个Redis sentinel服务,构成Redis sentinel集群)
192.168.110.101	(部署Redis服务,设置成主节点master)
192.168.110.102	(部署Redis服务,设置成从节点slave)
192.168.110.103	(部署Redis服务,设置成从节点slave)

# 3、redis源码编译安装

# 3.1 安装依赖:

> yum -y install cpp
>
> yum -y install binutils
>
> yum -y install glibc
>
> yum -y install glibc-kernheaders
>
> yum -y install glibc-common
>
> yum -y install glibc-devel
>
> yum -y install gcc
>
> yum -y install make
>
> 升级gcc(如果安装6版本的redis,gcc版本一定要5.3以上)
>
> yum -y install centos-release-scl
>
> yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++
> devtoolset-9-binutils
>
> scl enable devtoolset-9 bash
>
> echo \"source /opt/rh/devtoolset-9/enable\" \>\> /etc/profile
  • 上传redis安装包至/opt目录下并解压tar zxf redis-6.0.13.tar.gz

# 3.2 编译:

> cd /opt/redis-6.0.13
>
> make

# 3.3 安装:

> make install

  • Redis默认安装到usr/local/bin目录下

创建redis服务目录,将redis安装文件复制到目录下:

mkdir -p /usr/local/redis
cp /usr/local/bin/redis* /usr/local/redis

当前节点编译安装完成后,可以将/usr/local/redis目录拷贝到其他节点使用,其他节点无需再重新编译安装。

# 4.配置并启动Redis主从集群

# 4.1 创建主从节点的redis.conf配置文件

touch /usr/local/redis/redis.conf
vim /usr/local/redis/redis.conf

主节点(192.168.110.101)配置文件如下:

bind 0.0.0.0
port 6379
requirepass Seeyon_123456							 #设置redis密码
daemonize yes
loglevel notice
logfile "/usr/local/redis/redis_6379.log"
masterauth "Seeyon_123456"							#验证主节点redis密码
dir ./

从节点(192.168.110.102和192.168.110.103)配置文件如下:

bind 0.0.0.0
port 6379
requirepass Seeyon_123456							 #设置redis密码
daemonize yes
loglevel notice
logfile "/usr/local/redis/redis_6379.log"
masterauth "Seeyon_123456"							#验证主节点redis密码
dir ./
replicaof 192.168.110.101 6379    					#地址配置为主节点的IP和端口

# 4.2 启动Redis主从集群

先启动主节点(192.168.110.101),再启动从节点(192.168.110.102和192.168.110.103)

cd /usr/local/redis
nohup ./redis-server redis.conf >> /dev/null &

# 4.3 查看Redis主从集群

查看主节点Replication信息:

cd /usr/local/redis
./redis-cli -h 192.168.110.101 -p 6379 -a Seeyon_123456 info Replication
输出如下:
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.110.102,port=6379,state=online,offset=659,lag=1
slave1:ip=192.168.110.103,port=6379,state=online,offset=659,lag=0
master_repl_offset:659
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:658
192.168.110.102从节点Replication信息
[wch@localhost bin]$ ./redis-cli -h 192.168.110.102 info Replication
# Replication

可以看到当前节点角色为主节点(master),并且连接了另外2台从节点(slave)

查看从节点Replication信息:

cd /usr/local/redis
./redis-cli -h 192.168.110.102 -p 6379 -a Seeyon_123456 info Replication
输出如下:
# Replication
role:slave
master_host:192.168.110.101
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:701
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

# 4.4 停止Redis服务

ps -ef | grep redis
查出进程pid数字,执行:
kill -9 进程pid数字

# 5.配置sentinel集群并启动

# 5.1 创建sentinel配置文件

在部署sentinel集群的主机(192.168.110.100)上操作,创建3个sentinel配置文件,区分不同端口。

cd /usr/local/redis
touch sentinel-26379.conf sentinel-26380.conf sentinel-26381.conf
分别编辑3个sentinel配置文件,注意区分端口

vim sentinel-26379.conf
内容如下:
port 26379
daemonize yes
pidfile "/usr/local/redis/redis-sentinel-26379.pid"
logfile "/usr/local/redis/redis-sentinel-26379.log"
dir "/usr/local/redis"
sentinel deny-scripts-reconfig yes

#指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换
sentinel monitor mymaster 192.168.110.101 6379 2

#设置连接主服务器(master)和从服务器(slave)时需要使用的密码
sentinel auth-pass mymaster Seeyon_123456

#这里设置了主机多少秒无响应,则认为挂了
sentinel down-after-milliseconds mymaster 5000

#主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。
sentinel parallel-syncs mymaster 1

#故障转移的超时时间,这里设置为三分钟。
sentinel failover-timeout mymaster 180000

vim sentinel-26380.conf
内容如下:
port 26380
daemonize yes
pidfile "/usr/local/redis/redis-sentinel-26380.pid"
logfile "/usr/local/redis/redis-sentinel-26380.log"
dir "/usr/local/redis"
sentinel deny-scripts-reconfig yes

#指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换
sentinel monitor mymaster 192.168.110.101 6379 2

#设置连接主服务器(master)和从服务器(slave)时需要使用的密码
sentinel auth-pass mymaster Seeyon_123456

#这里设置了主机多少秒无响应,则认为挂了
sentinel down-after-milliseconds mymaster 5000

#主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。
sentinel parallel-syncs mymaster 1

#故障转移的超时时间,这里设置为三分钟。
sentinel failover-timeout mymaster 180000

vim sentinel-26381.conf
内容如下:
port 26381
daemonize yes
pidfile "/usr/local/redis/redis-sentinel-26381.pid"
logfile "/usr/local/redis/redis-sentinel-26381.log"
dir "/usr/local/redis"
sentinel deny-scripts-reconfig yes

#指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换
sentinel monitor mymaster 192.168.110.101 6379 2

#设置连接主服务器(master)和从服务器(slave)时需要使用的密码
sentinel auth-pass mymaster Seeyon_123456

#这里设置了主机多少秒无响应,则认为挂了
sentinel down-after-milliseconds mymaster 5000

#主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。
sentinel parallel-syncs mymaster 1

#故障转移的超时时间,这里设置为三分钟。
sentinel failover-timeout mymaster 180000

# 5.2 启动sentinel集群

cd /usr/local/redis
./redis-sentinel sentinel-26379.conf
./redis-sentinel sentinel-26380.conf
./redis-sentinel sentinel-26381.conf

三个哨兵都启动后,可使用如下命令查看哨兵信息:

./redis-cli -h 192.168.110.100 -p 26379
192.168.110.100:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.110.101:6379,slaves=2,sentinels=3

可以看到,哨兵已经监听到当前的主节点的IP端口和运行状态,并且有2台从节点,3个哨兵。

# 6 容灾切换

创建人:zhangshuang
修改人:het、zhangshuang、admin