单机测试redis6.2.9集群部署

30 阅读6分钟

Redis 集群原理

  • Redis 集群结构:N 个平权主节点(master),每个主节点对应 M 个从节点(slave)。

注:因为投票机制,N 须为奇数。必须要 3 个或以上的主节点,否则在创建集群时会失败,并且当存活的节点数小于总节点数的一半时,整个集群就无法提供服务了,所以正常集群至少需要6个节点。

  • Redis 集群投票机制:服务器之间通过互相的 ping-pong 判断是否节点可以连接上。如果有一半以上的节点去 ping 一个节点的时候没有回应,集群就认为这个节点宕机了。此时该主节点对应的从节点上升为主节点。当没有从节点可替补时,集群宕机。

  • 本次部署简化,使用单台linux服务器用6个端口部署,3主3从节点测试redis集群环境

资源准备

ip端口节点类型
192.168.1.886381
192.168.1.886382
192.168.1.886383
192.168.1.886391从 6381
192.168.1.886392从 6382
192.168.1.886393从 6383

数据库安装包download.redis.io/releases/re…

开始部署

创建目录

mkdir 6381 6382 6383
mkdir 6391 6392 6393
cd 6381
tar -zxvf redis-6.2.9.tar.gz

编译安装

make 
make install PREFIX=/usr/local/redis/cluster/6381

拷贝并修改配置文件

bind 192.168.1.88
port 6381
daemonize yes
pidfile /usr/local/redis/cluster/6381/redis.pid
logfile "/usr/local/redis/cluster/6381/redis.log"
dbfilename dump6381.rdb
# RDB 持久化设置
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfilename "appendonly6381.aof"

cluster-enabled yes
cluster-node-timeout 6000
cluster-config-file nodes-6381.conf


 # 主节点的密码验证
masterauth feng$2024
requirepass feng$2024
 
# 集群配置中向其他节点广播的 IP 地址
cluster-announce-ip 192.168.1.88
 # 集群配置中向其他节点广播的端口
cluster-announce-port 6381

将以上配置复制6份,修改对应端口号和replicaof

启动节点start-cluster.sh

#!/bin/bash
./6381/bin/redis-server ./6381/redis.conf
./6382/bin/redis-server ./6382/redis.conf
./6383/bin/redis-server ./6383/redis.conf
./6391/bin/redis-server ./6391/redis.conf
./6392/bin/redis-server ./6392/redis.conf
./6393/bin/redis-server ./6393/redis.conf

查看启动情况

ps -ef | grep redis |grep -v grep
root     1309463       1  0 15:43 ?        00:00:00 ./6381/bin/redis-server 172.16.156.197:6381 [cluster]
root     1309465       1  0 15:43 ?        00:00:00 ./6382/bin/redis-server 172.16.156.197:6382 [cluster]
root     1309471       1  0 15:43 ?        00:00:00 ./6383/bin/redis-server 172.16.156.197:6383 [cluster]
root     1309481       1  0 15:43 ?        00:00:00 ./6391/bin/redis-server 172.16.156.197:6391 [cluster]
root     1309483       1  0 15:43 ?        00:00:00 ./6392/bin/redis-server 172.16.156.197:6392 [cluster]
root     1309489       1  0 15:43 ?        00:00:00 ./6393/bin/redis-server 172.16.156.197:6393 [cluster]

6台都是cluster启动成功才可以

创建集群

使用redis-cli --cluster 命令

# 设置密码
redis-cli -a feng$2024

redis-cli --cluster create 192.168.1.88:6381 192.168.1.88:6382 192.168.1.88:6383\
 192.168.1.88:6391 192.168.1.88:6392 192.168.1.88:6393 \
--cluster-replicas 1 -a feng$2024

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.1.88:6392 to 192.168.1.88:6381
Adding replica 192.168.1.88:6393 to 192.168.1.88:6382
Adding replica 192.168.1.88:6391 to 192.168.1.88:6383
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 7b7b89d282fdaaa998ab9ae31cbe537d09dd7e74 192.168.1.88:6381
   slots:[0-5460] (5461 slots) master
M: cf74039746ef91e0fc24a37a038da286aca11b9c 192.168.1.88:6382
   slots:[5461-10922] (5462 slots) master
M: 9c1db9699978cb1227136ac5e38bb8678378c749 192.168.1.88:6383
   slots:[10923-16383] (5461 slots) master
S: ba446c42379e033e277ab77ceba19d29f4beb2f3 192.168.1.88:6391
   replicates cf74039746ef91e0fc24a37a038da286aca11b9c
S: bdeb3887db2b9ffa505cf70824c4253da8df203a 192.168.1.88:6392
   replicates 9c1db9699978cb1227136ac5e38bb8678378c749
S: a0d401b2b4d8ae229616d537cae1e7d45b0a06bf 192.168.1.88:6393
   replicates 7b7b89d282fdaaa998ab9ae31cbe537d09dd7e74
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.1.88:6381)
M: 7b7b89d282fdaaa998ab9ae31cbe537d09dd7e74 192.168.1.88:6381
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: ba446c42379e033e277ab77ceba19d29f4beb2f3 192.168.1.88:6391
   slots: (0 slots) slave
   replicates cf74039746ef91e0fc24a37a038da286aca11b9c
S: a0d401b2b4d8ae229616d537cae1e7d45b0a06bf 192.168.1.88:6393
   slots: (0 slots) slave
   replicates 7b7b89d282fdaaa998ab9ae31cbe537d09dd7e74
M: 9c1db9699978cb1227136ac5e38bb8678378c749 192.168.1.88:6383
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: bdeb3887db2b9ffa505cf70824c4253da8df203a 192.168.1.88:6392
   slots: (0 slots) slave
   replicates 9c1db9699978cb1227136ac5e38bb8678378c749
M: cf74039746ef91e0fc24a37a038da286aca11b9c 192.168.1.88:6382
   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.

检测是否创建成功

./redis-cli -c -h 192.168.1.88 -p 6381
auth feng$2024

192.168.1.88:6381> info
# Server
redis_version:6.2.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:acc995961c9790c8
redis_mode:cluster
os:Linux 4.19.90-24.4.v2101.ky10.x86_64 x86_64