redis集群部署

落日映苍穹つ 2022-01-30 03:25 577阅读 0赞

一、首先在server1上部署redis服务

具体步骤可参考:redis通过哨兵模式实现主从切换
二、创建redis集群目录
三、进入各个目录下建立配置文件

7001:

  1. [root@server1 rediscluster]# cd 7001/
  2. [root@server1 7001]# vim redis.conf
  3. port 7001
  4. cluster-enabled yes
  5. cluster-config-file nodes.conf
  6. cluster-node-timeout 5000
  7. appendonly yes
  8. pidfile "/usr/local/rediscluster/7001/redis.pid"
  9. logfile "/usr/local/rediscluster/7001/redis.log"
  10. daemonize yes
  11. dir "/usr/local/rediscluster/7001"

将7001的配置文件cp到其他目录,把7001更改为相应的数值:

7002示例:

  1. [root@server1 7001]# cp redis.conf ../7002/
  2. [root@server1 7001]# vim ../7002/redis.conf
  3. port 7002
  4. cluster-enabled yes
  5. cluster-config-file nodes.conf
  6. cluster-node-timeout 5000
  7. appendonly yes
  8. pidfile "/usr/local/rediscluster/7002/redis.pid"
  9. logfile "/usr/local/rediscluster/7002/redis.log"
  10. daemonize yes
  11. dir "/usr/local/rediscluster/7002"

四、进入各个目录启动服务

  1. [root@server1 7001]# redis-server redis.conf
  2. [root@server1 7001]# cd ../7002/
  3. [root@server1 7002]# redis-server redis.conf
  4. [root@server1 7002]# cd ../7003/
  5. [root@server1 7003]# redis-server redis.conf
  6. [root@server1 7003]# cd ../7004/
  7. [root@server1 7004]# redis-server redis.conf
  8. [root@server1 7004]# cd ../7005/
  9. [root@server1 7005]# redis-server redis.conf
  10. [root@server1 7005]# cd ../7006/
  11. [root@server1 7006]# redis-server redis.conf

查看进程:

五、创建一个集群,编号为1,将启动的6个redis加入在一个集群

  1. [root@server1 7006]# redis-cli --cluster create --cluster-replicas 1 \
  2. 127.0.0.1:7001 \
  3. 127.0.0.1:7002 \
  4. 127.0.0.1:7003 \
  5. 127.0.0.1:7004 \
  6. 127.0.0.1:7005 \
  7. 127.0.0.1:7006

查看master和slave的设置:

  1. [root@server1 7006]# redis-cli --cluster info 127.0.0.1:7001
  2. 127.0.0.1:7001 (37640721...) -> 0 keys | 5461 slots | 1 slaves.
  3. 127.0.0.1:7002 (b49a2382...) -> 0 keys | 5462 slots | 1 slaves.
  4. 127.0.0.1:7003 (d52d9c66...) -> 0 keys | 5461 slots | 1 slaves.
  5. [OK] 0 keys in 3 masters.
  6. 0.00 keys per slot on average.

可以看到现在7001、7002、7003为master,各有一个slave。每对master-slave各有5461个哈希槽。

  • 哈希槽概念

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。

六、测试

(1)进入1个master,写入信息

  1. [root@server1 7006]# redis-cli -c -p 7001
  2. 127.0.0.1:7001> set name taylor
  3. -> Redirected to slot [5798] located at 127.0.0.1:7002 #在7001上写,实际数据存储到7002里
  4. OK
  5. 127.0.0.1:7002> get name
  6. "taylor"
  7. 127.0.0.1:7002> #取数据也是到7002上取

(2)进入一个slave里,进行信息查看

[root@server1 7006]# redis-cli -c -p 7004
127.0.0.1:7004> get name
-> Redirected to slot [5798] located at 127.0.0.1:7002 #取数据也是到7002上取
“taylor”
127.0.0.1:7002>

(3)将7002关闭

(4)进入slave节点查看信息:

此时数据来自7005,数据从7002迁移到了7005
(5)查看集群的主从信息

可以看到7005成为了master,没有slave节点,因为7002关闭了。

注意:如果此时将7005再关闭,会破坏数据库结构,因为此时的7005下没有slave。

我们模拟这个错误:

  1. [root@server1 7006]# redis-cli -c -p 7004
  2. 127.0.0.1:7004> get name
  3. -> Redirected to slot [5798] located at 127.0.0.1:7005
  4. "taylor"
  5. 127.0.0.1:7005> SHUTDOWN

当再次进行数据查询时,会出现错误

  1. [root@server1 7006]# redis-cli -c -p 7006
  2. 127.0.0.1:7006> get name
  3. (error) CLUSTERDOWN The cluster is down

