Redis-主从复制
1,什么是主从复制
主机数据更新后根据配置和策略,自动同步到备机的 master/slaver 机制,Master 以写为主,Slave 以读为主
2,能干嘛
1)读写分离性能扩展,
2)容灾快速恢复
3,搭建一个1主2从主从复制
1),创建一个文件夹/myredis
2)复制redis.conf文件到myredis文件夹中
3)配置1主2从,创建三个配置文件(指定不同的端口号)
*redis6379.conf
*redis6380.conf
*redis6381.conf
4)在三个配置文件中写入你的内容
在redis6379.conf 写入如下内容:
include /myredis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
在redis6380.conf文件中写入如下内容:
include /myredis/redis.conf
pidfile /var/run/redis_6380.pid
port 6380
dbfilename dump6380.rdb
在redis6381.conf文件中写入如下内容:
include /myredis/redis.conf
pidfile /var/run/redis_6381.pid
port 6381
dbfilename dump6381.rdb
5)appendonly 关闭
6)启动三个redis服务
7)查看三台服务器运行情况 info replication ( redis-cli 中查看) 打印出主从复制相关信息
8)配从库不配主库
slaveof <ip> <port>
成为某个实例的从服务器
1,在6380和6381上执行:slaveof 127.0.0.1 6379
3,复制原理
1)当从服务器连接上主服务器后,从服务器想主服务器发送要数据同步的信号
2)主服务器接收到从服务器发送过来的同步消息,把主服务器数据进行持久化,RDB,把RDB文件发给从服务器,从服务器拿到RDB文件进行读取
3)每次主服务器进行写操作,和从服务器进行数据同步
4,薪火相传
上一个 Slave 是下一个 slave 的 Master,Slave 同样可以接收其他 slave的链接和同步请求,那么该slave 作为链条中下一个的 master,可以有效减轻 master 的写压力,去中心化降低风险。
用 slaveof <ip> <port>
中途变更转向:会清除之前的数据,重新建立拷贝最新的
风险是一旦某个slave 宕机,后面的 slave 都没法备份
主机挂了,从机还是从机无法写数据了
5,反客为主
当一个master宕机后,后面的 slave 可以立即升为master,其后面的 slave 不用做任何修改。
用 slaveof no one 将从机变为主机 (手动处理)
6,哨兵模式
反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库
使用步骤:
1,调整为一主二仆模式,6379带着6380、6381
2,在自定义的文件夹 /myredis 下面新建 sentinel.conf 文件,名字绝不能错
3,配置哨兵,填写内容
sentinel monitor mymaster 127.0.0.1 6379 1
其中 mymaster 为监控对象起的服务器名称, 1 为至少有多少个哨兵同意迁移的数量
4,启动哨兵
在 /usr/local/redis/bin
执行 redis-sentinel /myredis/sentinel.conf
redis 做压力测试可以用自带的 redis-benchmark 工具
5,当主机挂掉,从机选举中产生新的主机
那个从机会被选为主机?根据优先级别:slave-priority 新的版本是:replica-priority
用主机启动后会变为从机
6,复制延时
由于所有的写操作都是先在 master 上操作,然后同步更新到 slave 上,所以从 master 同步到 slave 机器有一定的延迟,当系统很繁忙的时候,
延迟问题会更加严重, slave 机器数量的增加也会使这个问题更加严重。
浙公网安备 33010602011771号