当前位置:   article > 正文

NoSQL 之Redis集群模式

NoSQL 之Redis集群模式

目录

案例概述

redis工作模式

主从模式

哨兵模式

redis cluster模式

Redis集群介绍

Redis集群的优势

Redis集群的实现方法

Redis-Cluster数据分片

Redis-Cluster的主从复制模型

Redis集群部署

案例部署

安装redis

检查redis的状态

修改配置文件

重启启动redis服务

创建redis集群

查看当前集群情况

增加节点

安装redis


案例概述

  • 单节点Redis服务器带来的问题
    • 单点故障,服务不可用
    • 无法处理大量的并发数据请求
    • 数据丢失一大灾难
  • 解决方法
    • 搭建Redis集群

redis工作模式

主从模式

redis2.8之前

1、解决数据备份问题

2、做到读写分离,提高服务器性能

1、master故障,无法自动故障转移,需人工介入

2、master无法实现动态扩容

哨兵模式

redis2.8级之后的模式

1、Master 状态监测

2、master节点故障,自动切换主从,故障自愈

3、所有slave从节点,随之更改新的master节点

1、slave节点下线,sentinel不会对其进行故障转移,连接从节点的客户端因为无法获取到新的可用从节点

2、master无法实行动态扩容

redis cluster模式

redis3.0版本之后

1、有效的解决了redis在分布式方面的需求

2、遇到单机内存,并发和流量瓶颈等问题时,可采用Cluster方案达到负载均衡的目的

3、可实现动态扩容

4、P2P模式,无中心化

5、通过Gossip协议同步节点信息

6、自动故障转移、Slot迁移中数据可用

7、自动分割数据到不同的节点上

8、整个集群的部分节点失败或者不可达的情况下能够继续处理命令

1、架构比较新,最佳实践较少

2、为了性能提升,客户端需要缓存路由表信息

3、节点发现、reshard操作不够自动化

4、不支持处理多个keys的命令,因为这需要在不同的节点间移动数据

5、Redis 集群不像单机 Redis 那样支持多数据库功能, 集群只使用默认的 0 号数据库, 并且不能使用 SELECT index 命令

Redis集群介绍

  • Redis集群是一个提供在多个Redis间节点间共享数据的城西集
  • Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到Redids那样的性能,在高负载的情况下可能会导致不可预料的错误
  • Redis集群通过分区提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下可继续处理命令

Redis集群的优势

  • 自动分割数据到不同的节点上
  • 整个集群的部分节点失败或者不可达的情况下能够继续处理命令

Redis集群的实现方法

  • 有客户端分片
  • 代理分片
  • 服务器端分片

Redis-Cluster数据分片

  • Redis集群没有使用一致性hash,而是引入了哈希槽概念
  • Redis集群有16384个哈希槽
  • 每个key通过CRC16校验后对16384取模来决定放置槽
  • 集群的每个节点负责一部分哈希槽
  • 支持添加或删除节点
    • 添加删除节点无需停止服务
    • 例如
      • 如果想新添加节点D,需要移动节点A,B,C中的部分槽道D上
      • 如果想移除节点A,需要将A中的槽移动道B和C节点上,再将没有任何槽的A节点从集群中移除

Redis-Cluster的主从复制模型

  • 集群中具有A,B,C三个节点,如果节点B失败了,整个集群就会因缺少5501-11000这个范围的槽而不可用
  • 为每个节点添加一个从节点A1,B1,C1,整个集群便有三个master节点和三个slave节点组成,在节点B失败后,集群便会选举B1为新的主节点继续服务
  • 当B和B1都失败后,集群将不可用

master只有一个slave

master故障--》slave

(ping-pong)

master有多个slave

选举,选出新的主

slave广播(故障转移的认证请求),拉选票,让master投票

master(故障转移的认证应答),投票给slave

如果a-slave票数多,a成了master

如果票数一样多,再选

期望,半数以上

选组尽量是奇数台

Redis集群部署

操作系统

IP 地址

角色

CentOS7.9

192.168.10.101

master1

CentOS7.9

192.168.10.102

master2

CentOS7.9

192.168.10.103

master3

CentOS7.9

192.168.10.104

slave1

CentOS7.9

192.168.10.105

slave2

CentOS7.9

192.168.10.106

slave3

案例部署

安装redis

同步六台虚拟主机,关闭所有主机的防火墙功能

  1. [root@localhost ~]# systemctl stop firewalld
  2. [root@localhost ~]# setenforce 0

