Redis(六) 主从复制、HA集群(基于Sentinel)搭建

Redis() 主从复制、HA集群(基于Sentinel)搭建

一、主从复制

    1.为什么使用,好处?

      1.1 单个redis服务器压力过大,可考虑,master写,slave读,分散缓解服务器压力。

      1.2 一个master可以拥有多个slave,而一个slave又可以拥有多个slave

    2.主从复制过程

      2.1 masterslave 建立连接且slave master 发起同步请求

      2.2 请求成功之后 slave 接受master发送过来的dump.rdb的快照文件

      2.3 slave载入dump.rdb文件

      2.4 masterslave的连接断开时slave可以自动重新建立连接。如果master同时收到多个 slave发来的同步连接命令,只会使用启动一个进程来写数据库镜像,然后发送给所有slave 




3.配置

      1.安装部署一个redis服务。

      2.复制 安装好redis的配置文件 redis.conf redis.conf目录同级 并重新命名(egredis6380.conf

      3.修改端口,绑定主机器的ip和端口(eg: slaveof 192.168.1.118 6379)

      4.修改日志输出目录、快照文件名称、pid等等(如果只是测试是否搭建成功这些不重要)

    eg

      1.首先启动master、再启动slave,会发现slave 会向master 发送一个同步请求

 

   2.master 断开 slave 会一直发送同步命令等待响应

   3.分别启动masterslave的客户端(eg: ./redis-cli -p 6380)在 输入info命令可看到相应的主从信息

4.测试,master 写数据  通过slave的客户端可读出来

 

二、redis集群搭建、主从切换

  1.copy两份redis.conf 修改端口为63806381 且都设置为端口6379slave服务(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监听

  可以看到端口为63806381 为端口6379slave实例




 

4.主从切换、断开master即端口为6379的进程

查看sentinel输出、6379主观下线、随即客观下线。尝试master迁移、选择出slave端口为6381作为master,端口监听随即变化为6381

再查看端口为6381info如下,转为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  主从切换配置



 

 

 

 

 

猜你喜欢

转载自tablemiao.iteye.com/blog/2266199