宁波住房城乡建设局网站,wordpress 淘宝模板怎么用,网站广告位怎么做,福州 网站备案一、哨兵模式 在 redis3.0之前#xff0c;redis使用的哨兵架构#xff0c;它借助 sentinel 工具来监控 master 节点的状态#xff1b;如果 master 节点异常#xff0c;则会做主从切换#xff0c;将一台 slave 作为 master。 哨兵模式的缺点#xff1a; #xff08;1redis使用的哨兵架构它借助 sentinel 工具来监控 master 节点的状态如果 master 节点异常则会做主从切换将一台 slave 作为 master。 哨兵模式的缺点 1当master挂掉的时候sentinel 会选举出来一个 master选举的时候是没有办法去访问Redis的会存在访问瞬断的情况若是在电商网站大促的时候master给挂掉了几秒钟损失好多订单数据 2哨兵模式对外只有master节点可以写slave节点只能用于读。尽管Redis单节点最多支持10W的QPS但是在电商大促的时候写数据的压力全部在master上。 3Redis的单节点内存不能设置过大若数据过大在主从同步将会很慢在节点启动的时候时间特别长从节点上有主节点的所有数据 二、Redis集群
1、Redis集群的介绍 Redis集群是一个由多个主从节点群组成的分布式服务集群它具有复制、高可用和分片特性。Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式这种集群模式没有中心节点可水平扩展据官方文档称可以线性扩展到上万个节点(官方推荐不超过1000个节点)。redis集群的性能和高可用性均优于之前版本的哨兵模式且集群配置非常简单。 2、Redis集群的优点
1Redis集群有多个master可以减小访问瞬断问题的影响 若集群中有一个master挂了正好需要向这个master写数据这个操作需要等待一下但是向其他master节点写数据是不受影响的。 2Redis集群有多个master可以提供更高的并发量 3Redis集群可以分片存储这样就可以存储更多的数据 3、Redis集群的搭建
Redis的集群搭建最少需要3个master节点我们这里搭建3个master每个下面挂一个slave节点总共6个Redis节点3台机器每台机器一主一从 第1台机器 192.168.1.1 8001端口 8002端口 第2台机器 192.168.1.2 8001端口 8002端口 第3台机器 192.168.1.3 8001端口 8002端口 第一步创建文件夹 mkdir -p /usr1/redis/redis-cluster/8001 /usr1/redis/redis-cluster/8002
第二步将redis安装目录下的 redis.conf 文件分别拷贝到8001目录下 cp /usr1/redis-5.0.3/redis.conf /usr1/redis/redis-cluster/8001
第三步修改redis.conf文件以下内容 复制代码
port 8001
daemonize yes
pidfile /var/run/redis_8001.pid #指定数据文件存放位置必须要指定不同的目录位置不然会丢失数据
dir /usr1/redis/redis-cluster/8001/ #启动集群模式
cluster-enabled yes #集群节点信息文件这里800x最好和port对应上
cluster-config-file nodes-8001.conf # 节点离线的超时时间
cluster-node-timeout 5000 #去掉bind绑定访问ip信息
#bind 127.0.0.1 #关闭保护模式
protected-mode no #启动AOF文件
appendonly yes #如果要设置密码需要增加如下配置
#设置redis访问密码
requirepass redis-pw #设置集群节点间访问密码跟上面一致
masterauth redis-pw
复制代码
第四步把上面修改好的配置文件拷贝到8002文件夹下并将8001修改为8002 复制代码
cp /usr1/redis/redis-cluster/8001/redis.conf /usr1/redis/redis-cluster/8002
cd /usr1/redis/redis-cluster/8002/
vim redis.conf #批量修改字符串
:%s/8001/8002/g
复制代码
第五步将本机192.168.1.1机器上的文件拷贝到另外两台机器上 scp /usr1/redis/redis-cluster/8001/redis.conf root192.168.1.2:/usr1/redis/redis-cluster/8001/
scp /usr1/redis/redis-cluster/8002/redis.conf root192.168.1.2:/usr1/redis/redis-cluster/8002/ scp /usr1/redis/redis-cluster/8001/redis.conf root192.168.1.3:/usr1/redis/redis-cluster/8001/
scp /usr1/redis/redis-cluster/8002/redis.conf root192.168.1.3:/usr1/redis/redis-cluster/8002/
第六步分别启动这6个redis实例然后检查是否启动成功 /usr1/redis/redis-5.0.3/src/redis-server /usr1/redis/redis-cluster/8001/redis.conf
/usr1/redis/redis-5.0.3/src/redis-server /usr1/redis/redis-cluster/8002/redis.conf
ps -ef | grep redis 第七步使用 redis-cli 创建整个 redis 集群redis5.0版本之前使用的ruby脚本 redis-trib.rb 运行以上命令完成搭建 /usr1/redis/redis-5.0.3/src/redis-cli -a redis-pw --cluster create --cluster-replicas 1 192.168.1.1:8001 192.168.1.1:8002 192.168.1.2:8001 192.168.1.2:8002 192.168.1.3:8001 192.168.1.3:8002 说明 -a 密码 --cluster-replicas 1表示1个master下挂1个slave --cluster-replicas 2表示1个master下挂2个slave。 扩展 查看帮助命令 src/redis‐cli --cluster help 复制代码
create创建一个集群环境host1:port1 ... hostN:portN
call可以执行redis命令
add-node将一个节点添加到集群里第一个参数为新节点的ip:port第二个参数为集群中任意一个已经存在的节点的ip:port
del-node移除一个节点
reshard重新分片
check检查集群状态
复制代码 第八步验证集群 1连接任意一个客户端 /usr1/redis/redis-5.0.3/src/redis-cli -a redis-pw -c -h 192.168.1.1 -p 8001
说明‐a表示服务端密码‐c表示集群模式-h指定ip地址-p表示端口号 2查看集群的信息 cluster info 3 查看节点列表 cluster nodes slave 对应的 master 从上面也可以看到 从上面可以看到 slave挂在哪个 master 下面 在 /usr1/redis/redis-cluster/8001/nodes-8001.conf 文件中存储了节点信息 4进行数据操作验证 5关闭集群则需要逐个进行关闭使用命令 /usr/local/redis‐5.0.3/src/redis‐cli ‐a redis-pw ‐c ‐h 192.168.1.1 ‐p 8001 shutdown
/usr/local/redis‐5.0.3/src/redis‐cli ‐a redis-pw ‐c ‐h 192.168.1.1 ‐p 8002 shutdown
......
注意在创建集群的时候需要把所有节点机器上的防火关闭保证 Redis的服务端口和集群节点通信的 gossip 端口能通 systemctl stop firewalld # 临时关闭防火墙 systemctl disable firewalld # 禁止开机启动 4、Redis集群原理分析 Redis Cluster 将所有数据划分为 16384 个 slots槽位每个节点负责其中一部分槽位。槽位的信息存储于每个节点中。只有master节点会被分配槽位slave节点不会分配槽位。 当Redis Cluster 的客户端来连接集群时它也会得到一份集群的槽位配置信息并将其缓存在客户端本地。这样当客户端要查找某个 key 时可以直接定位到目标节点。同时因为槽位的信息可能会存在客户端与服务器不一致的情况还需要纠正机制来实现槽位信息的校验调整。 槽位定位算法 Cluster 默认会对 key 值使用 crc16 算法进行 hash 得到一个整数值然后用这个整数值对 16384 进行取模来得到具体槽位。 HASH_SLOT CRC16(key) % 16384 跳转重定位 当客户端向一个节点发出了指令首先当前节点会计算指令的 key 得到槽位信息判断计算的槽位是否归当前节点所管理若槽位不归当前节点管理这时它会向客户端发送一个特殊的跳转指令携带目标操作的节点地址告诉客户端去连这个节点去获取数据。客户端收到指令后除了跳转到正确的节点上去操作还会同步更新纠正本地的槽位映射表缓存后续所有 key 将使用新的槽位映射表。 Redis集群节点之间的通信机制 维护集群的元数据有集中式和 gossip两种方式Redis 的集群节点之间的通信采取 gossip 协议进行通信 1集中式 优点元数据的更新和读取时效性非常好一旦元数据出现变更立即就会更新到集中式的存储中其他节点读取的时候立即就可以立即感知到 缺点所有的元数据的更新压力全部集中在一个地方可能导致元数据的存储压力。zookeeper使用该方式 2gossip gossip协议包含多种消息包括pingpongmeetfail等等。。 优点元数据的更新比较分散不是集中在一个地方更新请求会陆陆续续打到所有节点上去更新有一定的延时降低了压力 缺点元数据更新有延时可能导致集群的一些操作会有一些滞后。 每个节点都有一个专门用于节点间通信的端口就是自己提供服务的端口号10000比如7001那么用于节点间通信的就是17001端口。 每个节点每隔一段时间都会往另外几个节点发送ping消息同时其他几点接收到ping消息之后返回pong消息。 网络抖动 网络抖动就是非常常见的一种现象突然之间部分连接变得不可访问然后很快又恢复正常。 为解决这种问题Redis Cluster 提供了一种选项 cluster-node-timeout 表示当某个节点失联的时间超过了配置的 timeout时才可