目录:
(1)主从复制
一主二从搭建
(2)复制原理
(3)哨兵模式
(4)小结
为解决大量访问的高并发问题,建立捷群。提供3台redis服务,建立集群
建立集群后,机器就有关联了,写的叫主库master库,它只负责写,读的叫从库,从库依赖于主库,只要主库的数据变了,会自动的同步到从库,这样数据就可以保持一致,这样就可以形成一个集群,一主多从、或者一主两从
(1)主从复制
主机数据更新后根据配置和策略,自动同步到从机的master/slave机制,Master以写为主,Slave以读为主。
1.一主二从
一主二从原理
1、配从(库)不配主(库)
2、配从(库): slaveof 主库IP 主库端口
3、主写从读、读写分离
4、从连前后同
5、主断从待命、从断重新连
一主二从搭建
1、一台服务器模拟三台主机:
第一步:将redis.conf 拷贝三份,名字分别是,redis6379.conf,redis6380.conf,redis6381.conf
第二步:修改三个文件的port端口,pid文件名,日志文件名,rdb文件名
依次复制,并修改相应内容。
在一台电脑上模拟,三台Redis服务,实质上,一台主机上只有一个Redis,这里只是用来演示
如:
port 6379
pidfile /var/run/redis_6379.pid
logfile "6379.log"
dbfilename dump6379.rdb
使用3个Redis配置文件,启动3个redis服务
redis
第三步:分别打开三个窗口模拟三台服务器,开启redis服务。
redis-server redis6379.conf &
redis-server redis6380.conf &
redis-server redis6381.conf &
分别连上客户端:
redis-cli -h 127.0.0.1 -p 6379
redis-cli -h 127.0.0.1 -p 6380
redis-cli -h 127.0.0.1 -p 6381
2、查询主从信息:info replication
在还没有设立集群,他们还没有分配角色,利用命令查看,默认都是主机:
role:master主机
connected_slaves:0 没有连他的
3、写操作6379:
在端口号6379里面写数据:
在端口号的Redis6380,读数据:他们没有关系,所以还是空的
4、设置主从关系:让6379当主机,让6380、6381当从机
在6380和6381主机上分别执行命令:slaveof 127.0.0.1 6379
设置完6780之后查看,角色发生改变
role:slave(从机)
master_host:127.0.0.1主机的IP地址
master_port:6379 主机的端口6379
master_link_status:up 从属转态正在激活
查看主机:6379:发现connected_slaves:2 有2台从机连它,分别是6380、6381
在6380上查看数据发现已经同步到从机上面:
5、全量复制:在6380和6381分别执行命令get k1
6、增量复制:6379执行命令:set k2 v2。然后6380端口和6381端口,分别执行命令:get k2
7、主写从读、读写分离:在6380和6381上执行写操作set k3 v3
不能再从机上执行写操作:只能读数据,读的话汇报错
8、主机宕机:6379执行指令shutdown,并查看6380和6381的redis信息
从机原地待命。
关闭6379后:6380和6381 master_link_status:down,从机原地待命,不能更新数据
9、主机宕机后恢复:重启6379,并且执行写命令set k4 v4;6380和6381上分别执行get k4
主机重启后,一切正常。
查看6381的从机状态:master_link_status:up
10、从机宕机:6380执行指令shutdown,并查看6379和6381的redis信息
关闭从机6380,查看主机6379,他的连接从机只剩下6381了
从机6381:不受影响
11、从机宕机后恢复:重启6380,并查看6380、6379和6381的redis信息
重启从机后,跟主机没有关系,6380变成主机,需要重新设置主从关系
注意:从机跟master断开联系,必须重新连接,除非写进配置文件。
12、从机恢复连主机前,主机写操作:6379执行写命令set k5 v5,6380和6381分别执行命令get k5
13、从机恢复连接主机,6380执行命令:slaveof 127.0.0.1 6379,并且执行命令:get k5
当主句6379出问题,这里以断开连接来说,6380上位变成主机,6380断开主从关系,6381修改主从关系
14、从机上位:
第一步:主机宕机,6379执行命令:shutdown
第二步:6380断开主从关系,执行命令:SLAVEOF no one
第三步:重新搭建主从,6381执行命令:SLAVEOF 127.0.0.1 6380、info replication
第四步:之前主机恢复,重启6379的Redis服务,并执行命令:info replication
在6379主机宕机后,6380从机断开主从关系,6381开始还在原地待命;后来6380从机上位,6381投靠6380,6379主机即使回来但它已是孤寡老人,空头司令。
比如原来色的主机修好后,可以继续当主机,可以当6380的从机,也可以当从机6380的从机
15、天堂变地狱:6379执行命令saveof 127.0.0.1 6381,并在6379和6381执行info replication
一台主机配多台从机,一台从机再配多台从机,从而实现了庞大的集群架构。同时也减轻了一台主机的压力,缺点是增加了服务器间的延迟。
6381发生改变:既是从机又是从机,但是不能写数据
(2)复制原理
1 .全量复制
slave启动成功连接到master后会发送一个sync命令;Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步;slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
只要是重新连接master,一次完全同步(全量复制)将被自动执行。
增量复制
Master将新的所有收集到的修改命令依次传给slave,完成同步。
(3)哨兵模式
哨兵模式原理
从机上位的自动版。Redis提供了哨兵的命令,哨兵命令是一个独立的进程,哨兵通过发送命令,来监控主从服务器的运行状态,如果检测到master故障了根据投票数自动将某一个slave转换master,然后通过消息订阅模式通知其它slave,让它们切换主机。然而,一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多哨兵进行监控。
哨兵模式搭建
1—7步跟1.17.2.2一主二从搭建一样:一台服务器模拟三台主机、查询主从信息、写操作6379、设置主从关系、全量复制、增量复制、主写从读、读写分离。
8、创建redis_sentinel.conf文件,并编辑里边的内容:sentinel monitor dc-redis 127.0.0.1 6379 1,表示:指定监控主机的ip地址,port端口,得到哨兵的投票数(当哨兵投票数大于或者等于此数时切换主从关系)。
在redis-5.0.2目录下编辑一个配置文件,redis_sentinel.conf,使用vim编辑内容:
sentinel monitor dc-redis 127.0.0.1 6379 1
9、新开窗口,启动哨兵:redis-sentinel /opt/redis-5.0.2/redis_sentinel.conf
10、主机宕机:
关闭6379:
11、等待从机投票,在sentinel窗口中查看打印信息。
可以看到最后主机换成6380了
12、查看6380和6381的redis信息:
查看6380:role:master,变换了角色
13、原主机恢复,启动6379:
原来的主机变成现在主机的从机
(4)小结:
操作:
1 查看主从复制关系命令:info replication
2 设置主从关系命令:slaveof 主机ip 主机port
3 开启哨兵模式命令:./redis-sentinel sentinel.conf
4 主从复制原则:开始是全量复制,之后是增量复制
5 哨兵模式三大任务:监控,提醒,自动故障迁移
缺点
Redis的主从复制最大的缺点就是延迟,主机负责写,从机负责备份,这个过程有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,从机器数量的增加也会使这个问题更加严重。