# 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源码编译安装
- 下载Redis部署包,如redis-6.0.13.tar.gz。https://redis.io/download (opens new window)
# 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