redis

您所在的位置:网站首页 redis集群手动切换节点 redis

redis

2024-07-12 19:17| 来源: 网络整理| 查看: 265

前言

redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用。

redis cluster   redis cluster是Redis的分布式解决方案,在3.0版本推出后有效地解决了redis分布式方面的需求   自动将数据进行分片,每个master上放一部分数据   提供内置的高可用支持,部分master不可用时,还是可以继续工作的

安装部署

点击这里下载>redis源码包下载

>> Performing hash slots allocation on 3 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 M: 1c8997f7e87bac575a700b3591941849ac1f49d8 127.0.0.1:7000 slots:[0-5460] (5461 slots) master M: 5f04d177e72892993e392f4d25b430eb911971a4 127.0.0.1:7001 slots:[5461-10922] (5462 slots) master M: 52204bf2a022785f0cc465ab0049b261d245ab85 127.0.0.1:7002 slots:[10923-16383] (5461 slots) master Can I set the above configuration? (type 'yes' to accept): yes #这儿是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 127.0.0.1:7000) M: 1c8997f7e87bac575a700b3591941849ac1f49d8 127.0.0.1:7000 slots:[0-5460] (5461 slots) master M: 5f04d177e72892993e392f4d25b430eb911971a4 127.0.0.1:7001 slots:[5461-10922] (5462 slots) master M: 52204bf2a022785f0cc465ab0049b261d245ab85 127.0.0.1:7002 slots:[10923-16383] (5461 slots) master [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. 测试集群的状态: [root@localhost 7005] redis-cli --cluster check 127.0.0.1:7000 127.0.0.1:7000 (69b04525...) -> 0 keys | 5461 slots | 1 slaves. 127.0.0.1:7002 (0ee06970...) -> 1 keys | 5461 slots | 1 slaves. 127.0.0.1:7001 (7eca2aa3...) -> 0 keys | 5462 slots | 1 slaves. [OK] 1 keys in 3 masters. 0.00 keys per slot on average. >>> Performing Cluster Check (using node 127.0.0.1:7000) M: 69b0452515e25097a61d8bdf9efc79b33a5e6e50 127.0.0.1:7000 slots:[0-5460] (5461 slots) master 1 additional replica(s) M: 0ee06970318390c5ba8eea084ac592e45786d3af 127.0.0.1:7002 slots:[10923-16383] (5461 slots) master 1 additional replica(s) M: 7eca2aa34b48d4eb7ad83b9cadaac0ce6aa61b0b 127.0.0.1:7001 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: 33d55979e6cb5cee48f168d54c587e5634fd882e 127.0.0.1:7005 slots: (0 slots) slave replicates 7eca2aa34b48d4eb7ad83b9cadaac0ce6aa61b0b S: 9a729dff638ab1af2a2b05947cb48f7f9fd9402e 127.0.0.1:7003 slots: (0 slots) slave replicates 0ee06970318390c5ba8eea084ac592e45786d3af S: ae2fdce5b41cf187416ef5c418bf6a5233151f34 127.0.0.1:7004 slots: (0 slots) slave replicates 69b0452515e25097a61d8bdf9efc79b33a5e6e50 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.

可以看到有3个主节点,3个从节点。每个节点都是成功的连接状态 3个主节点[M]是

69b0452515e25097a61d8bdf9efc79b33a5e6e50 127.0.0.1:7000 0ee06970318390c5ba8eea084ac592e45786d3af 127.0.0.1:7002 7eca2aa34b48d4eb7ad83b9cadaac0ce6aa61b0b 127.0.0.1:7001

3个从节点[S]是

33d55979e6cb5cee48f168d54c587e5634fd882e 127.0.0.1:7005 9a729dff638ab1af2a2b05947cb48f7f9fd9402e 127.0.0.1:7003 ae2fdce5b41cf187416ef5c418bf6a5233151f34 127.0.0.1:7004 测试连接集群

测试连接集群,它是去中心化,每个节点都是对等的,所以,你连接哪个节点都可以获取和设置数据,我们来试一下。

redis-cli是redis默认的客户端工具,启动时加上`-c`参数,就可以连接到集群。

连接任意一个节点端口:

[root@localhost 7000]# redis-cli -c -p 7000 127.0.0.1:7000>

设置一个值:

[root@localhost 7000] redis-cli -c -p 7000 127.0.0.1:7000> set my_name rj -> Redirected to slot [12803] located at 127.0.0.1:7002 OK 127.0.0.1:7002> get my_name "rj" 127.0.0.1:7002>

前面理论知识我们知道了,分配key的时候,它会使用CRC16(‘my_name’)%16384算法,来计算,将这个key 放到哪个节点,这里分配到了12803slot 就分配到了7002(10923-16383)这个节点上。

redis cluster 采用的方式很直接,它直接跳转到7002 节点了,而不是还在自身的7000节点。

好,现在我们连接7005这个从节点:

[root@localhost 7000] redis-cli -c -p 7005 127.0.0.1:7005> get my_name -> Redirected to slot [12803] located at 127.0.0.1:7002 "rj" 127.0.0.1:7002>

我们同样是获取my_name的值,它同样也是跳转到了7002上.

测试集群中的节点挂掉

上面我们建立来了一个集群。3个主节点[7000-7002]提供数据存粗和读取,3个从节点[7003-7005]则是负责把[7000-7002]的数据同步到自己的节点上来,我们来看一下[7003-7005]的appendonly.aof的内容。看看是不是不这样:

[root@localhost 7000] cd /usr/local/cluster-test/7003 [root@localhost 7003] vim appendonly.aof $6^M SELECT^M $1^M 0^M *3^M $3^M set^M $7^M my_name^M $3^M xzp^M *3^M $3^M set^M $7^M my_name^M $2^M rj^M

我们看下,的确是从7000节点上同步过来的数据,7004,7005也是。

下面,我们先来模拟其中一台Master主服务器挂掉的情况,那就7000挂掉吧:

[root@localhost 7003] ps -ef | grep redis root 18794 1 0 11:07 ? 00:00:11 redis-server 127.0.0.1:7005 [cluster] root 18859 1 0 11:07 ? 00:00:11 redis-server 127.0.0.1:7004 [cluster] root 18882 1 0 11:07 ? 00:00:11 redis-server 127.0.0.1:7003 [cluster] root 18923 1 0 11:07 ? 00:00:11 redis-server 127.0.0.1:7002 [cluster] root 18958 1 0 11:07 ? 00:00:11 redis-server 127.0.0.1:7001 [cluster] root 19060 1 0 11:07 ? 00:00:11 redis-server 127.0.0.1:7000 [cluster] root 95280 2191 0 14:12 pts/0 00:00:00 grep --color=auto redis [root@localhost 7003]# kill 18794 关闭7000

好,安装前面的理论,7000主节点挂掉了,那么这个时候,7000的从节点只有7004一个,肯定7004就会被选举称Master节点了:

[root@localhost 7000] redis-cli -c -p 7001 127.0.0.1:7001> get sex -> Redirected to slot [2584] located at 127.0.0.1:7004 "1" 127.0.0.1:7004>

数据果真没有丢失,而是从7004上面获取了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3