redis-cluster集群安装教程

安装信息
  • 操作系统:redhat6.x(centos6.x)
  • 安装包:redis-5.0.0.tar.gz
  • 安装目录:/opt/software
  • REDIS_HOME:/opt/software/redis-5.0.0,并建立软链接/opt/software/redis指向当前版本
  • redis-cluster节点目录:/opt/software/redis-cluster/节点名称,本文使用端口库作为节点名称
注意事项
  • 每个redis节点使用两个TCP端口,一个是提供服务的端口,另一个是集群通信的端口,两者偏移10000.如果节点端口为7000,则通信端口为17000。
  • redis集群不支持NAT或地址转换的环境。当获取的数据不在当前分片时,节点会返回一个重定向到另一个节点的指令,由客户端负责去连接指定节点获取数据。NAT环境外网地址和内网地址不一致,重定向返回的是转换前的地址,客户端无法连接。同理,如果配置节点时使用的地址是127.0.0.1,其余机器也无法连接
redus-cluster目录下
  • startAll.sh 启动本目录下所有节点
  • stopAll.sh 停止本目录下所有节点
  • createClush.sh 用于创建集群的命令,不能同步执行
  • 各节点目录
每个节点目录下,目录文件结构如下:
  • conf: 配置文件目录
  • redis.conf 基础配置文件
  • bin: 公共脚本目录
  • common.sh 公共脚本
  • data: 数据文件目录
  • dump.rdb 数据文件
  • node-端口.conf 集群配置文件,由集群自动生成
  • logs: 日志目录
  • redis.log redis日志
  • start.sh 启动节点脚本
  • stop.sh 停止脚本
  • cli.sh 简单的控制命令脚本
安装步骤
  • 安装redis-5.0.0,详细步骤见博文redis安装教程
  • 配置redis集群
  • 建立redis集群目录: mkdir -p /opt/software/redis-cluster
  • 进入目录: cd /opt/software/redis-cluster
  • 下载节点配置放在reds-cluster目录,下载地址
  • 将redis-cluster.zip上传到/opt/software/redis-cluster并解压: unzip redis-cluster.zip
  • 根据情况增删节点目录,一般情况下
  • 单机测试模式: 同一个机器上,7000-7005共6各节点,三个分片,每个分片一个从节点
  • 基础集群模式:三个机器,每个机器上7000,7001两个节点,共六个节点,同样为三个分片,每个分片1个从节点
  • 启动所有节点: sh startAll.sh
  • 如果是多机集群,将所有机器上部署上节点并启动
  • 修改createCluter.sh中的节点IP和端口
  • 执行createCluter.sh,配置集群,如下是我所有的输出
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.18.16.237:7003 to 172.18.16.237:7000
Adding replica 172.18.16.237:7004 to 172.18.16.237:7001
Adding replica 172.18.16.237:7005 to 172.18.16.237:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 4c975720cb9e54b300c7a133d0dda9756e847d0a 172.18.16.237:7000
   slots:[0-5460] (5461 slots) master
M: 1a55fdffc21b3787d773e14d6a8b097ca5296568 172.18.16.237:7001
   slots:[5461-10922] (5462 slots) master
M: 9c19c4cc004a5541757aad0afe97ed5397452e3c 172.18.16.237:7002
   slots:[10923-16383] (5461 slots) master
S: 2eb825ac53e012d51b66b6c38befe92d0c2ee09a 172.18.16.237:7003
   replicates 9c19c4cc004a5541757aad0afe97ed5397452e3c
S: 7a1c253e34ddc3bb18cddb374b12ec6d7cc57068 172.18.16.237:7004
   replicates 4c975720cb9e54b300c7a133d0dda9756e847d0a
S: 181dcdf4cb553759cafa9684e717a31b8b7082fa 172.18.16.237:7005
   replicates 1a55fdffc21b3787d773e14d6a8b097ca5296568
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
....
>>> Performing Cluster Check (using node 172.18.16.237:7000)
M: 4c975720cb9e54b300c7a133d0dda9756e847d0a 172.18.16.237:7000
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 181dcdf4cb553759cafa9684e717a31b8b7082fa 172.18.16.237:7005
   slots: (0 slots) slave
   replicates 1a55fdffc21b3787d773e14d6a8b097ca5296568
M: 1a55fdffc21b3787d773e14d6a8b097ca5296568 172.18.16.237:7001
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 7a1c253e34ddc3bb18cddb374b12ec6d7cc57068 172.18.16.237:7004
   slots: (0 slots) slave
   replicates 4c975720cb9e54b300c7a133d0dda9756e847d0a
S: 2eb825ac53e012d51b66b6c38befe92d0c2ee09a 172.18.16.237:7003
   slots: (0 slots) slave
   replicates 9c19c4cc004a5541757aad0afe97ed5397452e3c
M: 9c19c4cc004a5541757aad0afe97ed5397452e3c 172.18.16.237:7002
   slots:[10923-16383] (5461 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.
常见问题
  • 可以使用ps -ef|grep redis查看节点是否正常启动
[root@kfb_db237 redis-cluster]# ps -ef|grep redis
root     22029     1  0 08:21 ?        00:00:00 /opt/software/redis/bin/redis-server *:7002 [cluster]                                
root     22035     1  0 08:21 ?        00:00:00 /opt/software/redis/bin/redis-server *:7000 [cluster]                                
root     22041     1  0 08:21 ?        00:00:00 /opt/software/redis/bin/redis-server *:7005 [cluster]                                
root     22047     1  0 08:21 ?        00:00:00 /opt/software/redis/bin/redis-server *:7003 [cluster]                                
root     22053     1  0 08:21 ?        00:00:00 /opt/software/redis/bin/redis-server *:7004 [cluster]                                
root     22059     1  0 08:21 ?        00:00:00 /opt/software/redis/bin/redis-server *:7001 [cluster]                                
root     22938 17635  0 08:26 pts/0    00:00:00 grep redis
  • 如果节点未正常启动,一般为下列两个问题
  • 内存不够,请更改redis内存配置,或者调整机器内存
  • 端口占用,除了通信占用外,还可能是集群端口被占用
  • 当节点中存在数据时,无法创建集群。
  • 当节点已经配置过后,无法再使用创建命令
  • 本例中,可以使用下面命令快速清理集群数据和配置
  • cd /opt/software/redis-cluster
  • find . -name “node*” -exec rm -rf {} ;
  • find . -name “dump*” -exec rm -rf {} ;