redis(6)高可用集群原理及搭建

redis集群演变过程:
单机版—>主从复制——>哨兵——>集群
单机版:核心技术是持久化,主要是将数据存储在硬盘,
主从复制:哨兵和集群都是在复制的基础上实现高可用。复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复,缺陷是无法自动化恢复,写操作无法负载均衡,存储能力受到单机的限制。
哨兵主动切换主从。在复制的基础上,实现了自动化的故障恢复,缺陷是写操作无法负载均衡,存储能力收到单机的限制。
集群:通过集群,可以解决:写操作无法负载均衡,存储能力收到单机的限制的问题,实现了较为完善的高可用方案。
在这里插入图片描述
命令通过crc16哈希算法计算取余,分配到866的槽位,节点所在的小集群。可以不断的扩容机器小集群,减少每个机器数据的存储量。
redis clu
不能百分之百高可用,但能保证99.99%.根据节点数量,不可用,仅仅是主从切换的时间。
主节点,从节点。满足不了然后就扩容,多了就缩容。

我们来实战一下,可以用一台模拟10台机器,就是建10个文件夹,放10个redis.conf文件,分别启动这个就相当于10个实例。搭建伪集群。

mkdir redis7000   
mkdir redis7001
mkdir redis7002
mkdir redis7003
mkdir redis7004
mkdir redis7005
mkdir redis7006
mkdir redis7007
cp /opt/redis-5.0.5/redis.conf ./redis7000
cd redis7000
vim redis.conf

基础配置
修改 bind 192.168.xxx.xxx 配置本机链接
修改端口号port 7000 用来区分主机号,一台电脑必须改,很多电脑可以选择不修改。

daemonize yes
dump7000.rdb
dir是所有文件要存放目录,需要修改一下:
dir /root/opt/redis-test/redis7000  默认是./

集群配置
redis-cluster配置
vim中使用/cluster可以搜索
把下面的注释去掉。

cluster-enabled yes 开启集群重中之重的配置
cluster-config-file nodes-7000.conf  存放集群信息
cluster-node-timeout 15000 时间
cluster-replica-validity-factor 10
cluster-migtation-barrier 1
cluster-rerquire-full-coverage yes
cluster-replica-no-failover no

:wq!保存退出。
这里贴上redis.conf中文版翻译链接,想深入了解可以查看
https://www.cnblogs.com/baizhanshi/p/6232971.html

命令行输入下面代码,把redis7000/redis.conf里面所有的7000变成7001,然后重新保存新的文件到redis7001/redis.conf

[root@instance-err6o0gs redis-test]# sed 's/7000/7002/g' redis7000/redis.conf > redis7002/redis.conf
[root@instance-err6o0gs redis-test]# sed 's/7000/7003/g' redis7000/redis.conf > redis7003/redis.conf
[root@instance-err6o0gs redis-test]# sed 's/7000/7004/g' redis7000/redis.conf > redis7004/redis.conf
[root@instance-err6o0gs redis-test]# sed 's/7000/7005/g' redis7000/redis.conf > redis7005/redis.conf
[root@instance-err6o0gs redis-test]# sed 's/7000/7006/g' redis7000/redis.conf > redis7006/redis.conf
[root@instance-err6o0gs redis-test]# sed 's/7000/7007/g' redis7000/redis.conf > redis7007/redis.conf

启动6台机器

/usr/local/bin/redis-server /root/opt/redis-test/redis7000/redis.conf
/usr/local/bin/redis-server /root/opt/redis-test/redis7001/redis.conf
/usr/local/bin/redis-server /root/opt/redis-test/redis7002/redis.conf
/usr/local/bin/redis-server /root/opt/redis-test/redis7003/redis.conf
/usr/local/bin/redis-server /root/opt/redis-test/redis7004/redis.conf
/usr/local/bin/redis-server /root/opt/redis-test/redis7005/redis.conf
ps -ef|grep redis
root     15154     1  0 09:31 ?        00:01:21 redis-server 127.0.0.1:6379
root     29458     1  0 23:15 ?        00:00:00 /usr/local/bin/redis-server 192.168.0.6:7000 [cluster]
root     29501     1  0 23:20 ?        00:00:00 /usr/local/bin/redis-server 192.168.0.6:7001 [cluster]
root     29506     1  0 23:20 ?        00:00:00 /usr/local/bin/redis-server 192.168.0.6:7002 [cluster]
root     29512     1  0 23:20 ?        00:00:00 /usr/local/bin/redis-server 192.168.0.6:7003 [cluster]
root     29519     1  0 23:20 ?        00:00:00 /usr/local/bin/redis-server 192.168.0.6:7004 [cluster]
root     29524     1  0 23:20 ?        00:00:00 /usr/local/bin/redis-server 192.168.0.6:7005 [cluster]
root     29532 29286  0 23:21 pts/0    00:00:00 grep --color=auto redis

