Redis 集群架构的搭建基于5.03

哨兵架构存在的一些缺陷:

1. 瞬断问题,哨兵架构中,当主节点挂断后需要选举,然后切换,中间有几秒到几十秒的服务暂停时间

2. 高并发受限问题,哨兵对外只有一个节点提供写服务,一台就几w的QPS。

3. 单个节点的内存不能设置过大,也就10G左右,否者导致持久化文件过大,影响数据恢复和主从同步效率。

Redis集群架构可以解决上面提到的问题,

redis集群是有多个主从节点小群组成的分布式服务器集群

特点: 复制,高可用,分片特性,没有中心节点,可水平扩容。官网称可以支持上万个节点(推荐不超过1000),配置简单。

瞬断的问题还是没有彻底解决,如果刚好要访问的哪个key所在的小集群挂了,也会等待那个小集群选举并重新起来。但是对于位于其他集群的key服务是可以正常服务。

下面为了简便,搭建的时候是一主一从,不是上面的一主2从的结构。

reids高可用集群的搭建:

扫描二维码关注公众号,回复: 12165343 查看本文章

1. 根据已经安装好redis的机器,通过虚拟机克隆3台机器出来

2. 设置3台机器的ip地址分别为192.168.0.101,192.168.0.102,192.168.0.103

    配置网络的教程:https://blog.csdn.net/pengweismile/article/details/112910138 

3. 分别在3台机器上做以下配置,

     3.1 新建目录,修改配置文件

cd /home/allen/packages/redis-5.0.3/
mkdir redis-cluster
cd redis-cluster
mkdir 8001  8004
cp /home/allen/packages/redis-5.0.3/conf/redis.config 8001
cp /home/allen/packages/redis-5.0.3/conf/redis.config 8004
vi 8001/redis.config

    3.2 在redis.config文件中配置如下信息,最主要的是下面的加粗字段:

port 8001
protected-mode no
daemonize yes
pidfile "/var/run/redis_8001.pid"
logfile "8001.log"
dir "/home/allen/packages/redis-5.0.3/8001"
masterauth allen
replica-read-only yes
requirepass allen
appendonly yes
appendfilename "appendonly.aof"
cluster-enabled yes
cluster-config-file nodes-8001.conf
cluster-node-timeout 10000

4.在各个机器的redis-5.0.3目中创建端口号对应得目录,存储log数据等

cd /home/allen/packages/redis-5.0.3
mkdir 8001 8004

4.1. 分别在192.168.0.102 得/home/allen/packages/redis-5.0.3/redis-cluster下创建目录8002,8005,192.168.0.102 上创建8003,8006, 然后被配置文件redis.config copy进去

cd /home/allen/packages/redis-5.0.3/redis-cluster
mkdir 8001 8004

5.分别在对应目录下的redis.config文件中的进行全部替换,达到修改每个配置文件得目的

:%s/8001/8004/g

6.在各个机器上分别启动redis服务端

[allen@localhost redis-5.0.3]$ src/redis-server redis-cluster/8001/redis.conf 
[allen@localhost redis-5.0.3]$ src/redis-server redis-cluster/8004/redis.conf

[allen@localhost redis-5.0.3]$ src/redis-server redis-cluster/8002/redis.conf 
[allen@localhost redis-5.0.3]$ src/redis-server redis-cluster/8005/redis.conf

[allen@localhost redis-5.0.3]$ src/redis-server redis-cluster/8003/redis.conf 
[allen@localhost redis-5.0.3]$ src/redis-server redis-cluster/8006/redis.conf 

7. 创建集群,贴出启动成功的log

src/redis-cli -a allen --cluster create 192.168.0.101:8001 192.168.0.101:8004 192.168.0.102:8002 192.168.0.102:8005 192.168.0.103:8003 192.168.0.103:8006 --cluster-replicas 1

[allen@localhost redis-5.0.3]$ src/redis-cli -a allen --cluster create 192.168.0.101:8001 192.168.0.101:8004 192.168.0.102:8002 192.168.0.102:8005 192.168.0.103:8003 192.168.0.103:8006 --cluster-replicas 1
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 192.168.0.102:8005 to 192.168.0.101:8001
Adding replica 192.168.0.101:8004 to 192.168.0.102:8002
Adding replica 192.168.0.103:8006 to 192.168.0.103:8003
>>> Trying to optimize slaves allocation for anti-affinity
[OK] Perfect anti-affinity obtained!
M: 7e6aa35995b79bef083cbfe60855d6d4ec3ba999 192.168.0.101:8001
   slots:[0-5460] (5461 slots) master
S: 499787d7590f9df6d102339c1341c00a1585726f 192.168.0.101:8004
   replicates 0f1f5538d02a78e9e5266afc285a4a524e3daa51
M: 383e0df8c3e16aacf86a17cbb7b2819426f9e454 192.168.0.102:8002
   slots:[5461-10922] (5462 slots) master
S: 3689c09d371ea3b0b11b4cc3827412220a8b6a11 192.168.0.102:8005
   replicates 7e6aa35995b79bef083cbfe60855d6d4ec3ba999
M: 0f1f5538d02a78e9e5266afc285a4a524e3daa51 192.168.0.103:8003
   slots:[10923-16383] (5461 slots) master
