Redis集群
程序员文章站
2022-05-21 23:54:07
...
Redis-cluster集群
一、集群概念
- 集群:同一个业务,部署在多个服务器上(不同的服务器运行同样的代码,干同一件事)
- 集群技术特点:
- 通过多台计算机完成同一个工作,达到更高的效率。
- 两机或多机内容、工作过程等完全一样。如果一台死机,另一台可以起作用。
- 为什么要集群:
- 一台服务器不能满足开发需要的时候,需要多台服务器来支持。这个时候就需要做集群,但是集群往往伴随着分布式;
- 解决单点故障
- 处理高并发
- 处理大数据(高并发) --解决存储问题
二、集群和分布式
- ①分布式优化:
分布式是指将不同的业务分布在不同的地方. web应用和数据库服务分开.将不同业务分布到不同集群. - ②集群优化:
集群指的是将多台服务器集中在一起,实现同一业务。 数据库集群和应用集群和功能集群 - ③相同点:
都是处理高并发,而且都需要多台服务器协同.一般在一个系统中同时存在分布式和集群. - ④不同点:
分布式中不同服务器处理是不同业务.而集群处理时同一业务.
集群两个关键特性:
1、可扩展性--集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能。动态添加服务器
2、高可用性--集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出错的服务实体恢复到另一个服务实体的功能增强了应用的可用性
当访问的服务器挂了时,集群要有能力找可以正常使用额服务器继续提供服务器。
集群两大能力:
为了具有可扩展性和高可用性特点,集群的必须具备以下两大能力:
1、负载均衡--负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。
2、错误恢复--由于某种原因,执行某个任务的资源出现故障,另一服务实体中执行同一任务的资源接着完成任务。这种由于一个实体中的资源不能工作,另一个实体中的资源透明的继续完成任务的过程叫错误恢复。
当访问的服务器挂了时,集群要有能力找可以正常使用额服务器继续提供服务器。
负载均衡和错误恢复都要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图(信息上下文)必须是一样的
三、Redis集群方案选择
3.1 主从复制(主从同步,读写分离,主备切换)
- 原理:
1、从服务器连接主服务器,发送SYNC命令;
2、主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;
3、主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
4、从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
5、主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
6、从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;(从服务器初始化完成)
7、主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令(从服务器初始化完成后的操作) - 优点:
支持主从复制,主机会自动将数据同步到从机,可以进行读写分离 - 缺点:
Redis不具备自动容错和恢复功能,如果想具备自动重起 ,需要安装插件
3.2 哨兵模式
- 哨兵作用:
监控Redis系统的运行状况
(1)监控主服务器和从服务器是否正常运行。
(2)主服务器出现故障时自动将从服务器转换为主服务器。 - 工作方式:
①每个Sentinel(哨兵)进程以每秒钟一次的频率向整个集群中的Master主服务器,Slave从服务器以及其他Sentinel(哨兵)进程发送一个 PING 命令。
②如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel(哨兵)进程标记为主观下线(SDOWN)
③如果一个Master主服务器被标记为主观下线(SDOWN),则正在监视这个Master主服务器的所有 Sentinel(哨兵)进程要以每秒一次的频率确认Master主服务器的确进入了主观下线状态
④当有足够数量的 Sentinel(哨兵)进程(大于等于配置文件指定的值)在指定的时间范围内确认Master主服务器进入了主观下线状态(SDOWN), 则Master主服务器会被标记为客观下线(ODOWN)
⑤在一般情况下, 每个 Sentinel(哨兵)进程会以每 10 秒一次的频率向集群中的所有Master主服务器、Slave从服务器发送 INFO 命令。
⑥当Master主服务器被 Sentinel(哨兵)进程标记为客观下线(ODOWN)时,Sentinel(哨兵)进程向下线的 Master主服务器的所有 Slave从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。
⑦若没有足够数量的 Sentinel(哨兵)进程同意 Master主服务器下线, Master主服务器的客观下线状态就会被移除。若 Master主服务器重新向 Sentinel(哨兵)进程发送 PING 命令返回有效回复,Master主服务器的主观下线状态就会被移除。
- 优点:
哨兵模式是基于主从模式的,所有主从的优点,哨兵模式都具有。
主从可以自动切换,系统更健壮,可用性更高 - 缺点:
Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂
3.3 Redis-Cluster集群
- 特点:
1、采用无中心结构
2、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽
3、节点的fail是通过集群中超过半数的节点检测失效时才生效(投票机制)
4、客户端与redis节点直连,不需要中间代理层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
四、搭建redis-cluster伪集群
- ①:安装并拷贝6个服务器
- ②:配置
打开redis.windows.conf文件
port 端口号(文件夹名,例:port 6379)
cluster-enabled yes
cluster-config-file nodes-端口号.conf
cluster-node-timeout 15000
appendonly yes - ③:编写启动脚本
为每个文件夹编写启动脚本==》startup.bat
编辑startup.bat加入下面两句
title redis-6379(redis-相对应的端口)
redis-server.exe redis.windows.conf - ④:安装ruby
- ⑤:安装Redis的Ruby驱动redis-xxxx.gem下载地址
在根目录进入cmd执行:ruby setup.rb - ⑥:用 GEM 安装 Redis
在redis根目录在命令行执行:gem install redis - ⑦:启动每个节点并且执行集群构建脚本
点击每个节点start.bat进行启动
拷贝redis-trib.rb到6379的redis节点
执行命令:
redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 - ⑧:Can I set the above configuration? (type ‘yes’ to accept)
输入yes - ⑨:测试
命令测试 redis-cli:
命令 redis-cli –c –h ”地址” –p "端口号" ; c 表示集群
cluster info 查看集群的信息
cluster nodes 查看各个节点分配slot
set get 测试
看端口是否改变