Mac 环境下 Redis 集群的搭建

安装 Redis

Mac 环境下安装 Redis 是非常简单的,直接执行命令:brew install redis 就可以了(需要安装 homebrew),这也是我比较推荐的方式。通过 homebrew 安装 Redis 之后,Redis 的环境变量、卸载、更新都可以通过简单的命令来完成,也就是说你不再需要考虑管理 Redis 的问题了。

安装完成之后,就可以直接在终端执行命令:

  • redis-server:启动 redis 服务器,默认端口 6379
  • redis-cli:启动 redis 客户端

配置 Redis 集群环境

说明:通过 homebrew 安装完成之后,redis 的默认配置文件(redis.conf)的路径位于:/usr/local/etc,环境配置的操作也基本在这个路径下完成。

创建虚拟节点目录、修改配置文件

说明:各个步骤的详细说明可以参考文档:Redis 集群
这个操作包含了两个步骤:创建 Redis 虚拟节点的目录,并修改虚拟节点的配置文件,下面详细说明。

  • 创建 Redis 虚拟节点目录

在 /usr/local/etc 下创建 cluster 目录,并在 cluster 目录下创建目录:7000、7001、7002、7003、7004、7005。需要执行的命令:

# 需要在 /usr/local/etc 路径下
mkdir -p redis/cluster/7000
mkdir -p redis/cluster/7001
mkdir -p redis/cluster/7002
mkdir -p redis/cluster/7003
mkdir -p redis/cluster/7004
mkdir -p redis/cluster/7005
  • 修改配置文件

拷贝 Redis 默认的配置文件(/usr/local/etc/redis.conf)到 7000、7001、7002、7003、7004、7005 这6个目录中。修改每一个目录下的配置文件,这里以 7000 为例:

# cp redis.conf redis/cluster/7000/7000.conf
port 7000                                     # Redis 节点的端口号
cluster-enabled yes                           # 实例以集群模式运行
cluster-config-file nodes-7000.conf           # 节点配置文件路径
cluster-node-timeout 5000                     # 节点间通信的超时时间
appendonly yes                                # 数据持久化

启动 Redis,并验证各个节点的状态

在任意目录执行下面的6个命令,即启动6个 Redis 节点:

redis-server /usr/local/etc/redis/cluster/7000/7000.conf &
redis-server /usr/local/etc/redis/cluster/7001/7001.conf &
redis-server /usr/local/etc/redis/cluster/7002/7002.conf &
redis-server /usr/local/etc/redis/cluster/7003/7003.conf &
redis-server /usr/local/etc/redis/cluster/7004/7004.conf &
redis-server /usr/local/etc/redis/cluster/7005/7005.conf &

通过命令启动之后,查看当前系统是否存在对应的进程。如果能看到如下类似的结果,则说明启动成功。

 ps -ef |grep redis
119804143 69725   643   0  6:55下午 ttys009    0:01.37 redis-server 127.0.0.1:7000 [cluster]
119804143 69771   643   0  6:56下午 ttys009    0:00.80 redis-server 127.0.0.1:7001 [cluster]
119804143 69809   643   0  6:57下午 ttys009    0:00.11 redis-server 127.0.0.1:7002 [cluster]
119804143 69816   643   0  6:57下午 ttys009    0:00.08 redis-server 127.0.0.1:7003 [cluster]
119804143 69831   643   0  6:57下午 ttys009    0:00.04 redis-server 127.0.0.1:7004 [cluster]
119804143 69851   643   0  6:57下午 ttys009    0:00.03 redis-server 127.0.0.1:7005 [cluster]

创建集群

当前系统中已经有了6个正在运行的 Redis 实例,需要使用 Redis 集群命令行工具 redis-trib 来完成集群的创建工作。redis-trib 可以在 redis-trib 下载地址 下载得到。它是一个 Ruby 程序,这个程序通过向实例发送特殊命令来完成创建新集群,检查集群,或者对集群进行重新分片(reshared)等工作。需要安装 Redis 的 Ruby 模块。执行以下命令:

brew update
brew install ruby
sudo gem install redis

在 redis-trib.rb 文件所在目录执行命令:

# 无需指定哪个节点为 master,哪个节点为 slave,因为 redis 内部算法已经帮我们实现了
# 使用 –replicas 1 创建集群,即每个 master 带一个 slave
./redis-trib.rb create --replicas 1 127.0.0.1:7000 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

创建过程会打印类似如下的信息,表示创建集群成功。

>>> Creating cluster
Connecting to node 127.0.0.1:7000: OK
Connecting to node 127.0.0.1:7001: OK
Connecting to node 127.0.0.1:7002: OK
Connecting to node 127.0.0.1:7003: OK
Connecting to node 127.0.0.1:7004: OK
Connecting to node 127.0.0.1:7005: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
...

验证集群可用性

通过两种方式验证集群的可用性:1. 通过 redis-trib 提供的命令;2. 登录客户端,执行操作

  • 检查集群的状态:redis-trib check
# 执行命令 ./redis-trib.rb check 127.0.0.1:7000 可以看到类似如下的打印信息,ip 与 port 指定集群中的任意一个
 ./redis-trib.rb check 127.0.0.1:7000
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 359d7471abd2f06c5463f8003f69f85c59498a9d 127.0.0.1:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: 0fd9da2bda6c812a9879adf61d42c11eade17bfc 127.0.0.1:7003
   slots: (0 slots) slave
   replicates 359d7471abd2f06c5463f8003f69f85c59498a9d
S: e44850529685bc27b1d816bec37bd5e5ec2b588c 127.0.0.1:7005
   slots: (0 slots) slave
   replicates 00795ac18a89d1e537cac3a112c96cb5cd30510e
M: 00795ac18a89d1e537cac3a112c96cb5cd30510e 127.0.0.1:7002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: 576f37746690d4d951e1ea31706ead9a42386880 127.0.0.1:7001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 1484ab04a4bfa60ab01325643ac54056f006b91d 127.0.0.1:7004
   slots: (0 slots) slave
   replicates 576f37746690d4d951e1ea31706ead9a42386880
[OK] All nodes agree about slots configuration.
>>> Check slots coverage...
[OK] All 16384 slots covered.
  • 查看集群的信息:redis-trib info
# 执行命令 ./redis-trib.rb info 127.0.0.1:7000 可以看到类似如下的打印信息,ip 与 port 指定集群中的任意一个
 ./redis-trib.rb info 127.0.0.1:7000
127.0.0.1:7000 (359d7471...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:7002 (00795ac1...) -> 1 keys | 5461 slots | 1 slaves.
127.0.0.1:7001 (576f3774...) -> 1 keys | 5462 slots | 1 slaves.
[OK] 2 keys in 3 masters.
0.00 keys per slot on average.
  • 登录任意一个节点,执行命令
# 登录任意一个节点,执行 set、get 等命令
 redis-cli -c -p 7000
127.0.0.1:7000> set name qinyi
-> Redirected to slot [5798] located at 127.0.0.1:7001
OK
127.0.0.1:7001> get name
"qinyi"

到此,Mac 环境下 Redis 集群的搭建就完成了。

·······························
欢迎关注课程:

基于 SpringCloud 微服务架构下 广告系统设计与实现

JAVA分布式优惠券系统后台 手把手实战开发

点赞