快速搭建Redis Cluster 三主一副本分布式集群

释放双眼,带上耳机,听听看~!
当我们面对海量数据那么必然需要使用Redis Cluster集群,同时还需要具有高可用(主从复制和哨兵机制)能力,即每个master分片节点还需要有slave节点,这是分布式系统中典型的纵向扩展(Redis集群分片技术)的架构

环境说明

本次搭建采用一副本的方式,即3主1副本方式

IP 主机名 节点
192.168.31.10 redis-01 master1
192.168.31.11 redis-02 slave1
192.168.31.12 redis-03 master2
192.168.31.13 redis-04 slave2
192.168.31.14 redis-05 master3
192.168.31.15 redis-06 slave3
  • Redis版本号: redis-7.0.8
  • 系统版本号:CentOS Linux release 7.4.1708 (Core)

Redis基础环境

需要所有节点安装redis,以下方式任意一种方式即可

  • yum安装redis
[root@all redis]#  yum install redis
  • 源码包安装
[root@all redis]# wget http://download.redis.io/releases/redis-7.0.8.tar.gz
[root@all redis]# tar xf redis-7.0.8.tar.gz 
[root@all redis]# cd redis-7.0.8
[root@all redis]# make PREFIX=/opt/redis-7.0.8 install
[root@all redis]# cp redis.conf /opt/redis-7.0.8/  #拷贝配置文件,以及启动脚本
[root@all redis]# cp utils/redis_init_script /etc/init.d/
[root@all redis]# mkdir -p /opt/redis-7.0.8/dbfile  #提前创建一下存储目录

接下来修改Redis Cluster配置文件

cat >/opt/redis-7.0.8/redis.conf<<EOF
#监听网段
bind 0.0.0.0
#端口
port 6379
#后台运行
daemonize yes
#开启集群功能
cluster-enabled yes
#集群节点配置文件名,该文件不是人工编写的,由程序自动生成和修改
cluster-config-file cluster-nodes-6379.conf
#集群节点超时时间,配合cluster-replica-validity-factor使用
cluster-node-timeout 1000
#探测集群节点超时不可用的次数,假设cluster-node-timeout设置为1000毫秒,cluster-replica-validity-factor为5,那么1000*5之间内集群节点还不可用的话,会被标记为疑似下线
cluster-replica-validity-factor 5
#主节点下最少的从节点数
cluster-migration-barrier 1
#yes 要求所有主节点正常工作,且所有hash slots被分配到工作的主节点,集群才能提供服务,如果想一部分hash slots即可响应请求,则设置为no
cluster-require-full-coverage yes
#yes 禁止当主节点挂掉时,让从节点不能竞选为主节点
cluster-replica-no-failover no
#开启AOF持久化
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
aof-timestamp-enabled no
aof-rewrite-incremental-fsync yes

#设置RDB和AOF文件目录
dir /opt/redis-7.0.8/dbfile
#设置密码requirepass为Master密码,masterauth为Slave连接Master的密码
masterauth "123123"
requirepass "123123"
#日志
loglevel notice
logfile "/opt/redis.log"
#关闭安全模式
protected-mode no
EOF

直接复制上面的命令,接下来我们启动Redis

#启动
/opt/redis-7.0.8/bin/redis-server /opt/redis-7.0.8/redis.conf

#停止
ps -ef|grep redis-server|awk -F "[ ]+" '{print $2}'|xargs kill -9 

检查Redis 状态

[root@redis-01 ~]# ps -ef|grep redis-server   #检查进程
root     24996     1  0 23:30 ?        00:00:00 /opt/redis-7.0.8/bin/redis-server 0.0.0.0:6379 [cluster]
root     25002 24851  0 23:30 pts/0    00:00:00 grep --color=auto redis-server

[root@redis-01 ~]# /opt/redis-7.0.8/bin/redis-cli -p 6379  #登陆节点测试

127.0.0.1:6379> auth 123123  #redis我们设置密码为123123,这里进行测试
OK
127.0.0.1:6379> KEYS *            #测试数据没有问题
(empty array)
127.0.0.1:6379> 

以上步骤需要在每台节点进行操作

Redis Cluster 集群

在上面我们已经启动了redis cluster集群,可以在日志中查看到我们的一个节点ID

[root@redis-06 dbfile]# cat /opt/redis-7.0.8/dbfile/cluster-nodes-6379.conf 
63ab1a190eedb1968f422dcdb3d168abea09f25e :0@0 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0

#每台节点都有一个

并且此时我们使用redis-cli命令,也可以看到当前集群节点的信息 (仅自己可以看到)

