人事怎么做招聘网站比对分析,教育机构网站开发,女生做网站前端设计师,wordpress模板 古典在实际的生活环境中#xff0c;如果只使用一个redis进行读写操作#xff0c;那么面对庞大的访问人群是崩溃的#xff0c;所以可以有几个redis#xff0c;一个用来做主机#xff0c;提供修改数据操作#xff0c;而这个主机用来控制其他redis#xff0c;即将更新的发送如果只使用一个redis进行读写操作那么面对庞大的访问人群是崩溃的所以可以有几个redis一个用来做主机提供修改数据操作而这个主机用来控制其他redis即将更新的发送保证一致性而其他的redis只能是读操作无法进行更改数据
所以大致为一个redis用来写其他redis复制主redis但是用户只能读不能写
那么如何配置呢 1.在redis.conf中添加 replicaof 主机的ip 端口号
例
2.在从机中的redis.conf中添加masterauth 主机redis的密码
例
如果在运行中想更改关系比如
A有两个小弟BC我们现在让C的主机变为B可直接使用命令
slaveof 新主库IP 新主库端口
不过如果出现宕机等重启情况C的主机还是A
因为命令并未更改redis.conf中的配置
从 变为主
slaveof no one
将当前从机变为主机 复制的原理
slave启动数据清零 当从机的redis启动时会把自身体的数据清空
首次连接全量复制 第一次连接会将主机所有数据打包发给从机
保持通信 在每个周期从机给主机发送包保持连接
每次快照更新从机
从机下线重连重连续传 master和slave中都有一个offset根据判断offset来确定从哪个节点重新传输。
缺点实际中有许多从机导致主机IO量大存在复制延时
master挂了后不能出现临时master替补无法进行实时操作
由此引入哨兵
哨兵的作用
1.监控redis的运行状态包括master和slave
2.当master down机后自动将slave切换master
保证读写功能稳定
功能
主从监控 消息通知 故障转移 配置中心
哨兵配置sentinel.conf
启动
redis-sentinel sentinel.conf(文件名 --sentinel
相关问题
如果master宕机两台数据能否访问
不能此时需通过哨兵选择新的master后才可以继续访问
之前down机的master恢复后还会不会是老大
不会变为slave只能读不能写 哨兵流程
哨兵监控多个redis运行
当哨兵发现master超过配置的时间未响应包时便会投票认为该masterdown机
当哨兵投票个数超过指定时便认为该master宕机
由哨兵组选出一个哨兵将该master移出并在slave中选出新的master
选新master流程为
从master下的slave中按条件挑选
权限高偏移量大之前复制master的数据最多完整性最好id号
选出的slave 执行slaveof no one变换为master
将原master下的slave归并到新的master
当已下线的master上线时新master对其发送slaveof指令将其变为slave。
集群哨兵主从复制并不能保证数据的不丢失所以引出了redis集群
redis集群提供多个redis节点间共享数据的程序集支持多个master
用处
支持多个master一个down机可用其他master继续修改数据
无需哨兵功能
客户端只需连接集群中某个节点
通过redis槽位实现数据的分布式存储 分片的方法
取余分片:通过哈希函数转换成值再对某数取余得到存放位置
缺点如果出现down机等情况会导致数据混乱因为取余的数字发生改变
一致性哈希算法将所有节点和键值对映射到一个环形的哈希空间中通常是一个虚拟的圆环。这个圆环的范围是从0到最大哈希值。每个节点被映射到环上的一个点而键值对也被映射到环上的相应位置。当查找一个键时算法会沿着圆环顺时针方向查找最近的一个节点然后将键值对存储在这个节点上。
优点加入和删除节点只会影响哈希环中顺时针方向的相邻节点
缺点存在数据倾斜的情况某个点数据特别多 CRC16算法
产生的hash值有16bit65536个但为什么用16384呢
1.槽位为65536会导致发送的ping包过大
2.redis集群主节点不可能超过1000个所以够用
3.槽位越小节点少情况下方便压缩容易传输
redis集群不保证数据一致性因为一个redis收到命令后会异步同步给其他redis此过程中可能出现down机导致数据不一致
防止路由失效加-c
info replication 查看当前redis的主从关系
cluster failover 主从关系调整
redis-cli -a 密码 --cluster add-node 新机端口 旧机端口
redis-cli -a 密码 --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID
reshard(重新分派槽号各个主机都分部分坑位给新的节点故新节点槽位段数会有多个。
删除节点 redis-cli -a 密码 --cluster del-node Ip:从机ip端口 从机6388节点ID
在集群条件下不能进行set等多元素操作因为操作数据必须在同一个槽中。
可以通过分组进行多组操作
例 mset k1{x} v1 k2{x} v2 这里{x}表示为一个名为x的分组
cluster keyslot 键名 查看该键在哪个槽位
感谢观看