可以看到6台电脑都启动了。后面带[cluster],是以集群方式启动的。

/usr/local/bin/redis-cli --cluster help

原生搭建集群有三个步骤:meet,指派槽,分配主从,现在只要用一个命令就可以完成这三个步骤:

/usr/local/bin/redis-cli --cluster create 192.168.0.6:7000 192.168.0.6:7001 192.168.0.6:7002 192.168.0.6:7003 192.168.0.6:7004 192.168.0.6:7005 --cluster-replicas 1

最后的1是1:1的主从,就是3个主3个从。前三个是主
如果是2,就是前两个是主节点,后面4个是这两个主节点的从节点,
槽位16384,只分配给主节点,从节点是没有的。

[root@instance-err6o0gs ~]# /usr/local/bin/redis-cli --cluster  create 192.168.0.6:7000 192.168.0.6:7001 192.168.0.6:7002 192.168.0.6:7003 192.168.0.6:7004 192.168.0.6:7005 --cluster-replicas 1
>>> 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.6:7004 to 192.168.0.6:7000
Adding replica 192.168.0.6:7005 to 192.168.0.6:7001
Adding replica 192.168.0.6:7003 to 192.168.0.6:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 87cdf3fb6cb3bc4761b4790694f9161a09348d3e 192.168.0.6:7000
   slots:[0-5460] (5461 slots) master
M: 492f681a67d9e05a215aae501c69b35da5af1655 192.168.0.6:7001
   slots:[5461-10922] (5462 slots) master
M: bfdb137dd3549040321b2fadb29140ec9ec9dac6 192.168.0.6:7002
   slots:[10923-16383] (5461 slots) master
S: 120bca4da8437635fdd006fe788768c65d4d46f8 192.168.0.6:7003
   replicates 87cdf3fb6cb3bc4761b4790694f9161a09348d3e
S: 39cbfd050648917993dbb91ffccff397bd6042c6 192.168.0.6:7004
   replicates 492f681a67d9e05a215aae501c69b35da5af1655
S: c935c339cc1df119998ca1324e1571fe23c05e91 192.168.0.6:7005
   replicates bfdb137dd3549040321b2fadb29140ec9ec9dac6
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.6:7000)
M: 87cdf3fb6cb3bc4761b4790694f9161a09348d3e 192.168.0.6:7000
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 39cbfd050648917993dbb91ffccff397bd6042c6 192.168.0.6:7004
   slots: (0 slots) slave
   replicates 492f681a67d9e05a215aae501c69b35da5af1655
S: c935c339cc1df119998ca1324e1571fe23c05e91 192.168.0.6:7005
   slots: (0 slots) slave
   replicates bfdb137dd3549040321b2fadb29140ec9ec9dac6
M: bfdb137dd3549040321b2fadb29140ec9ec9dac6 192.168.0.6:7002
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: 492f681a67d9e05a215aae501c69b35da5af1655 192.168.0.6:7001
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 120bca4da8437635fdd006fe788768c65d4d46f8 192.168.0.6:7003
   slots: (0 slots) slave
   replicates 87cdf3fb6cb3bc4761b4790694f9161a09348d3e
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

中间有输入yes。构建成功,

cluster nodes
39cbfd050648917993dbb91ffccff397bd6042c6 192.168.0.6:7004@17004 slave 492f681a67d9e05a215aae501c69b35da5af1655 0 1584547139230 5 connected
87cdf3fb6cb3bc4761b4790694f9161a09348d3e 192.168.0.6:7000@17000 myself,master - 0 1584547138000 1 connected 0-5460
c935c339cc1df119998ca1324e1571fe23c05e91 192.168.0.6:7005@17005 slave bfdb137dd3549040321b2fadb29140ec9ec9dac6 0 1584547138000 6 connected
bfdb137dd3549040321b2fadb29140ec9ec9dac6 192.168.0.6:7002@17002 master - 0 1584547140234 3 connected 10923-16383
492f681a67d9e05a215aae501c69b35da5af1655 192.168.0.6:7001@17001 master - 0 1584547138228 2 connected 5461-10922
120bca4da8437635fdd006fe788768c65d4d46f8 192.168.0.6:7003@17003 slave 87cdf3fb6cb3bc4761b4790694f9161a09348d3e 0 1584547139000 4 connected

使用redis-cli 重定向。我们在7000电脑,它跳到了7002
-c是使用集群方式链接,

192.168.0.6:7000> exit
[root@instance-err6o0gs ~]# /usr/local/bin/redis-cli -h 192.168.0.6 -p 7000 -c  
192.168.0.6:7000> set k1 v1
-> Redirected to slot [12706] located at 192.168.0.6:7002
OK
192.168.0.6:7002> 

发布了48 篇原创文章 · 获赞 0 · 访问量 724

猜你喜欢

转载自blog.csdn.net/qq_36710311/article/details/104939897