一、主从复制
1.为什么使用,好处?
1.1 单个redis服务器压力过大,可考虑,master写,slave读,分散缓解服务器压力。
1.2 一个master可以拥有多个slave,而一个slave又可以拥有多个slave
2.主从复制过程
2.1 master、slave 建立连接且slave 向master 发起同步请求
2.2 请求成功之后 slave 接受master发送过来的dump.rdb的快照文件
2.3 slave载入dump.rdb文件
2.4 当master和slave的连接断开时slave可以自动重新建立连接。如果master同时收到多个 slave发来的同步连接命令,只会使用启动一个进程来写数据库镜像,然后发送给所有slave。
3.配置
1.安装部署一个redis服务。
2.复制 安装好redis的配置文件 redis.conf 与redis.conf目录同级 并重新命名(eg:redis6380.conf)
3.修改端口,绑定主机器的ip和端口(eg: slaveof 192.168.1.118 6379)
4.修改日志输出目录、快照文件名称、pid等等(如果只是测试是否搭建成功这些不重要)
eg:
1.首先启动master、再启动slave,会发现slave 会向master 发送一个同步请求
2.若master 断开 slave 会一直发送同步命令等待响应
3.分别启动master和slave的客户端(eg: ./redis-cli -p 6380)在 输入info命令可看到相应的主从信息
4.测试,master 写数据 通过slave的客户端可读出来
二、redis集群搭建、主从切换
1.copy两份redis.conf 修改端口为6380、6381 且都设置为端口6379的slave服务(eg: slaveof 192.168.1.118 6379);
2.修改sentinel.conf文件,修改其监听端口为26379 且分别监听上述三个实例。
eg:
#master 6379
sentinel monitor master-6379 192.168.1.118 6379 1
sentinel down-after-milliseconds master-6379 5000
sentinel parallel-syncs master-6379 1
sentinel failover-timeout master-6379 60000
#master 6380
sentinel monitor master-6380 192.168.1.118 6380 1
sentinel down-after-milliseconds master-6380 5000
sentinel parallel-syncs master-6380 1
sentinel failover-timeout master-6380 60000
#master 6381
sentinel monitor master-6380 192.168.1.118 6381 1
sentinel down-after-milliseconds master-6381 5000
sentinel parallel-syncs master-6381 1
sentinel failover-timeout master-6381 60000
注: line1表示Sentinel去监视一个名为 master-6379 的主redis实例,这个主实例的IP地址为本机地址 192.168.1.118 ,端口号为 6379 ,而将这个主实例判断为失效至少需要 1个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行。
line2 表示 指定了Sentinel认为Redis实例已经失效所需的毫秒数。 当实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才 会被标记为客观下线,这时自动故障迁移才会执行。
line3表示 指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
line4 表示 如果在该时间(ms)内未能完成failover操作,则认为该failover失败
3.启动服务和sentinel监听
可以看到端口为6380和6381 为端口6379的slave实例
4.主从切换、断开master即端口为6379的进程
查看sentinel输出、6379主观下线、随即客观下线。尝试master迁移、选择出slave端口为6381作为master,端口监听随即变化为6381
再查看端口为6381的info如下,转为master成功
重新重启6379进程,sentinel监听可看到 此时的6379作为slave加入,主从切换完成
参考:
http://www.cnblogs.com/daoluanxiaozi/p/3724299.html
http://www.cnblogs.com/kreo/p/4423362.html redis.conf详解
http://www.2cto.com/database/201501/367181.html 主从同步原理
http://www.open-open.com/lib/view/open1340001854799.html Redis的复制功能以及Redis
复制机制本身的优缺点以及集群搭建问题
http://www.bubuko.com/infodetail-926782.html 切换详解
http://www.2cto.com/database/201502/377061.html 主从切换配置