Redis 哨兵集群是 Redis 的高可用解决方案之一,它可以在 Redis 主节点出现故障时,自动将从节点切换为主节点,从而实现高可用性。本文将介绍如何在 Linux 系统上安装 Redis 哨兵集群。
环境准备
在开始安装 Redis 哨兵集群之前,需要准备以下环境:
- Linux 操作系统,本文以 Ubuntu 18.04 为例。
- Redis 服务,可以使用单机版的 Redis 服务或者 Redis 集群服务。
安装 Redis 哨兵
在安装 Redis 哨兵之前,需要先安装 Redis 服务。可以参考 Redis 官方文档或者本站的 Redis 安装教程进行安装。
安装 Redis 哨兵的步骤如下:
下载 Redis 哨兵源码包,并解压缩。
代码语言:javascript复制wget http://download.redis.io/redis-stable.tar.gz
tar zxvf redis-stable.tar.gz
cd redis-stable
编译并安装 Redis 哨兵。
代码语言:javascript复制make
make install
复制 Redis 配置文件,并进行修改。
代码语言:javascript复制cp redis.conf /etc/redis/sentinel.conf
在修改配置文件之前,需要先了解 Redis 哨兵的配置参数。Redis 哨兵的配置文件和 Redis 单机版或集群版的配置文件类似,不同之处在于 Redis 哨兵的配置文件中包含了监控的 Redis 主从节点的信息。下面是一个简单的 Redis 哨兵配置文件的示例:
代码语言:javascript复制port 26379
daemonize yes
logfile "/var/log/redis/sentinel.log"
dir "/tmp"
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
其中:
port
: Redis 哨兵监听的端口号,默认为 26379。daemonize
: 是否以守护进程方式运行 Redis 哨兵,默认为 yes。logfile
: Redis 哨兵日志文件的路径。dir
: Redis 哨兵数据文件的保存路径。sentinel monitor
: 监控的 Redis 主节点的名称、IP 地址、端口号和最小的从节点数。sentinel down-after-milliseconds
: Redis 主节点失效的时间阈值,单位为毫秒。sentinel failover-timeout
: Redis 主节点失效后进行故障转移的时间阈值,单位为毫秒。sentinel parallel-syncs
: 故障转移时最多同时同步的从节点数。
启动 Redis 哨兵。
代码语言:javascript复制redis-sentinel /etc/redis/sentinel.conf
启动 Redis 哨兵之后,可以通过命令 ps aux | grep redis
来查看 Redis 哨兵的进程是否已经启动。
配置 Redis 主从复制
在 Redis 哨兵监控的主节点和从节点之间需要进行主从复制。具体的步骤如下:
修改 Redis 主节点的配置文件。
在 Redis 主节点的配置文件中,需要开启主从复制功能,并设置复制密码。可以通过编辑 /etc/redis/redis.conf
文件来修改 Redis 主节点的配置文件。将 # requirepass foobared
这一行取消注释,并将 foobared
修改为复制密码,如下所示:
# 设置 Redis 密码
requirepass mypassword
# 开启主从复制
slaveof 127.0.0.1 6380
修改 Redis 从节点的配置文件。
在 Redis 从节点的配置文件中,需要设置复制密码,并将从节点设置为只读模式。可以通过编辑 /etc/redis/redis.conf
文件来修改 Redis 从节点的配置文件。将 # slave-read-only yes
这一行取消注释,并将 # masterauth <master-password>
修改为复制密码,如下所示:
# 设置 Redis 密码
requirepass mypassword
# 设置从节点只读
slave-read-only yes
# 设置主节点地址和密码
slaveof 127.0.0.1 6379
masterauth mypassword
重启 Redis 主从节点。
在修改了 Redis 主从节点的配置文件之后,需要重启 Redis 服务,使配置生效。
代码语言:javascript复制bashCopy codesudo systemctl restart redis
验证主从复制是否正常。
可以使用 Redis 的命令行工具 redis-cli
连接到 Redis 主节点和从节点,并执行 info replication
命令来验证主从复制是否正常。如果主从复制正常,info replication
命令的输出应该包含以下信息:
role:master
: 主节点的角色为主节点。connected_slaves
: 从节点的数量。slave0
: 从节点的信息,包括 IP 地址、端口号等。master_replid
: 主节点的复制 ID。master_replid2
: 主节点的复制 ID。
配置 Redis 哨兵集群
在 Redis 哨兵集群中,通常有多个 Redis 哨兵节点和多个 Redis 主从节点。为了实现高可用性,需要在多个 Redis 哨兵节点之间进行协调,并在 Redis 主从节点出现故障时进行故障转移。
在配置 Redis 哨兵集群之前,需要先了解 Redis 哨兵集群的配置参数。Redis 哨兵集群的配置文件和 Redis 哨兵的配置文件类似,不同之处在于 Redis 哨兵集群的配置文件中需要设置多个 Redis 哨兵节点的信息。下面是一个简单的 Redis 哨兵集群配置文件的示例:
代码语言:javascript复制port 26379
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster mypassword
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
sentinel client-reconfig-script mymaster /etc/redis/sentinel-client-reconfig.sh
sentinel notification-script mymaster /etc/redis/sentinel-notification.sh
sentinel auth-pass mymaster mypassword
下面解释一下这些参数的含义:
port
: Redis 哨兵节点的监听端口号。sentinel monitor
: 配置 Redis 主从节点的信息,包括主节点的名称、IP 地址、端口号、哨兵节点需要至少多少个哨兵节点确认主节点故障才能执行故障转移等信息。sentinel auth-pass
: 设置 Redis 主从节点的复制密码。sentinel down-after-milliseconds
: 配置哨兵节点在多长时间内无法连接到主节点时认为主节点已经下线。sentinel failover-timeout
: 配置故障转移的超时时间。sentinel parallel-syncs
: 配置故障转移时同时同步数据的从节点数量。sentinel client-reconfig-script
: 配置在故障转移时需要执行的客户端脚本。sentinel notification-script
: 配置在故障转移时需要执行的通知脚本。
在配置完 Redis 哨兵集群的配置文件后,需要在多个 Redis 哨兵节点上启动 Redis 哨兵服务,并将它们连接到 Redis 主从节点上。可以使用以下命令启动 Redis 哨兵服务:
代码语言:javascript复制redis-sentinel /path/to/sentinel.conf
其中 /path/to/sentinel.conf
是 Redis 哨兵集群的配置文件路径。启动 Redis 哨兵服务之后,可以使用 ps aux | grep redis
命令来检查 Redis 哨兵服务是否已经启动。