Redis-主从复制、Sentinel、Cluster集群搭建【随笔五】

本文详细介绍了如何在Linux CentOS 7.7环境下安装Redis 6.2.6,包括单机配置、主从复制、Sentinel哨兵模式和Cluster集群模式的搭建步骤,以及解决常见安装和配置问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis 集群搭建

单机环境搭建

  • 安装 redis, 我从 Redis 官网 下载的最新版 redis-6.2.6
  • linux 环境,我用的 centos 7.7
# redis 准备
$ cd /opt
$ wget https://download.redis.io/releases/redis-6.2.6.tar.gz
$ tar zxvf credis-6.2.6.tar.gz
$ cd redis-6.2.6
$ make 
$ make PREFIX=/usr/local/redis install  # 安装目录可以自定义
$ cp redis.conf /usr/local/redis/etc/  # 将redis-6.2.6下的 redis.conf拷贝到安装目录

# 修改 reids 配置
$ cd /usr/local/reids
$ vi redis.conf
基本配置项如下:
 	1.设置为后台启动: daemonize yes
    2.修改端口: port 6379 (默认:6379) 
    3.绑定IP,绑定ip后,只有绑定的ip才能连接【即远程连接受限;若是需要远程连接,可以注释】:bind
    4.指定数据存放路径,dir /usr/local/redis/log rdb存放的路径
    5.指定持久化方式: appendonly yes
    6.设置密码: requirepass foobared (默认: foobared)
    
# 启动
$ ./bin/redis-server ./etc/redis.conf
# 查看是否启动成功
$ ps -ef|grep redis
安装问题解决

若make 时报错如下:

make[3]: cc:命令未找到
make[3]: *** [alloc.o] 错误 127
make[3]: 离开目录“/opt/redis-6.2.6/deps/hiredis”
make[2]: *** [hiredis] 错误 2
make[2]: 离开目录“/opt/redis-6.2.6/deps”
make[1]: [persist-settings] 错误 2 (忽略)
    CC adlist.o
/bin/sh: cc: 未找到命令
make[1]: *** [adlist.o] 错误 127
make[1]: 离开目录“/opt/redis-6.2.6/src”

这是因为没有安装 gcc 导致的,需要执行以下命令安装 gcc

sudo yum install gcc

若 make 时报错如下:

make[1]: 进入目录“/opt/redis-6.2.6/src”
    CC adlist.o
In file included from adlist.c:34:0:
zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
 #include <jemalloc/jemalloc.h>
                               ^
编译中断。
make[1]: *** [adlist.o] 错误 1

需要在 make 时候添加参数,make 命令如下:

make MALLOC=libc

主从复制搭建

生产环境做集群一般会采用多个独立主机,这里做演示在一台虚拟机上同时运行多个节点的,这点注意一下。

主要有两步

  • 准备 master/slave 配置文件
  • 先启动 master 再启动 slave,进行验证
集群节点
节点配置文件端口
masterredis_6379.conf6379
slave1redis_6380.conf6380
slave2redis_6381.conf6381
配置文件

内容如下

# 通用配置
daemonize yes # 后台启动
protected-mode no # 关闭保护模式
bind 0.0.0.0  # 允许任意远程连接
appendonly yes # 开启AOF持久化

# redis_6379.conf    master
# 包含命令,有点复用的意思
port    6379
logfile /var/log/redis_6379.log # 指定日志文件目录
dir /var/lib/redis/6379 # 指定工作目录,不存在则需要创建 `mkdir /var/lib/redis/6379`

# redis_6380.conf    slave1
port    6380
logfile /var/log/redis_6380.log # 指定日志文件目录
dir /var/lib/redis/6380 # 指定工作目录
replicaof 127.0.0.1 6379 # 指定要同步的master节点IP和端口

# redis_6381.conf    slave1
port    6381
logfile /var/log/redis_6381.log # 指定日志文件目录
dir /var/lib/redis/6381 # 指定工作目录
replicaof 127.0.0.1 6379 # 指定要同步的master节点IP和端口

主节点可选配置
requirepass 123456 # 设置密码

从节点可选配置
masterauth 123456 # 从节点访问主节点的密码(必须和requirepass 一致)【没有可不配置】
replica-read-only yes # 从节点只读模式

请添加图片描述

启动节点

启动节点,然后查看节点信息

# 创建软连接 `/usr/local/redis/redis-server` 目录为redis安装目录
ln -s /usr/local/redis/bin/redis-server /usr/bin/redis-server
ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis-cli

# 顺序启动节点
$ redis-server redis_6379.conf
$ redis-server redis_6380.conf
$ redis-server redis_6381.conf

# 进入redis 客户端,开多个窗口查看方便些
$ redis-cli -p 6379
$ info replication

info replication 命令可以查看连接该数据库的其它库的信息,可看到有两个 slave 连接到 master

主节点信息

请添加图片描述

从节点信息

请添加图片描述

实例测试

在 master 节点设置值,在 slave1/slave2 节点可以查看数据同步情况

在主节点添加键值对 set k1 akieay ,在从节点可以通过 get k1 查看 k1 的值,如果能查询成功,证明主从复制集群搭建成功。

请添加图片描述

# master
$ redis-cli -p 6379
127.0.0.1:6379> set k1 akieay
OK
# slave1
$ redis-cli -p 6380
127.0.0.1:6380> get k1
"akieay"

Sentinel(哨兵)模式搭建

上面也说了哨兵其实主动复制的自动版,所以需要先配置好主从复制,不同点在于要增加几个哨兵进行监控。

