Redis 集群搭建

628 阅读7分钟

Redis 集群搭建

这里在一台服务器(192.168.31.237)上搭建3主3从,以 7001,7002,7003,7004,7005,7006 端口区分每个节点为例

1. 下载编译

wget http://download.redis.io/releases/redis-4.0.10.tar.gz
  • 创建目录
[root@zivs3 opt]# mkdir -p /opt/redis-cluster/redis-7001

[root@zivs3 opt]# mkdir -p /var/redis/{data,logs,pid}
- redis-cluster redis集群目录
- /var/redis/data redis数据文件目录(dump.rdb, appendonly.aof, nodes.conf)
- /var/redis/logs resis日志文件
- /var/redis/pid resis启动进程
  • 解压redis
# 将redis-4.0.10.tar.gz解压到/opt/redis-cluster目录下
[root@zivs3 tools]# tar -zxvf redis-4.0.10.tar.gz -C /opt/redis-cluster
  • 编译

redis 用C开发的需要提前先安装 gcc 编译环境

[root@zivs3 tools]# cd /opt/redis-cluster/redis-4.0.10
[root@zivs3 redis-4.0.10]# make install PREFIX=/opt/redis-cluster/redis-7001

此时在 /opt/redis-cluster/redis-7001 目录中会出现一个 bin 目录

2. 服务配置

  • 执行下面命令将 /opt/redis-cluster/redis-4.0.10 目录下的 redis.conf 文件复制到 /opt/redis-cluster/redis-7001 目录下 [这是redis配置文件]
[root@zivs3 redis-4.0.10]# cp redis.conf /opt/redis-cluster/redis-7001
  • 修改配置文件,下面为需要配置的项:
# host
bind 192.168.31.237
# 端口号 (每个节点对应一个端口号)
port 7001
# 开启后台运行
daemonize yes
# 进程文件(每个节点区分文件名)
pidfile /var/redis/pid/redis_7001.pid
# 日志文件(每个节点区分文件名)
logfile /var/redis/logs/redis_7001.log
# rdb文件名(每个节点区分文件名)
dbfilename dump_7001.rdb
# rbd,aof,nodes.conf 文件路径
dir /var/redis/data
# 开启redis集群
cluster-enabled yes
# 集群nodes.conf文件(每个节点区分文件名)
cluster-config-file nodes-7001.conf

此时一台redis服务已经配好,接下来就是服务copy,修改配置

# 服务copy
[root@zivs3 redis-cluster]# cp -r redis-7001 redis-7002
#服务配置
[root@zivs3 redis-cluster]# sed -i 's#7001#7002#g' ./redis-7002/redis.conf

# 以此类推
# ...

3. 服务启动

  • 建立批量启动脚本
[root@zivs3 redis-cluster]# vim start-all-redis.sh 

cd /opt/redis-cluster/redis-7001
./bin/redis-server redis.conf &
cd /opt/redis-cluster/redis-7002
./bin/redis-server redis.conf &
cd /opt/redis-cluster/redis-7003
./bin/redis-server redis.conf &
cd /opt/redis-cluster/redis-7004
./bin/redis-server redis.conf &
cd /opt/redis-cluster/redis-7005
./bin/redis-server redis.conf &
cd /opt/redis-cluster/redis-7006
./bin/redis-server redis.conf &
  • 启动 redis 服务
[root@zivs3 redis-cluster]# ./start-all-redis.sh 
  • 查看 redis 启动进程
[root@zivs3 redis-cluster]# ps -ef | grep redis
root      3240     1  0 16:55 ?        00:00:00 ./bin/redis-server 192.168.31.237:7004 [cluster]
root      3241     1  0 16:55 ?        00:00:00 ./bin/redis-server 192.168.31.237:7005 [cluster]
root      3242     1  0 16:55 ?        00:00:00 ./bin/redis-server 192.168.31.237:7001 [cluster]
root      3243     1  0 16:55 ?        00:00:00 ./bin/redis-server 192.168.31.237:7002 [cluster]
root      3244     1  0 16:55 ?        00:00:00 ./bin/redis-server 192.168.31.237:7006 [cluster]
root      3260     1  0 16:55 ?        00:00:00 ./bin/redis-server 192.168.31.237:7003 [cluster]
root      3956  2524  0 17:06 pts/2    00:00:00 grep --color=auto redis
  • 批量 kill redis 进程
ps -ef | grep redis | grep -v grep | awk '{print $2}' | xargs kill -9

4. 创建集群

  • 创建集群