S: 9a5e3238d9648eba8084c6f5ad62814c61fb73b3 192.168.0.103:8006
   replicates 383e0df8c3e16aacf86a17cbb7b2819426f9e454
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.0.101:8001)
M: 7e6aa35995b79bef083cbfe60855d6d4ec3ba999 192.168.0.101:8001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 3689c09d371ea3b0b11b4cc3827412220a8b6a11 192.168.0.102:8005
   slots: (0 slots) slave
   replicates 7e6aa35995b79bef083cbfe60855d6d4ec3ba999
M: 383e0df8c3e16aacf86a17cbb7b2819426f9e454 192.168.0.102:8002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 9a5e3238d9648eba8084c6f5ad62814c61fb73b3 192.168.0.103:8006
   slots: (0 slots) slave
   replicates 383e0df8c3e16aacf86a17cbb7b2819426f9e454
M: 0f1f5538d02a78e9e5266afc285a4a524e3daa51 192.168.0.103:8003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 499787d7590f9df6d102339c1341c00a1585726f 192.168.0.101:8004
   slots: (0 slots) slave
   replicates 0f1f5538d02a78e9e5266afc285a4a524e3daa51
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[allen@localhost redis-5.0.3]$ 

8. 查看用cluster的形式登录客户端,并查看cluster信息,可以看到cluster_know_nodes:6是6台机器。

[allen@localhost redis-5.0.3]$ src/redis-cli -a allen -c -h 192.168.0.101 -p 8004
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.0.101:8004> 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:5
cluster_stats_messages_ping_sent:104
cluster_stats_messages_pong_sent:113
cluster_stats_messages_meet_sent:4
cluster_stats_messages_sent:221
cluster_stats_messages_ping_received:112
cluster_stats_messages_pong_received:108
cluster_stats_messages_meet_received:1
cluster_stats_messages_received:221

9. 查看cluster nodes可以看到每台机器的主从结构,这里可以看到这里的主重都是分别在不同的机器的。就是同一台ip的2个实例不会是主从结构。

192.168.0.101, 8001 8004

192.168.0.102, 8002  8005

192.168.0.103,    8003 8006

8002(主)-8006(从)

8001(主)-8005(从)

8003(主)-8004(从)

192.168.0.101:8004> cluster nodes
9a5e3238d9648eba8084c6f5ad62814c61fb73b3 192.168.0.103:8006@18006 slave 383e0df8c3e16aacf86a17cbb7b2819426f9e454 0 1611145153000 6 connected
3689c09d371ea3b0b11b4cc3827412220a8b6a11 192.168.0.102:8005@18005 slave 7e6aa35995b79bef083cbfe60855d6d4ec3ba999 0 1611145154081 4 connected
0f1f5538d02a78e9e5266afc285a4a524e3daa51 192.168.0.103:8003@18003 master - 0 1611145152121 5 connected 10923-16383
383e0df8c3e16aacf86a17cbb7b2819426f9e454 192.168.0.102:8002@18002 master - 0 1611145153172 3 connected 5461-10922
7e6aa35995b79bef083cbfe60855d6d4ec3ba999 192.168.0.101:8001@18001 master - 0 1611145154181 1 connected 0-5460
499787d7590f9df6d102339c1341c00a1585726f 192.168.0.101:8004@18004 myself,slave 0f1f5538d02a78e9e5266afc285a4a524e3daa51 0 1611145151000 2 connected
192.168.0.101:8004> 

10. 可以看到,以上的信息都记录在了每天机器的文件中,如下,所以当你期间重启后,不用再去创建集群,只要每台集群的redis服务起来,集群就会自己其起来,根据下面的这些信息。

[allen@localhost redis-5.0.3]$ pwd
/home/allen/packages/redis-5.0.3
[allen@localhost redis-5.0.3]$ cd 8001
[allen@localhost 8001]$ ls
8001.log  appendonly.aof  nodes-8001.conf
[allen@localhost 8001]$ less nodes-8001.conf 
[allen@localhost 8001]$ cat nodes-8001.conf 
3689c09d371ea3b0b11b4cc3827412220a8b6a11 192.168.0.102:8005@18005 slave 7e6aa35995b79bef083cbfe60855d6d4ec3ba999 0 1611145053207 4 connected
383e0df8c3e16aacf86a17cbb7b2819426f9e454 192.168.0.102:8002@18002 master - 0 1611145050117 3 connected 5461-10922
9a5e3238d9648eba8084c6f5ad62814c61fb73b3 192.168.0.103:8006@18006 slave 383e0df8c3e16aacf86a17cbb7b2819426f9e454 0 1611145052000 6 connected
0f1f5538d02a78e9e5266afc285a4a524e3daa51 192.168.0.103:8003@18003 master - 0 1611145052000 5 connected 10923-16383
7e6aa35995b79bef083cbfe60855d6d4ec3ba999 192.168.0.101:8001@18001 myself,master - 0 1611145050000 1 connected 0-5460
499787d7590f9df6d102339c1341c00a1585726f 192.168.0.101:8004@18004 slave 0f1f5538d02a78e9e5266afc285a4a524e3daa51 0 1611145052187 5 connected
vars currentEpoch 6 lastVoteEpoch 0
[allen@localhost 8001]$ 

猜你喜欢

转载自blog.csdn.net/pengweismile/article/details/112728366