一、几种部署方式的介绍

redis 有4种部署方式:单机,主从,哨兵,集群

1、单机

优点:部署方便,可用于本地开发,或对数据要求不高的,开发环境等

缺点:

  • 不能保证数据的可靠性
  • 性能瓶颈

2、主从

2.1 master-slave 的方式

一台master, 多台slave, master 负责读写和向slave同步数据,slave负责只读和同步master的数据(所以它的同步机制怎样实现的?主从是怎样同步的)

主从关系:一主多从,但不能一从多主。

redis一般部署在docker吗 redis几种部署方式_同步机制

 

2.2 同步机制

要解决回答的问题包括:

  • 主从怎样实现同步呢:见2.2.1
  • 怎样确定主从:见2.2.1
  • 同步包括全量同步,增量同步,同步的触发机制(master 或 slave 知道什么时候要去进行同步?)
  • 如果master挂了会怎么办 见2.2.3
  • master 挂掉后,怎样恢复 见2.2.4
  • 有多个slave要同步,会不会影响master的写性能?: 会的,所以这也是主从的一个缺点之一
  • 主从和集群可以一起部署吗,多个master当成一个master:
  • 向slave进行写操作,会怎样:不能写
  • 复制和同步会比较影响Master 的性能,可以怎样做:设为为主-从-从模式。或树状模式。

 

2.2.1 如何进行第一次同步,怎样建立主从关系

  • 先按单机部署几台,然后,在slave机子,执行,replicaof ip:port 进行确定主从关系,之后确定主从关系后,就开始进行全量同步和后面的长连接,增量同步。
  • 比如现在有3台机子 ,192.168.1.100, 192.168.1.101, 192.168.1.102 其中想把 192.168.1.100 做 master, 另外两台机子做 slave,那么
  • 首先,把3台机子,都单独部署,启动,这个时候,他们相互没有关系,
  • 进入随便一台机子(要进行主从,这三台机子必须是同个网段,相互可以联通), bin/redis-cli -h 192.168.1.101 -p 6379 连接到 101 的redis
  • 然后执行: REPLICAOF  192.168.1.100 6379 (这个时候,101 就变成了 100 的slave,创建连接的首次,会进行全量同步)
  • 对于 102 的机子,同理,使用redis-cli 连接到102,然后使用指令:REPLICAOF  192.168.1.100 6379 也可以创建102 与 100 的 关联。

 

2.2.2 

 

2.2.3 master 挂掉后会怎样

如果Master 宕机后,就需要人工介入,进行错误转移,重新指定Master,把从变主。

 

2.2.4 master 挂掉后,怎样恢复

master 挂掉之后,slave 是不能写的,要重新指定master才行。

先脱离slave1之前与master 的关系:REPLICAOF NO ONE

这个时候,slave1 是可以重新写数据了,然后再把slave2关联到新的master(即slave1)

这个时候,就变成一主一从了。

 

 

 

3、哨兵

哨兵模式是在主从的基础上做的一种加强模式,主从有一个致命的缺陷:当master宕掉之后,需要人为介入去处理。哨兵模式就是针对这个缺陷做的加强,当master宕掉之后,会自动从各个slave中选出新的master,从中不需要人为介入。保证了相对的健壮性。但原来主从的性能缺点是没有得到优化的。

 

3.1 一些概念

哨兵:

  • 是一种redis的“特殊”节点,不存储数据。我现在是一个节点对就一个哨兵,有多少个节点,就放多少个哨兵。
  • 哨兵,默认端口是26379, 所以它也是要起一个进程的,这个哨兵进程是用于监测,心跳检测,选举等用途。有点像,emmm,加个保护。

节点:master 和 slave 都可以叫节点。

 

3.2 哨兵配置

1、哨兵配置文件:sentinel.conf, 几个重要的参数

  • protected-mode no: 保护模式关闭一下
  • port 26379: 这个是哨兵进程的端口,默认26379
  • sentinel monitor mymaster 127.0.0.1 6379 2 表示哨兵监听的master是本机端口6379的进程,并且要至少超过2个从节点认为master 挂了,才能开始新的选举
  • sentinel down-after-milliseconds mymaster 10000  超过10000ms, master节点没反应,才认为master 是挂了

 

3.3 哨兵配置启动

按主从方式启动好 master 和几个 slave后,

再执行:

./redis-server /etc/sentinel.conf --sentinel

就可以启动哨兵了。(这个是每个节点都要去启动一下的,比如三个节点 192.168.10.1/2/3 这三个节点,都需要启动一下这个哨兵进程)

 

这个时候,使用 redis-cli 连接到master 节点,输入 SHUTDOWN, 把 master 节点宕掉,过一会,发现另外两台机子会重新选举出新的master ,服务依然是可用的。

 

附:服务启动过程中,sentinel.conf 会被添加修改,比如重新选取master节点,相关信息会追加到配置文件的后面。

 

3.4 哨兵总结

加强型的主从。添加了监控的主从模式。配置起来反而会比较麻烦。