./redis-trib.rb create  --replicas 1 192.168.31.237:7001 192.168.31.237:7002 192.168.31.237:7003 192.168.31.237:7004 192.168.31.237:7005 192.168.31.237:7006

集群创建成功输入如下信息,告诉你 master 节点信息, masterslave 之间的映射关系

[root@zivs3 redis-cluster]# ./redis-trib.rb create  --replicas 1 192.168.31.237:7001 192.168.31.237:7002 192.168.31.237:7003 192.168.31.237:7004 192.168.31.237:7005 192.168.31.237:7006
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.31.237:7001
192.168.31.237:7002
192.168.31.237:7003
Adding replica 192.168.31.237:7005 to 192.168.31.237:7001
Adding replica 192.168.31.237:7006 to 192.168.31.237:7002
Adding replica 192.168.31.237:7004 to 192.168.31.237:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 28fbdaac692dcec385943061a400011962a05f91 192.168.31.237:7001
   slots:0-5460 (5461 slots) master
M: c9064df8348c3cd8c063f1708d8609dbb1a4dbea 192.168.31.237:7002
   slots:5461-10922 (5462 slots) master
M: f509567d93cf062308aa398394e9db95a4a6c385 192.168.31.237:7003
   slots:10923-16383 (5461 slots) master
S: a0bb58a8ecae6727bdde68d14f4a3a178a961ec6 192.168.31.237:7004
   replicates f509567d93cf062308aa398394e9db95a4a6c385
S: 64428eb3225ac294eb63237c9029cdbe2aa5422d 192.168.31.237:7005
   replicates 28fbdaac692dcec385943061a400011962a05f91
S: 144740e2866320a5eb93bbf4c5417eac741823ec 192.168.31.237:7006
   replicates c9064df8348c3cd8c063f1708d8609dbb1a4dbea
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 192.168.31.237:7001)
M: 28fbdaac692dcec385943061a400011962a05f91 192.168.31.237:7001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: f509567d93cf062308aa398394e9db95a4a6c385 192.168.31.237:7003
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: 64428eb3225ac294eb63237c9029cdbe2aa5422d 192.168.31.237:7005
   slots: (0 slots) slave
   replicates 28fbdaac692dcec385943061a400011962a05f91
M: c9064df8348c3cd8c063f1708d8609dbb1a4dbea 192.168.31.237:7002
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: a0bb58a8ecae6727bdde68d14f4a3a178a961ec6 192.168.31.237:7004
   slots: (0 slots) slave
   replicates f509567d93cf062308aa398394e9db95a4a6c385
S: 144740e2866320a5eb93bbf4c5417eac741823ec 192.168.31.237:7006
   slots: (0 slots) slave
   replicates c9064df8348c3cd8c063f1708d8609dbb1a4dbea
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
  • 集群连接
[root@zivs3 redis-cluster]# ./redis-cli -c -h 192.168.31.237 -p 7002
192.168.31.237:7002> set zkey zivs.zheng
OK
192.168.31.237:7002> get zkey
"zivs.zheng"
注意:`./redis-cli -c -h 192.168.31.237 -p 7002` 需要加上 `-c` 否则连接的是当前节点,而不是集群。
  • 查看集群信息
192.168.31.237:7002> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:2
cluster_stats_messages_ping_sent:989
cluster_stats_messages_pong_sent:921
cluster_stats_messages_sent:1910
cluster_stats_messages_ping_received:921
cluster_stats_messages_pong_received:987
cluster_stats_messages_received:1908
  • 查看集群节点
192.168.31.237:7002> cluster nodes
0bc6b597eaa54b14c795bf1e8a5773f4420c4b43 192.168.31.237:7005@17005 slave 1bab945951f8853fd840dc289d8486c35e1f20d7 0 1531991432142 5 connected
ec2b2be8177cbd7241bf61d6190e31555569e512 192.168.31.237:7001@17001 master - 0 1531991433150 1 connected 0-5460
daf135724c4016b92fcf024582ab074310e0532e 192.168.31.237:7004@17004 slave e0c54e8e03a7cf12f22abdd677ea466edb02c107 0 1531991431000 4 connected
e9cb87de61e04df264eccadf38b42a197344de9a 192.168.31.237:7006@17006 slave ec2b2be8177cbd7241bf61d6190e31555569e512 0 1531991432000 6 connected
e0c54e8e03a7cf12f22abdd677ea466edb02c107 192.168.31.237:7002@17002 myself,master - 0 1531991429000 2 connected 5461-10922
1bab945951f8853fd840dc289d8486c35e1f20d7 192.168.31.237:7003@17003 master - 0 1531991431000 3 connected 10923-16383

至此redis集群的搭建完毕