部署依赖环境,解压压缩包,进入到解压压缩包目录下

  1. [root@localhost ~]# yum -y install gcc* zlib-devel
  2. [root@localhost ~]# tar zxvf redis-5.0.14.tar.gz
  3. [root@localhost ~]# cd redis-5.0.14
  4. [root@localhost redis-5.0.14]# make
  5. [root@localhost redis-5.0.14]# make PREFIX=/usr/local/redis install #将软件安装到 /usr/local/redis 目录下。
  6. [root@localhost redis-5.0.14]# ln -s /usr/local/redis/bin/* /usr/local/bin/ #创建一个软链接到指定目录下
  7. [root@localhost redis-5.0.14]# cd utils/
  8. [root@localhost utils]# ./install_server.sh
  9. #一直回车直到跳出这个指令
  10. 1.确定端口
  11. 2.确定配置文件位置
  12. 3.确定日志文件位置
  13. 4.确定数据目录位置
  14. 5.确定执行程序路径
检查redis的状态
  1. [root@localhost utils]# netstat -anpt | grep redis
  2. tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 5858/redis-server 1
修改配置文件
  1. [root@localhost utils]# vim /etc/redis/6379.conf
  2. bind 0.0.0.0 #大概在70行,修改监听
  3. appendonly yes #大概在700行,开启aof持久化
  4. cluster-enabled yes #大概在833行,去掉注释,表示启用群集
  5. cluster-config-file nodes-6379.conf #大概在841行,取消注释启用
  6. cluster-node-timeout 15000 #大概在847行,取消注释
  7. cluster-require-full-coverage no #大概在924行,取消注释,yes改成no

开启Cluster:cluster-enabled yes

集群配置文件:cluster-config-file nodes-7000.conf。这个配置文件不是要我们去配的,而是Redis运行时保存配置的文件,所以我们也不可以修改这个文件。

集群超时时间:cluster-node-timeout 15000。结点超时多久则认为它宕机了。

槽是否全覆盖:cluster-require-full-coverage no。默认是yes,只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no

重启启动redis服务
  1. [root@localhost utils]# /etc/init.d/redis_6379 restart #重启redis
  2. [root@localhost utils]# netstat -anpt | grep redis
  3. tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 5895/redis-server 0
  4. tcp 0 0 0.0.0.0:16379 0.0.0.0:* LISTEN 5895/redis-server 0
创建redis集群

取消所有主机的同步,六个节点随便找一个节点创建集群,这些节点分布在不同的IP上,有几个写入几个

  1. [root@localhost ~]# redis-cli --cluster create --cluster-replicas 1 192.168.10.101:6379 192.168.10.102:6379 192.168.10.103:6379 192.168.10.104:6379 192.168.10.105:6379 192.168.10.106:6379
  2. yes
查看当前集群情况
  1. [root@localhost ~]# redis-cli
  2. 127.0.0.1:6379> cluster nodes

测试集群

自动把请求对应到某个主机

  1. [root@localhost ~]# redis-cli -h 192.168.10.101 -p 6379 -c
  2. 192.168.10.101:6379> set k1 11
  3. -> Redirected to slot [12706] located at 192.168.10.103:6379
  4. OK
  5. 192.168.10.103:6379> set k2 22
  6. -> Redirected to slot [449] located at 192.168.10.101:6379
  7. OK
  8. 192.168.10.101:6379> set k3 33
  9. OK
  10. 192.168.10.101:6379> set k4 44
  11. -> Redirected to slot [8455] located at 192.168.10.102:6379
  12. OK
  13. 192.168.10.102:6379> set k5 55
  14. -> Redirected to slot [12582] located at 192.168.10.103:6379
  15. OK
  16. 192.168.10.103:6379> set k6 66
  17. -> Redirected to slot [325] located at 192.168.10.101:6379
  18. OK
  19. 192.168.10.101:6379> set k7 77
  20. OK
  21. 192.168.10.101:6379> set k8 88
  22. -> Redirected to slot [8331] located at 192.168.10.102:6379
  23. OK
  24. 192.168.10.102:6379> set k9 99
  25. -> Redirected to slot [12458] located at 192.168.10.103:6379
  26. OK
  27. 192.168.10.103:6379> keys *
  28. 1) "k9"
  29. 2) "k5"
  30. 3) "k1"

增加节点

安装redis

同步三台主机,直接用脚本运行安装

[root@localhost ~]# bash install_redis.sh

安装完成后取消同步

新增加的节点是master角色

[root@localhost ~]# redis-cli -c -p 6379 cluster meet 192.168.10.107:6379

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/991555
推荐阅读
相关标签
  

闽ICP备14008679号