Redis集群
Redis的复制(Master/Slave)
介绍:
也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Salve已读为主。
作用:
主从备份:防止主机宕机
读写分离:分担master的任务
任务分离:如从服分别分担备份工作与计算工作
容灾恢复:灾难恢复指的是在灾难发生后,将系统恢复到正常运作的能力。
1.一主多仆
2.薪火相传
3.反客为主
4.哨兵模式(sentinel)
5.复制原理
6.复制的缺点
准备工作:
我们将在一个机器上运行三个reids服务(进程)模拟三台redis主机。
1.我们在与bin目录同级下创建目录myredis,将redis.conf拷贝一份到myredis下。
2.拷贝多个redis.conf文件
cp redis.conf redis1.conf
cp redis.conf redis2.conf
cp redis.conf redis3.conf
注意:这样myredis目录就有四个配置文件:redis.conf、redis1.conf、redis2.conf、redis3.conf
3.配置redis1.conf、redis2,conf、redis3.conf
Redis1: 开启daemonize yes:daemonize yes pid文件名字:Pidfile /var/run/redis1.pid 指定端口:port 6379 Log文件名字:Logfile “redis1.log” Dump.rdb名字:dbfilename dump1.rdb
Redis2: 开启daemonize yes:daemonize yes pid文件名字:Pidfile /var/run/redis2.pid 指定端口:port 6380 Log文件名字:Logfile “redis2.log” Dump.rdb名字:dbfilename dump2.rdb
Redis3: 开启daemonize yes:daemonize yes pid文件名字:Pidfile /var/run/redis3.pid 指定端口:port 6381 Log文件名字:Logfile “redis3.log” Dump.rdb名字:dbfilename dump3.rdb
四个注意点:
1.配主不配从:如果选择redis1作为主机,则redis2、redis3需要设置命令,主机不需要。
2.从库配置命令:从机要跟从主机,命令:SLAVEOF 主库IP 主库端口。
3.每次与master断开之后,主从关系断开,从机需要重新连接,除非你配置进redis.conf文件。
4.info replication:查看redis角色。
一主多仆
一个主机多个从机。
注意:79端口上的为主机,80、81为从机。
终端1 redis-server redis1.conf redis-cli -p 6379 info replication
终端2 redis-server redis2.conf redis-cli -p 6380 SLAVEOF 127.0.0.1 6379 info replication
终端3 redis-server redis2.conf redis-cli -p 6381 SLAVEOF 127.0.0.1 6379 info replication
主从复制
从机会同步主机操作,甚至同步之前主机的操作。
读写分离
只有主机可以写,从机只能读。
主机宕机
主机宕机后,从机原地待命,如果主机恢复,则继续干活。
从机宕机
从机宕机后,再次启动就会是主机角色,所以需要连接原本的主机。
薪火相传
上一个Salve可以是下一个Slave的Master,Slave同样可以接收其他slaves的连接和同步请求,那么该slave作为链条中下一个Maste,可以有效减轻master的写压力。
中途变更转向:会清楚之前的数据,重新建立拷贝最新的。
这里:
80:
SLAVEOF 127.0.0.1 6379
81:
SLAVEOF 127.0.0.1 6380
注意:在这里80是79的从机,又是81的主机,所以它到底是什么角色呢?
上面显示了连接的主机
下面显示了连接的从机
反客为主
刚才上面主机宕机时,从机原地待命不动,在实际中当然不能这样做,我们要在从机中选择一个做主机。
这里还是以79宕机为背景,以下是配置。
80:
SLAVEOF no one:使当前数据库停止与其他数据库的同步,转为主数据库
81:
SLAVEOF 127.0.0.1 6380
哨兵模式(sentinel)
反客为主的自动版:能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。
- 恢复一主二仆(79master,80、81salve)
- 自定义的/myredis目录下新建sentinel.conf文件,名字绝不能错:touch sentinel.conf
- 配置哨兵,填写内容:sentinel monitor 被监控主数据库名字(自己起名字) 127.0.0.1 6379 1 注:上面最后一个数字1,表示主机挂掉后salve投票看让谁接替成为主机,得票数多
- 启动哨兵:
redis-sentinel /myredis/sentinel.conf
注:上述目录按照各自的实际情况配置,可能目录不同
5.正常主从演
6.原有的master挂了
7.投票新选(redis帮你完成)
8.重新主从继续开工,info replication查查看
问题:如果之前的master重启回来,会不会双master冲突?
不会,它的身份会变成从机,服从现有的主机。
练习:
一组sentinel能同时监控多个Master。
复制的缺点
由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会是这个问题更加严重。