Coding & Life

求知若饥,虚心若愚

0%

CentOS7搭建Redis5.0.14集群

pic

集群概念

Redis集群实现了对Redis的水平扩容,即启动N个Redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。每个节点负责一部分插槽(slot),注意在Redis Cluster中,只有mater才拥有插槽的所有权。

分片实现

Redis集群通过分片的方式来保存数据库中的键值对,集群的整个数据库被分为16384(0-16383)个槽,数据库中的每个键都属于这16384个槽的其中一个,集群中的每个节点可以处理0个或最多16384个。只有当数据库中的16384个槽都有节点在处理时,集群才处于上线状态。

集群搭建

我们在一台机器上使用6个端口,模拟集群搭建

安装Redis

下载redis安装包,进行解压,编译,安装。此处省略

集群配置

  1. 创建6个节点的配置文件目录conf,日志目录logs,数据存储目录data,如下命令:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
mkdir -p /usr/local/redis/redis_cluster/7001/conf/
mkdir -p /usr/local/redis/redis_cluster/7001/logs/
mkdir -p /usr/local/redis/redis_cluster/7001/data/

mkdir -p /usr/local/redis/redis_cluster/7002/conf/
mkdir -p /usr/local/redis/redis_cluster/7002/logs/
mkdir -p /usr/local/redis/redis_cluster/7002/data/

mkdir -p /usr/local/redis/redis_cluster/7003/conf/
mkdir -p /usr/local/redis/redis_cluster/7003/logs/
mkdir -p /usr/local/redis/redis_cluster/7003/data/

mkdir -p /usr/local/redis/redis_cluster/7004/conf/
mkdir -p /usr/local/redis/redis_cluster/7004/logs/
mkdir -p /usr/local/redis/redis_cluster/7004/data/

mkdir -p /usr/local/redis/redis_cluster/7005/conf/
mkdir -p /usr/local/redis/redis_cluster/7005/logs/
mkdir -p /usr/local/redis/redis_cluster/7005/data/

mkdir -p /usr/local/redis/redis_cluster/7006/conf/
mkdir -p /usr/local/redis/redis_cluster/7006/logs/
mkdir -p /usr/local/redis/redis_cluster/7006/data/
  1. 创建7001的配置文件,并添加如下内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 绑定服务器域名或IP地址
bind 127.0.0.1
# 设置端口,区分集群中Redis的实例
port 7001
# 后台运行
daemonize yes
# pid进程文件名,以端口号命名
pidfile /var/run/redis-7001.pid
# 日志文件名称,以端口号为目录来区分
logfile /usr/local/redis/redis_cluster/7001/logs/redis.log
# 数据文件存放地址,以端口号为目录名来区分
dir /usr/local/redis/redis_cluster/7001/data
# 启用集群
cluster-enabled yes
# 配置每个节点的配置文件,同样以端口号为名称
cluster-config-file nodes_7001.conf
# 配置集群节点的超时时间
cluster-node-timeout 15000
# 启动AOF增量持久化策略
appendonly yes
# 发生改变,则记录日志
appendfsync always

其他节点配置文件仿照7001分别创建

启动集群

  1. 启动每一个Redis节点
1
2
3
4
5
6
redis-server /usr/local/redis/redis_cluster/7001/conf/redis.conf
redis-server /usr/local/redis/redis_cluster/7002/conf/redis.conf
redis-server /usr/local/redis/redis_cluster/7003/conf/redis.conf
redis-server /usr/local/redis/redis_cluster/7004/conf/redis.conf
redis-server /usr/local/redis/redis_cluster/7005/conf/redis.conf
redis-server /usr/local/redis/redis_cluster/7006/conf/redis.conf
  1. 使用redis-cli创建Redis集群
1
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
  • redis-cli --cluster代表集群操作命令
  • create 代表创建集群
  • --cluster-replicas 1 指定集群中每个mater的副本数为1,此时节点总数 ÷ (replicas + 1)得到的就是master的数量n。因此节点列表中的前n个就是master节点,其他节点都是slave节点,随机分配到不同master
  1. 查看刚创建的集群状态,如下命令:(在任一台机器中查看任一节点信息,会带出所有节点信息)
1
redis-cli --cluster check 127.0.0.1:7001

节点信息

  1. 测试集群是否正常

连接集群中任一节点,注意:集群操作时,需要给redis-cli加上-c参数才可以

1
redis-cli -c -p 7001

添加一个key进入集群

1
2
3
4
127.0.0.1:7001> set name wangweiye
-> Redirected to slot [5798] located at 127.0.0.1:7002
OK
127.0.0.1:7002>

可以看到,set之后,Redis会自动重定向到7002节点的5798插槽,接着我们进入7003节点,观察是否能查到此key

1
2
3
4
127.0.0.1:7003> get name
-> Redirected to slot [5798] located at 127.0.0.1:7002
"wangweiye"
127.0.0.1:7002>

出现以上结果,说明我们搭建的集群运作正常。当集群中某个master节点故障时,相应的slave节点会自动升级为master,保证集群的可靠性。当故障节点恢复正常,则变为slave节点提供副本职能,请自行测试

注意

Redis集群中每个实例会使用两个TCP端口,一个用于客户端(redis-cli或其他应用)通信,另一个用于集群中实例相互通信的总线端口,且第二个端口比第一个端口一定大1000。如果外网配置时,请注意网络的连通性