Redis集群

Redis集群搭建方案

这里使用三个哨兵节点监控一主双从三个Redis实例来实现高可用架构

搭建一主双从实例

服务器使用情况,这里使用了两台服务器做高可用部署,如果有条件可以用三台服务器,配置类似

名称 身份 名称 IP:端口
节点1 master redis-1 | 192.168.1.101:6379
节点2 slave1 redis-2 | 192.168.1.102:6379
节点3 slave2 redis-3 | 192.168.1.103:6380

docker部署Redis集群

docker部署Redis主从集群

节点1上创建redis配置文件,命名为redis.conf,文件内容如下:

bind 0.0.0.0
protected-mode no
daemonize no

节点1上创建redis配置文件,命名为redis.conf,文件内容如下:

bind 0.0.0.0
protected-mode no
daemonize no
replica-announce-ip 192.168.1.101
replica-announce-port 6379
master-announce-ip 192.168.1.101
master-announce-port 6379

replica-announce-ip和master-announce-ip均设置为节点1自身的ip地址

节点1上运行docker命令,启动redis master服务

docker run -d --name redis-1  \
    -p 6379:6379 \
    -v $PWD/redis.conf:/etc/redis/redis.conf\
    redis:6.0.16 redis-server /etc/redis/redis.conf

节点2上创建redis配置文件,命名为redis-slave.conf,文件内容如下:

bind 0.0.0.0
protected-mode no
daemonize no
replicaof 192.168.1.101 6379
replica-announce-ip 192.168.1.102
replica-announce-port 6379
master-announce-ip 192.168.1.102
master-announce-port 6379

replicaof 设置节点1(master)的ip地址,根据实际情况进行ip地址的调整
replica-announce-ip和master-announce-ip均设置为节点2自身的ip地址

节点2上运行docker命令,启动redis slave服务

docker run -d --name redis-2 --net iot \
    -p 6379:6379 \
    -v $PWD/redis-slave.conf:/etc/redis/redis.conf \
    redis:6.0.16 redis-server /etc/redis/redis.conf

节点3上创建redis配置文件,同样命名为redis-slave.conf,文件内容如下:

bind 0.0.0.0
protected-mode no
daemonize no
replicaof 192.168.1.101 6379
replica-announce-ip 192.168.1.103
replica-announce-port 6379
master-announce-ip 192.168.1.103
master-announce-port 6379

replicaof 同样设置节点1(master)的ip地址,根据实际情况进行ip地址的调整

节点3上运行docker命令,启动redis slave服务

docker run -d --name redis-3 --net iot \
    -p 6379:6379 \
    -v $PWD/redis-slave.conf:/etc/redis/redis.conf \
    redis:6.0.16 redis-server /etc/redis/redis.conf

docker部署sentinel集群

节点1上创建sentinel配置文件,命名为sentinel.conf,内容如下:

bind 0.0.0.0
protected-mode no
daemonize no

port 26379
sentinel monitor redis-server 192.168.1.101 6379 2

sentinel down-after-milliseconds redis-server 10000

节点1上运行如下docker命令,启动sentinel服务:

docker run -d --name sentinel-1  \
    -p 26379:26379 \
    -v $PWD/sentinel.conf:/etc/redis/sentinel.conf \
    redis:6.0.16 redis-sentinel /etc/redis/sentinel.conf

同样在节点2上创建sentinel配置文件,命名为sentinel.conf,内容如下:

bind 0.0.0.0
protected-mode no
daemonize no

port 26379
sentinel monitor redis-server 192.168.1.101 6379 2

sentinel down-after-milliseconds redis-server 10000

节点2上启动sentinel服务:

docker run -d --name sentinel-2  \
    -p 26379:26379 \
    -v $PWD/sentinel.conf:/etc/redis/sentinel.conf \
    redis:6.0.16 redis-sentinel /etc/redis/sentinel.conf

同样在节点3上创建sentinel配置文件,命名为sentinel.conf,内容如下:

bind 0.0.0.0
protected-mode no
daemonize no

port 26379
sentinel monitor redis-server 192.168.1.101 6379 2

sentinel down-after-milliseconds redis-server 10000

节点2上启动sentinel服务:

docker run -d --name sentinel-3  \
    -p 26379:26379 \
    -v $PWD/sentinel.conf:/etc/redis/sentinel.conf \
    redis:6.0.16 redis-sentinel /etc/redis/sentinel.conf

SpringBoot配置

在SpringBoot配置application.yml中,增加一下的配置即可

