一、配置Redis主从注意事项
redis的主可以读写,redis从只可以读。
二、配置主从(命令方式或修改配置文件 二选一)
只需要在slave服务器上配置即可,master不需要配置。
三、查看matser和slave的info信息
四、同步日志
五、主从复制详细过程
Redis支持主从复制分为全量同步和增量同步,首次同步是全量同步。
redis 的主从同步是非阻塞的,master收到从服务器的sync(2.8版本之前是PSYNC)命令会fork一个子进程在后台执行bgsave命令,并将新写入的数据写入到一个缓冲区里面,bgsave执行完成之后并生成的将RDB文件发送给客户端,客户端将收到后的RDB文件载入自己的内存,然后redis master再将缓冲区的内容在全部发送给redis slave。
之后的同步slave服务器会发送一个offset的位置(等同于MySQL的binlog的位置)给主服务器,主服务器检查后位置没有错误将此位置之后的数据包括写在缓冲区的积压数据发送给redis从服务器,从服务器将主服务器发送的导入数据写入内存,这样一次完整的数据同步,再之后再同步的时候从服务器只要发送当前的offset位 置给主服务器,然后主服务器根据相应的位置将之后的数据发送给从服务器保存到其内存即可。

六、主从同步配置参数优化
10.0.0.31:6379> SHUTDOWN
slave的redis目前为只读,没办法写入数据
需要将slave角色提升为master
无法连接的问题
2 如果设置在主中设置了密码,从中应该配置密码
3 bind ip地址 表示可以那些机器可以访问

设置为 0.0.0.0 表示都可以访问
如果是127.0.0.1 表示localhost访问
如果不设置从就没有访问主的权限
修改方法修改redis 的redis.conf 配置文件
常见问题汇总
1 master密码不对
配置的master密码不对,导致验证不通过而无法建立主从同步关系

2 Redis版本不一致
不同的redis 版本之间存在兼容性问题,因此各master和slave之间必须保持版本一致。
RDB文件互相识别不了,无法加载RDB文件

下面没实践就当是增长知识吧
Redis Sentinel是一个分布式架构,其中包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当它发现节点不可达时,会对节点做下线标识。如果被标识的是主节点,它还会和其他Sentinel节点进行“协商”,当大多数Sentinel节点都认为主节点不可达时,它们会选举出一个Sentinel节点来完成自动故障转移的工作,同时会将这个变化通知给Redis应用方。整个过程完全是自动的,不需要人工来介入,所以这套方案很有效地解决了Redis的高可用问题。
实现原理:
2)每隔2秒,每个Sentinel节点会向Redis数据节点的__sentinel__:hello频道上发送该Sentinel节点对于主节点的判断以及当前Sentinel节点的信息,同时每个Sentinel节点也会订阅该频道,来了解其他Sentinel节点以及它们对主节点的判断。
3)每隔一秒,每个Sentinel节点会向主节点、从节点、其余Sentinel节点发送一条ping命令做一次心跳检测,来确认这些节点当前是否可达。
2)上一步的选取规则是与主节点复制相似度最高的从节点
3)领导者Sentinel节点让剩余的从节点成为新的主节点的从节点
4)Sentinel节点集合会将原来的主节点更新为从节点,并保持着对其关注,当其恢复后命令它去复制新的主节点
server3:172.25.254.103 redis-slave
server4:172.25.254.104 redis-slave
server2:172.25.254.101 redis-master
关闭保护模式
sentinel monitor mymaster 172.25.254.101 6379 2
3)将配置好的文件发送给所有从节点
4)三台redis 开启 sentinel 服务
[root@server2 redis]# redis-sentinel /etc/redis/sentinel.conf

[root@server4 ~]# redis-sentinel /etc/redis/sentinel.conf

+slave 表示 :一个新的从服务器已经被 Sentinel 识别并关联 可以看到片此时 master 是 server2;server3和 server4 是 slave。
2)查看任意一台redis主机的监控日志
[root@server4 ~]# redis-sentinel /etc/redis/sentinel.conf

实际现在只有一个slave 可以使用
2)假设节点a标记节点b为主观下线,一段时间后节点a通过消息把节点b的状态发送到其他节点,当其他节点收到消息并解析出消息体中含有b的pfail状态,把节点b加入下线报告链表;
3)当某一节点c收到节点b的pfail状态时,此时有超过一半的槽主节点都标记了节点b为pfail状态时,则标记故障节点b为客观下线;
4)向集群广播一条pfail消息,通知集群内的所有节点标记故障节点b为客观下线状态并立刻生效,同时通知故障节点b的从节点触发故障转移流程。
当从节点符合故障转移资格后,要等待一段选举时间后才开始选举
当从节点收集到足够的选票之后,触发替换主节点操作
[root@server2 redis]# /etc/init.d/redis_6379 stop
cd /usr/local/ mkdir cluster 建立集群目录
pidfile /usr/local/cluster/7001/redis.pid pid文件存放目录
logfile /usr/local/cluster/7001/redis.log 日志存放目录
[root@server2 7001]# redis-server redis.conf 打开集群服务

[root@server2 cluster]# cd 7002/
[root@server2 7002]# vim redis.conf 将文件中的端口号改为7002和存放目录的更改
redis-server redis.conf 打开集群的redis
cd ..
cd 7003/ vim redis.conf 将文件中的端口号改为7003和存放目录的更改
redis-server redis.conf 打开集群的redis
cd ..
cd 7004/ vim redis.conf 将文件中的端口号改为7004和存放目录的更改
redis-server redis.conf 打开集群的redis
cd ..
cd 7005/
vim redis.conf 将文件中的端口号改为7005和存放目录的更改
redis-server redis.conf 打开集群的redis
cd ..
cd 7006/ vim redis.conf 将文件中的端口号改为7006和存放目录的更改

2)创建集群
[root@server2 ~]# redis-trib.rb create –replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

输入info,发现2是master,他的slave是6
3)测试
停掉master 2
redis-trib.rb check 127.0.0.1:7001 查看集群的状态

可以查看之前的内容
再关掉一个master
查看信息

关闭掉两个master后,集群的功能会破坏
4)恢复关闭的两个节点

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210337.html原文链接:https://javaforall.net