主要有两步:

  • 准备主从复制集群,并启动
  • 增加哨兵配置,启动验证
集群节点

一般来说,哨兵模式的集群是:一主,二从,三哨兵。

那咱们就来演示一下三个哨兵的集群。

节点配置端口
masterredis_6379.conf6379
slave1redis_6380.conf6380
slave2redis_6381.conf6381
sentinel1sentinel_26379.conf26379
sentinel2sentinel_26380.conf26380
sentinel3sentinel_26381.conf26381
哨兵配置

哨兵的配置其实跟 redis.conf 有点像,可以看一下自带的 sentinel.conf

这里咱们创建三个哨兵文件, 哨兵文件的区别在于启动端口不同

# 通用配置
protected-mode no # 关闭保护模式
daemonize yes # 后台启动
# 指定该哨兵节点监控 '127.0.0.1 6379' 这个主节点,该主节点的名称是 mymaster,最后的'2'的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster 123456 # 访问主节点的密码【没有可不配置】
sentinel down-after-milliseconds mymaster 30000 # 判定服务器down掉的时间周期,默认30000毫秒
sentinel failover-timeout mymaster 180000 # 故障节点的最大超时时间为180000毫秒

# sentinel_26379.conf
port 26379   # 端口
logfile "/var/log/sentinel_26379.log"   # 指定日志存放路径
dir "/var/lib/redis/26379"              # 设置工作目录

# sentinel_26380.conf
port 26380   # 端口
logfile "/var/log/sentinel_26380.log"   # 指定日志存放路径
dir "/var/lib/redis/26380"              # 设置工作目录

# sentinel_26381.conf
port 26381   # 端口
logfile "/var/log/sentinel_26381.log"   # 指定日志存放路径
dir "/var/lib/redis/26381"              # 设置工作目录

请添加图片描述

实例测试

先启动主从节点,在启动三个哨兵

$ redis-sentinel sentinel_26379.conf
$ redis-sentinel sentinel_26380.conf
$ redis-sentinel sentinel_26381.conf

启动之后日志如下,可以看到监听到的主/从节点情况以及哨兵集群情况
请添加图片描述

主从节点故障切换

我们在 master(6379) 节点 执行 shutdown,然后观察哨兵会帮我做什么?

可以看到哨兵扫描到了 master 下线, 然后经过一系列判断,投票等操作重新选举了master(6380) 节点

请添加图片描述
可以查看到,6380 已成为 master
请添加图片描述
然后我们可以看到, 即使我们把原 master 节点恢复运行, 它也降级成为了 slave
请添加图片描述

Cluster 集群模式搭建

Redis 的 Cluster 集群模式, 启动还挺简单

主要有两步

  • 配置文件
  • 启动验证
集群节点

根据官方推荐,集群部署至少要 3 台以上的master节点,最好使用 3 主 3 从六个节点的模式。

节点配置端口
cluster-master1redis_7001.conf7001
cluster-master2redis_7002.conf7002
cluster-master3redis_7003.conf7003
cluster-slave1redis_7004.conf7004
cluster-slave2redis_7005.conf7005
cluster-slave3redis_7006.conf7006
配置文件

咱们准备 6 个配置文件 ,端口:7001,7002,7003,7004,7005,7006;分别命名成 redis_7001.conf …redis_7006.conf

redis_7001.conf 配置文件内容如下,复制6份并替换端口号

# 通用配置
cluster-enabled yes # 启用集群模式
cluster-node-timeout 15000 # 超时时间
appendonly yes # 开启AOF持久化
daemonize yes  # 后台启动
protected-mode no  # 非保护模式

port 7001 # 端口
dir "/var/lib/redis/7001" # 设置工作目录
# 根据你启用的节点来命名,最好和端口保持一致,这个是用来保存其他节点的名称,状态等信息的【会自动生成在上面配置的dir目录下】
cluster-config-file nodes-7001.conf 
pidfile  /var/run/redis_7001.pid # 运行时PID文件pidfile
logfile /var/log/redis_7001.log # 指定日志文件目录
创建集群

挨个启动节点

$ redis-server redis_7001.conf
...
$ redis-server redis_7006.conf

看以下启动情况
请添加图片描述

启动集群

# 执行命令
# `--cluster-replicas 1` 命令的意思是创建 master 的时候同时创建一个 slave
# 创建集群
$ redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1

执行成功结果如下:

我们可以看到 7001,7002,7003 成为了 master 节点,分别占用了 slot [0-5460],[5461-10922],[10923-16383]

请添加图片描述

以上信息展示了集群的主从节点信息及主-丛节点关联信息;这里我们需要手动输入 ‘yes’ 来确认

请添加图片描述

检查集群

$ redis-cli --cluster check 127.0.0.1:7001

请添加图片描述

实例测试

集群搭建完成后,我们需要测试是否能够正常运行

# 注意:集群模式下连接客户端要带参数 -c,表示集群,否则不能正常存取数据
$ redis-cli -p 7001 -c
# 设置k1
$ set k1 akieay
-> Redirected to slot [12706] located at 127.0.0.1:7003
OK
# 这里可以看到存储 k1 时,首先根据key计算出对应的 slot,然后选择相应的主节点;这里自动跳到了 7003

# 然后我们在 7003 节点获取 k1,可以看到能正常获取
$ get k1
"akieay"

# 切换到 7001 获取 k1,可以看到会自动重定向到 7003,然后返回 结果
$ redis-cli -p 7001 -c
$ get k1
-> Redirected to slot [12706] located at 127.0.0.1:7003
"akieay"
127.0.0.1:7003> 

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值