spring:
  redis:
    sentinel:
      master: redis-server
      nodes: 192.168.1.101:26379,192.168.1.101:26379,192.168.1.101:26380

部署流程

  1. redis安装
    两台服务器都先安装服务,注意先安装gcc和make
cd /home
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
tar -zxvf redis-6.2.6.tar.gz
cd ./redis-6.2.6
make
make install
  1. 修改默认的配置文件(192.168.13.52,192.168.13.53)
vim /home/redis-6.2.6/redis.conf

设置,找到对应的配置然后修改

# 设置可以远程访问
bind 0.0.0.0
protected-mode no
# 可以后台运行
daemonize no
  1. 修改192.168.13.53 服务器上的配置文件slave1
cd /home/redis-6.2.6
vim redis-6379.conf

输入以下内容

# 应用基础配置
include /home/redis-6.2.6/redis.conf
# 从节点配置
replicaof 192.168.13.52 6379
  1. 修改192.168.13.53 服务器上的配置文件slave2
cd /home/redis-6.2.6
vim redis-6380.conf

输入以下内容

# 应用基础配置
import /home/redis-6.2.6/redis.conf
# 端口
port 6380
# 从节点配置
replicaof 192.168.13.52 6379
  1. 每个conf文件对应一个应用实例,使用redis-server命令启动redis服务

192.168.13.52执行

cd /usr/local/bin
./redis-server /home/redis-6.2.6/redis.conf

192.168.13.53执行

cd /usr/local/bin
./redis-server /home/redis-6.2.6/redis-6379.conf

192.168.13.53执行

cd /usr/local/bin
./redis-server /home/redis-6.2.6/redis-6380.conf

任意一台服务器,连接节点后检查集群状态

redis-cli //连接实例
> info replication

界面应该展示
role: master or slave
可以通过任意的客户端软件写入master节点信息,然后观察slave节点是否数据会同步,(经过测试,slave节点不可写入,只能从master节点写入)

搭建哨兵节点

Sentinel的主要功能包括主节点存活检测、主从运行情况检测、自动故障转移(failover)、主从切换。Redis的Sentinel最少是3个节点的哨兵

服务器使用情况

身份 IP:端口 配置地址
哨兵1 192.168.13.52:26379 /home/redis-6.2.6/sentinel.conf
哨兵2 192.168.13.53:26379 /home/redis-6.2.6/sentinel.conf
哨兵3 192.168.13.53:26380 /home/redis-6.2.6/sentinel-26380.conf
  1. 在192.168.13.52,192.168.13.53 修改sentinel.conf
vim /home/redis-6.2.6/sentinel.conf

修改其中的配置

# 后台运行
daemonize yes
# 记录下日志,默认日志会扔到/dev/null
logfile /var/log/sentinel.log
# 改一下哨兵监控的master节点信息
sentinel monitor mymaster 192.168.13.52 6379 2
  1. 192.168.13.53复制一个配置文件命名为sentinel-26380.conf,作为第三个节点的哨兵配置文件
cd /home/redis-6.2.6/
cp sentinel.conf sentinel-26380.conf
  1. 修改第三个哨兵的配置文件
vim /home/redis-6.2.6/sentinel-26380.conf
# pid file
pidfile "/var/run/redis-sentinel-26380.pid"
# 记录下日志,默认日志会扔到/dev/null
logfile /var/log/sentinel-26380.log
# 修改以下变量
port 26380
  1. 挨个启动3个哨兵

192.168.13.52

cd /usr/local/bin
./redis-sentinel /home/redis-6.2.6/sentinel.conf

192.168.13.53

cd /usr/local/bin
./redis-sentinel /home/redis-6.2.6/sentinel.conf

192.168.13.53

cd /usr/local/bin
./redis-sentinel /home/redis-6.2.6/sentinel-26380.conf
  1. 验证部署结果
cd /usr/local/bin
# 注意这里是哨兵的端口号
./redis-cli -p 26379  
sentinel master mymaster
# 应该输出master哨兵信息
sentinel slaves mymaster
# 应该输出2个slave信息
sentinel sentinels mymaster
# 应该输出除了当前哨兵以外的哨兵信息
  1. springboot相关配置,使用StringRedisTemplate可以测试写入情况
spring:
  redis:
    sentinel:
      master: mymaster
      nodes: 192.168.13.52:26379,192.168.13.53:26379,192.168.13.53:26380
  1. 经过测试,当关闭当前连接的哨兵,或者连接中的redis实例,都会自动切换到另外的redis实例上,并且master-slave关系会被自动修改
2022-08-11
0