恢复方法:
因为数据最开始是在7002里存储的,所以进入到7002里查看,另外进入7005里查看

在7002和7004下分别重新加载配置文件:

  1. [root@server1 7005]# redis-server redis.conf
  2. [root@server1 7005]# cd ../7002/
  3. [root@server1 7002]# redis-server redis.conf

此时再次进行信息的查看,并进行状态查看:

七、添加节点
1、查看此时集群状态

  1. [root@server1 7002]# redis-cli --cluster info 127.0.0.1:7001

此时三主三从。
2、建立目录,编辑信息,开启服务

  1. [root@server1 rediscluster]# ls
  2. 7001 7002 7003 7004 7005 7006
  3. [root@server1 rediscluster]# mkdir 7007
  4. [root@server1 rediscluster]# mkdir 7008
  5. [root@server1 rediscluster]# ls
  6. 7001 7002 7003 7004 7005 7006 7007 7008
  7. [root@server1 rediscluster]# cp 7001/redis.conf 7007/
  8. [root@server1 rediscluster]# cp 7001/redis.conf 7008/
  9. [root@server1 rediscluster]# vim 7007/redis.conf
  10. [root@server1 rediscluster]# vim 7008/redis.conf
  11. [root@server1 rediscluster]# cd 7007/
  12. [root@server1 7007]# redis-server redis.conf
  13. [root@server1 7007]# cd ../7008/
  14. [root@server1 7008]# redis-server redis.conf

ps ax查看后端服务:

3、再次查看集群状态,并且添加节点

将7007添加到集群里,选择添加的节点位置为7001

  1. [root@server1 7008]# redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001

查看状态(可以查看到7007的id号,后续要用)

  1. [root@server1 7008]# redis-cli -c -p 7007
  2. 127.0.0.1:7007> cluster nodes
  3. d52d9c6611aac64ec721195118ccf54ff1664a95 127.0.0.1:7003@17003 master - 0 1557722374000 3 connected 10923-16383
  4. 7be15f956fcb99f4846cba004edffd19a22b23c2 127.0.0.1:7007@17007 myself,master - 0 1557722373000 0 connected
  5. f8c69852450d5286a4bb744b89b35eba8b7b481d 127.0.0.1:7004@17004 slave 37640721cde352f225d033081d5833b1a5fba41b 0 1557722374862 1 connected
  6. 974e4c4c3bfa192987116a2a5fe89903e3d44ad1 127.0.0.1:7005@17005 master - 0 1557722374563 7 connected 5461-10922
  7. f3210a46f6d80e1263a3c6ee08704a7db7562570 127.0.0.1:7006@17006 slave d52d9c6611aac64ec721195118ccf54ff1664a95 0 1557722374000 3 connected
  8. b49a2382720efa1eb8d418b58144dfef5f27b8e5 127.0.0.1:7002@17002 slave 974e4c4c3bfa192987116a2a5fe89903e3d44ad1 0 1557722374563 7 connected
  9. 37640721cde352f225d033081d5833b1a5fba41b 127.0.0.1:7001@17001 master - 0 1557722375564 1 connected 0-5460

添加7008节点为7007的slave:

  1. [root@server1 7008]# redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7007 --cluster-slave --cluster-master-id 7be15f956fcb99f4846cba004edffd19a22b23c2

查看新节点的哈希槽情况:

此时7008也添加了,但是主7007节点并没有添加数据槽,不能存储数据。
4、给新的master:7007节点添加数据槽
(1)手动分配固定数量的哈希槽

  1. redis-cli --cluster reshard 127.0.0.1:7007
  2. How many slots do you want to move (from 1 to 16384)? 300 #分配多少数量的哈希槽
  3. What is the receiving node ID? 7be15f956fcb99f4846cba004edffd19a22b23c2 给哪个节点分配哈西曹,这里填ID
  4. Source node #1: all #从哪个主节点分离哈西曹
  5. Do you want to proceed with the proposed reshard plan (yes/no)? yes #确认

查看哈希槽

300个哈希槽已经分配给7007节点。
(2)对master进行均分数据槽(master的数据槽一定要均分,不均分可能会导致数据的丢失)

  1. [root@server1 7008]# redis-cli --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 127.0.0.1:7001

查看哈希槽

每个主节点都是4096个哈希槽

发表评论

表情:
评论列表 (有 0 条评论,577人围观)

还没有评论,来说两句吧...

相关阅读

    相关 redis部署

    一、概述     Redis3.0版本之后支持Cluster. 1.1、redis cluster的现状    目前redis支持的cluster特性:   1):节点

    相关 redis部署

    本节着重讲解redis集群部署,如未清楚单节点部署的请浏览本人的关于单节点部署的文章。 地址:[https://blog.csdn.net/wohiusdashi/artic