Redis主从复制(含sentinel)

  1. Redis主从复制
    指将一台redis服务器的数据复制到其他的redis服务器,前者称为主节点(master/leader),后者称为从节点(slave/follower);数据的复制时单向的,只能由主节点到从节点。Master以写为主,Slave以读为主。
    默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
    主从复制的作用主要包括:
    数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
    故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
    负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担负载,可以大大提供Redis服务器的并发量。
    高可用(集群)基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
    一台Redis万万不能
  2. 从结构上,出现单点故障,请求负载压力较大
  3. 单个Redis服务器内存容量有限。
    电商网站上的商品,一般是一次上传,无数次浏览,也就是“多读少写”
    对于这种场景,架构如下:
    Redis主从复制(含sentinel)_第1张图片

复制原理:
Slave启动成功连接到Master后会发送一个sync同步命令,Master接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,Master将传送整个数据文件到Slave,并完成一次完全同步。
全量复制:Slave服务在接收到数据库文件数据后,将其存盘并加载到内存中
增量复制:Master继续将新的所有收集到的修改命令依次传给Slave,完成同步。
只要是重新连接Master,一次完全同步(全量复制)将被自动执行,数据可以在从机看到。
1.8. 如何搭建redis集群(一主三从)
配置主redis(能写读),主机ip:192.168.60.20

#主redis配置 redis-m-6379.conf
port 6379  			# 要使用的端口
daemonize yes		#以守护进程后台运行
pidfile /app/redis/conf/redis-6379.pid
bind 192.168.50.101   # 本机IP或bind * -::*
logfile /usr/local/softwarews/redis/logs/redis-6379.log
dbfilename dump-6379.rdb		#rdb文件
dir /usr/local/softwarews/redis/data   # 数据文件存放位置
appendonly no  #master
masterauth password			#master的密码,给master配置上从机的密码,主机down了之后可以作为从机连上新选出来的主机。


#启动
$ redis-server redis-m-6379.conf
#检查
$ lsof -i 4:6379 
$ netstat -atp | grep 6379

配置从redis(只读) ,从机ip:192.168.60.21,其他两个个是重复的配置。

#从redis配置 redis-s-6379.conf
port 6379   # 要使用的端口
daemonize yes
pidfile /app/redis/conf/redis-6379.pid
bind 192.168.50.102    # 本机IP或bind * -::*
logfile /usr/local/softwarews/redis/logs/redis-6379.log
dbfilename dump-6379.rdb
dir /usr/local/softwarews/redis/data
appendonly yes #slave
slaveof 192.168.60.20 6379  # master主的地址和端口
masterauth password			#master的密码

#启动
$ redis-server redis-m-6379.conf
#检查
$ lsof -i 4:6379 
$ netstat -atp | grep 6379

在这里插入图片描述
在这里插入图片描述

  1. 哨兵模式
    1.9. 配置哨兵
    在redis源码中复制sentinel.conf 配置文件到自己指定的位置,
    编辑sentinel.conf文件
daemonize yes 
##sentinel实例之间的通讯端口  
port 16379  
#配置日志文件
logfile "/usr/local/softwares/redis/logs/sentinel-16379.log"
#sentinel工作目录
dir "/usr/local/softwares/redis/sentinel"
##显示监控master节点192.168.60.20,master节点使用端口6379,最后一个数字表示投票需要的"最少法定人数",
##比如有10个sentinal哨兵都在监控某一个master节点,如果需要至少6个哨兵发现master挂掉后,才认为master真正down掉,那么这里就配置为6,最小配置1台master,1台slave,在二个机器上都启动sentinal的情况下,哨兵数只有2个,如果一台机器物理挂掉,只剩一个sentinal能发现该问题,所以这里配置成1,至于mymaster只是一个名字,可以随便起,但要保证下面使用同一个名字
sentinel monitor mymaster 192.168.50.101 6379 1  
##表示如果10s内mymaster没响应,就认为DOWN了
sentinel down-after-milliseconds mymaster 10000  
##表示如果master重新选出来后,其它slave节点能同时并行从新master同步缓存的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。最保定的设置为1,只同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。
sentinel parallel-syncs mymaster 1  
##表示如果15秒后,mysater仍没活过来,则启动failover,从剩下的slave中选一个升级为master
sentinel failover-timeout mymaster 15000    

#设置密码
sentinel auth-pass mymaster 123456
启动哨兵服务
redis-sentinel sentinel-16379.conf
查看日志
tail -f -n 100 /usr/local/softwares/redis/logs/sentinel-16379.log

Redis主从复制(含sentinel)_第2张图片

你可能感兴趣的:(JavaWeb,Linux,redis,数据库)