主从配置
redis 主从配置master slave
优点: 防止单点故障(除了单机版,都可以) 读写分离,更好的实现多读写少 克隆两台redis虚拟机作为从机
复制操作文件 cp /usr/redis/redis-5.0.5/redis.conf /usr/redis/bin/master.conf //redis1 cp /usr/redis/redis-5.0.5/redis.conf /usr/redis/bin/slave1.conf //redis2 cp /usr/redis/redis-5.0.5/redis.conf /usr/redis/bin/slave2.conf //redis3
在all-session 中: ls /usr/redis/bin 修改配置文件: 在redis1主机修改配置文件 vim /usr/redis/bin/master.conf :69 bind 192.168.152.31 绑定IP :92 port 6666 端口号 :136 daemonize yes 守护进程
在redis2从机修改配置文件 vim slave1.conf :136 daemonize yes 守护进程 :69 bind 192.168.152.32 绑定IP :92 port 7777 在文件末尾加上一行 :1372 slaveof 192.168.152.31 6666
在redis3从机修改配置文件 vim slave2.conf :136 daemonize yes 守护进程 :69 bind 192.168.152.33 绑定IP :92 port 8888 在文件末尾加上一行 :1372 slaveof 192.168.152.31 6666
启动 redis1: /usr/redis/bin/redis-server /usr/redis/bin/master.conf redis2: /usr/redis/bin/redis-server /usr/redis/bin/slave1.conf redis3: /usr/redis/bin/redis-server /usr/redis/bin/slave2.conf
在all-session中: ps -ef |grep redis-server|grep -v grep
测试: redis1: /usr/redis/bin/redis-cli -h 192.168.152.31 -p 6666 info redis2: /usr/redis/bin/redis-cli -h 192.168.152.32 -p 7777 info redis3: /usr/redis/bin/redis-cli -h 192.168.152.33 -p 8888 info
在all-session中使用: info replication查看主从机角色
redis1主机可以读写 redis2,redis3只能读取
特点:master/slave角色分工明确,master/slave数据相同,降低master读压力,从库分担
原理: 1.从机服务器链接主机服务器,发送PSYN命令 2.主服务器接受到PSYN命令后,开始fork子进程执行BGSAVE命令将当前存在的数据生成RDB文件,并使用缓冲区记录此后执行的所有写命令 3.主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 4.从服务器收到快照文件后丢弃旧数据,加载收到的快照文件 5.主服务器块照发送完毕后开始向从服务区发送缓冲区中的写命令 6.从服务器完成对快照的载入,开始接收命令的请求,并执行这些来自缓冲区的写命令
缺点: 无法保证高可用,一旦主服务器挂了,整个主从就不能写数据了 没有解决master的写压力
redis 哨兵配置 sentinel
优点:解决了master宕机没有写节点的问题,从slave中选举新的主节点,执行写操作
实现:
redis1执行: cp /usr/redis/redis-5.0.5/sentinel.conf /usr/redis/bin/sentinel1.conf vim /usr/redis/redis-5.0.5/sentinel1.conf redis2执行: cp /usr/redis/redis-5.0.5/sentinel.conf /usr/redis/bin/sentinel2.conf vim /usr/redis/redis-5.0.5/sentinel2.conf
redis3执行: cp /usr/redis/redis-5.0.5/sentinel.conf /usr/redis/bin/sentinel3.conf vim /usr/redis/redis-5.0.5/sentinel3.conf
#关闭保护模式 当开启保护模式的时候默认只能本机连 protected-mode no #17
#哨兵端口port 26666 #21 port 27777 port 28888
#添加守护进程模式daemonize yes #26
#添加指明日志文件名logfile “./temp.log” #36
#修改工作目录dir “/tmp” #65
#哨兵监控的master名称可以随便起,ip和端口固定 quorum 当哨兵是集群时,有多少个哨兵认为master失效(客观下线),master才算失效。 sentinel monitor mymaster 192.168.152.31 8888 1 #84
#master或slave多长时间(默认30秒)不能使用后标记为down状态。 sentinel down-after-milliseconds mymaster 30000 #113
#设置master和slaves验证密码 sentinel auth-pass mymaster 123456 #103
哨兵启动:
redis1启动: /usr/redis/bin/redis-sentinel /usr/redis/bin/sentinel1.conf
redis2启动: /usr/redis/bin/redis-sentinel /usr/redis/bin/sentinel2.conf
reids3启动: /usr/redis/bin/redis-sentinel /usr/redis/bin/sentinel3.conf
在all-session中:ps -ef|grep redis|grep -v grep可以看到redis实例和哨兵实例
测试: shutdown save 在redis1 执行
info replication 在All Session执行(稍等一会,节点切换需要时间)
看到redis2或者3已经变成了master,可以读写
/usr/redis/bin/redis-server /usr/redis/bin/master.conf //启动redis1
/usr/redis/bin/redis-cli -h 192.168.152.31 -p 6666 edis1自动变为从机 在redis1宕机期间,其他主机执行命令的结果都会被同步
注意:超过半数哨兵宕机,则哨兵模式无效
ps -ef|grep redis |grep -v grep 查看哨兵进程
特点:高可用,哨兵监控各个节点,自动故障迁移
缺点:主从模式切换需要时间,切换期间不能对外提供服务,没有解决master写的压力
原理:
1.监控:sentinel会不断的检查你的主服务器和从服务器是否正常运作 两个定时任务: 每十秒每个sentinel对master和slave执行info 目的:发现是slave节点,确认主从关系
每一秒每个sentinel对其它sentinel和redis实例执行ping 目的:心跳失败判断依据
2.当主机宕机
3.在从机服务器中执行SLAVEOF NO ONE 命令,断开主从关系并且提升为主库继续服务
当有多个从节点遵循下列原则选举新主节点: slave-priority最高的slave节点(默认相同1) 选择复制偏移量最大的节点 否则选择runid最小的
4.将主库重新启动后执行SLAVEOF 命令,将其设置为从库,数据更新回来
|