[root@redis-06 ~]# /opt/redis-7.0.8/bin/redis-cli -p 6379
127.0.0.1:6379> auth 123123
OK
127.0.0.1:6379> cluster nodes
63ab1a190eedb1968f422dcdb3d168abea09f25e :6379@16379 myself,master - 0 0 0 connected

官方文档在Redis 5版本后可以直接通过Redis-cli命令添加集群,4.x-3.x版本之前可以使用redis-trib.rb命令操作(ruby写的)

/opt/redis-7.0.8/bin/redis-cli -a 123123 --cluster create 192.168.31.10:6379 \
 192.168.31.12:6379 \
 192.168.31.14:6379 \
 192.168.31.11:6379 \
 192.168.31.13:6379 \
 192.168.31.15:6379 \
--cluster-replicas 1  

#这里使用的命令是create,因为我们要创建一个新集群。该选项--cluster-replicas 1意味着我们希望为每个创建的master创建一个副本。

#创建集群是按照顺序创建master和slave节点,如果想自定义master和slave,请更改他们的顺序
#-a是指定密码

快速搭建Redis Cluster 三主一副本分布式集群

快速搭建Redis Cluster 三主一副本分布式集群

检查集群

使用下面的命令可以检查集群的状态,查看集群的详细信息-a 123123为Redis密码

[root@redis-01 ~]# /opt/redis-7.0.8/bin/redis-cli --cluster check 192.168.31.10:6379 -a 123123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.31.10:6379 (faa58ffb...) -> 0 keys | 5461 slots | 1 slaves.    #集群Master节点,以及Slave数量
192.168.31.12:6379 (7e05d2fd...) -> 0 keys | 5462 slots | 1 slaves.
192.168.31.14:6379 (4726162b...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.31.10:6379)
M: faa58ffb1c7e72cdd480c7fc8fef58730c51ecbd 192.168.31.10:6379
   slots:[0-5460] (5461 slots) master                               #每个节点的槽位
   1 additional replica(s)
S: 13d6cc765622c19daedb3736876532c0e499e8fe 192.168.31.11:6379
   slots: (0 slots) slave
   replicates 4726162bf792c7e11f447e605bd40c8c2efb06e4
M: 7e05d2fdffdebd27fc0f6b4d64eb265aca4f0234 192.168.31.12:6379
   slots:[5461-10922] (5462 slots) master   #每个节点的槽位
   1 additional replica(s)
M: 4726162bf792c7e11f447e605bd40c8c2efb06e4 192.168.31.14:6379
   slots:[10923-16383] (5461 slots) master   #每个节点的槽位
   1 additional replica(s)
S: 63ab1a190eedb1968f422dcdb3d168abea09f25e 192.168.31.15:6379
   slots: (0 slots) slave
   replicates 7e05d2fdffdebd27fc0f6b4d64eb265aca4f0234
S: aade19f30abdd2859e53dc35f230470421a630eb 192.168.31.13:6379
   slots: (0 slots) slave
   replicates faa58ffb1c7e72cdd480c7fc8fef58730c51ecbd
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

使用命令往Redis Cluster集群写入数据

  • -c 表选连接集群
  • -p 集群端口号(节点端口号)
  • -a Redis密码

其中当我们写数据的时候,Redis会随机分发对应槽位,所以我们每次写入数据都不在一台Redis中

[root@redis-01 ~]# /opt/redis-7.0.8/bin/redis-cli -c -p 6379 -a 123123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> set ab ab
-> Redirected to slot [13567] located at 192.168.31.14:6379
OK
192.168.31.14:6379> set go home
-> Redirected to slot [4084] located at 192.168.31.10:6379
OK
192.168.31.10:6379> set abcd 123123
-> Redirected to slot [10294] located at 192.168.31.12:6379
OK

同时也可以通过cluster info查看集群的配置参数

[root@redis-01 ~]# /opt/redis-7.0.8/bin/redis-cli -c -p 6379 -a 123123 cluster info
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
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:1
cluster_stats_messages_ping_sent:8888
cluster_stats_messages_pong_sent:8847
cluster_stats_messages_fail_sent:4
cluster_stats_messages_sent:17739
cluster_stats_messages_ping_received:8842
cluster_stats_messages_pong_received:8885
cluster_stats_messages_meet_received:5
cluster_stats_messages_fail_received:4
cluster_stats_messages_received:17736
total_cluster_links_buffer_limit_exceeded:0

给TA打赏
共{{data.count}}人
人已打赏
Redis报错锦集

Redis Cluster集群连接错误RedisCommandTimeoutException: Command timed out after 6 second(s)

2023-3-30 17:20:12

KubernetesRedis

Kubernetes Helm快速部署Redis Cluster & Redisinsight

2023-6-27 18:38:47

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索