搭建Redis Cluster集群

发布日期: 2020-02-08 13:34:45 作者: Stephen 评论: 0

Redis Cluster提供了一种运行Redis安装的方法,在该安装中,数据会 在多个Redis节点之间自动分片。Redis Cluster 在分区期间还提供了一定程度的可用性,这实际上是在某些节点出现故障或无法通信时继续操作的能力。但是,如果发生较大故障(例如,大多数主服务器不可用时),集群将停止运行。Redis Cluster自动分割在多个节点之间的数据集,一部分节点出现故障或无法与集群的其余部分通信时,继续运行的能力。

Redis Cluster官方文档:https://redis.io/topics/cluster-tutorial

Redis安装

# 安装gcc包
yum -y install gcc automake autoconf libtool make
# 下载并解压
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
tar -zxvf redis-5.0.7.tar.gz -C /opt
cd redis-5.0.7
# 编译安装
make
make PREFIX=/usr/local/redis install

Redis Cluster集群

1、目录结构

/usr/local/ 目录下新建 redis_cluster 目录,并新增 7000 - 7005 6个目录,存放 redis 集群。

2、复制配置文件到目录

cp /opt/redis-5.0.7/redis.conf /usr/local/redis_cluster/7000/

3、修改配置文件,其它文件也做相应修改

# 关闭保护模式,用于公网访问
protected-mode no
port 7000
# 开启集群模式
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
# 后台启动
daemonize yes
pidfile /var/run/redis_7000.pid
logfile 7000.log
# dir /redis/data
# 此处绑定ip,可以是阿里内外ip和本地ip,也可以直接注释掉该项
# bind 127.0.0.1
# 用于链接主节点密码
masterauth 123456
# 设置redis密码,各个节点请保持一致
requirepass 123456

4、复制redis目录

cp -r /opt/redis-5.0.7/src/ /usr/local/redis_cluster/

5、开启redis节点,创建启动集群

vim start.sh
/usr/local/redis_cluster/src/redis-server ./7000/redis.conf
/usr/local/redis_cluster/src/redis-server ./7001/redis.conf
/usr/local/redis_cluster/src/redis-server ./7002/redis.conf
/usr/local/redis_cluster/src/redis-server ./7003/redis.conf
/usr/local/redis_cluster/src/redis-server ./7004/redis.conf
/usr/local/redis_cluster/src/redis-server ./7005/redis.conf

/usr/local/redis_cluster/src/redis-cli --cluster create -a 123456 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 --cluster-replicas 1

启动脚本,后面的 stop.sh 也如此

# 将 start.sh 变成可执行文件
chmod u+x start.sh
# 执行脚本
./start.sh

如果出现以下信息,表示启动成功

>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 22b0f864d7eb19644a56c2ce011dcf2dc8225a02 127.0.0.1:7000
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 2f3e0fc9920596db41b156a1edeb358025096147 127.0.0.1:7002
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: ec9d2fc60ea3c34cd033271ff12a9771f3684858 127.0.0.1:7003
   slots: (0 slots) slave
   replicates 2f3e0fc9920596db41b156a1edeb358025096147
S: 30c8076db6c24ea97f1745267a39e2fae41173f6 127.0.0.1:7004
   slots: (0 slots) slave
   replicates 22b0f864d7eb19644a56c2ce011dcf2dc8225a02
S: 9b65dc82ba092cf6e9787bced56621a10371f5f1 127.0.0.1:7005
   slots: (0 slots) slave
   replicates 44322d2323e58bc9e717984ba8abf64ee929a8c8
M: 44322d2323e58bc9e717984ba8abf64ee929a8c8 127.0.0.1:7001
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

6、客户端链接,测试

./src/redis-cli -c -p 7000 -a 123456

-c 表示集群模式

7、基本命令

info replication 通过 cluster nodes 命令和 cluster info 命令来查看集群效果,通过id查看对应主从节点。

8、关闭集群

vim stop.sh
/usr/local/redis_cluster/src/redis-cli -c -h 127.0.0.1 -p 7000 -a 123456 shutdown
/usr/local/redis_cluster/src/redis-cli -c -h 127.0.0.1 -p 7001 -a 123456 shutdown
/usr/local/redis_cluster/src/redis-cli -c -h 127.0.0.1 -p 7002 -a 123456 shutdown
/usr/local/redis_cluster/src/redis-cli -c -h 127.0.0.1 -p 7003 -a 123456 shutdown
/usr/local/redis_cluster/src/redis-cli -c -h 127.0.0.1 -p 7004 -a 123456 shutdown
/usr/local/redis_cluster/src/redis-cli -c -h 127.0.0.1 -p 7005 -a 123456 shutdown

然后启动脚本,同 start.sh

Redis Cluster总结

Redis Cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。

集群有ABC三个主节点,如果这3个节点都没有加入从节点,如果B挂掉了,我们就无法访问整个集群了,A和C的slot也无法访问。

所以我们在创建集群的时候,一定要为每个主节点都添加了从节点,比如像这样,集群包含主节点A、B、C,以及从节点A1、B1、C1,那么即便B1挂掉,系统也可以正常工作。

B1节点替代了B节点,所以Redis集群将会选择B1节点作为新的主节点,集群将会继续正确地提供服务。当B重新启动后,它就会变成B1的从节点。

不过需要注意,如果节点B和B1同时挂掉了,Redis集群就无法继续正确地提供服务了。

快来抢沙发