1.什么是复制
单个redis的最大读并发量为11万,最大写并发量为8.1万,但如果超过此上限怎么办?这是就需要采取redis的复制策略
官网说明如下
也就是我们常说的主从复制,主机更新后会根据配置和策略,自动同步到备用机的机制
2.作用
作用主要有两个,首先是读写分离,让写的操作在主机(Master)上执行(也可以读),让读的操作在从机(Slave)上执行(不能写)。第二个作用是容灾(主从机保存的信息是一样的)
3.如何使用
首先我们要准备多个redis,也就是准备多个启动redis的配置文件,这里准备三个配置文件来做实验
6379(主机)的配置文件:
# 端口号
port 6379
# 允许访问的ip地址
bind 0.0.0.0
# 是否设置为后台线程启动
daemonize yes
# rdb持久化策略
save 900 1
# 持久化文件的名称
dbfilename dump6379.rdb
# 持久化文件路径
dir ./
pidfile /var/run/redis_6379.pid
6380(从机)的配置文件:
port 6380
bind 0.0.0.0
daemonize yes
save 900 1
dbfilename dump6380.rdb
dir ./
pidfile /var/run/redis_6380.pid
# 设置为6379的从机
slaveof 127.0.0.1 6379
6381(从机)的配置文件:
port 6381
bind 0.0.0.0
daemonize yes
save 900 1
dbfilename dump6381.rdb
dir ./
pidfile /var/run/redis_6381.pid
# 设置为6379的从机
slaveof 127.0.0.1 6379
配置文件完成之后,我们来到bin目录下启动三个redis
./redis-server ../conf/redis-6379.conf
./redis-server ../conf/redis-6380.conf
./redis-server ../conf/redis-6381.conf
查看进程,至此我们已经成功配置完成主从复制
接下来我们开始测试,我们进入6379主机,使用role命令查看主从关系
可以看到6379的角色信息为master,并且有两个从机6380和6381
我们在6379中写入一些信息
然后退出,来到6380和6381查看信息
6380:
6381:
可以看到,我们在主机中写入的数据也出现在了从机中,复制功能得以实现
现在,我们尝试在从机中读取数据与写入数据
可以看到,我们在从机中只能将数据读出,并不能将数据写入
我们还可以取消掉主从关系,将配置文件中的slaveof属性改为
SLAVEOF no one
即可实现
4.主从复制的原理
在从机启动连接到主机后,会向主机发送一个sync命令,主机接收到此命令之后会启动后台的存盘进程,同事手机所有接收到的用于修改数据的命令,在后台进程执行完毕之后,主机会将整个数据文件发送给从机,至此完成一次全量复制;从机在接收到此文将之后,会将此文件存盘并加载到内存中
后续的增量复制:主机会继续将所有收集到的修改命令传送给从机,继续完成同步。
从机一旦重新连接主机,一次全量复制就会立即执行
5.哨兵模式
主从复制的一个作用就是用于容灾,但是在主机崩溃之后,虽然从机有备份,但是也就没有从机继续写入数据了,于是就有了这个哨兵模式
哨兵模式下,如果主机崩溃了,就会让从机中的一个成为主机,从而保证读写功能的完整
6.实现哨兵模式
首先我们要定一个个哨兵的配置文件,文件名必须为sentinel.conf
# sentinel monitor 被监控主机名字(自己起名字) 主机ip 主机端口号 哨兵投票数
sentinel monitor host 127.0.0.1 6379 1
# 设置为后台进程
daemonize yes
最后的哨兵投票数表示在有多少哨兵监视此主机的情况下,要有多少个哨兵认为此主机挂掉了,才,才会将从机切换为主机,此次试验只配置一个哨兵,故此处设置为1
配置文件完成之后我们在bin目录中使用redis-sentinel + 配置文件路径启动哨兵
然后我们将主机6379干掉,模拟主机崩溃的情况,之后我们进入6380,使用role命令查看主从关系
此时我们发现6380从原来的从机变成了主机,6381成为了6380的从机
此时我们查看配置文件
6380:
6381:
我们发现6380的配置文件中没有了从机配置这一行,6381从机配置这一行被修改为了主机为6380
现在我们重启6379并进入,来查看一下效果
我们发现此时使用role查看角色,6379变成了6380的从机,并且配置文件内容也变成了如下
由此可得知,之前的主机崩溃之后,从机变为新的主机,原来的主机回来之后并不会发生主机冲突,而是以从机的身份开启