redis安装+主从+哨兵模式和坑。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_33625560/article/details/82466510

一、安装

版本:3.2.11

1.解压
2.进入解压后的目录 执行 make
3.执行 make install (这一步需要root权限的用户执行


上面的操作后基本上一个单节点的redis就算是安装好了,进入src目录 执行redis-server 就可以成功启动redis。

二、主从模式(master/slaver)

我的理解:
主从的作用或者说优势大概有两点
1.备份数据,当某个节点有问题时(无论是master还是slaver)方便从正常的节点恢复数据。
2.负载均衡,slaver节点只能读,可以分担一些master的读取操作。

注:slaver默认是只能读的,但是可以通过在master节点的redis.conf文件中将slave-read-only设置为no(默认yes)让slave设置为可以写。但是不推荐这样操作,master节点写数据时,会同时推送到slaver节点下,从而保持数据的一致性,但是在slave节点写的数据不会同步到master中,就会有问题。

主从模式的配置十分简单,在slaver节点的redis.conf中增加 slaveof 【masterIp】 【masterPort】

缺点:由于从节点只能读,所以缺点很明显加入master挂掉以后,redis就不能对外提供服务了,因为剩下的slave不能成为master,这个问题影响还是很大的。所以就有了下面的哨兵模式。

三、sentinel模式

sentinel的中文含义是哨兵、守卫。也就是说既然主从模式中,当master节点挂了以后,slave节点不能主动选举一个master节点出来,那么我就安排一个或多个sentinel来做这件事,当sentinel发现master节点挂了以后,sentinel就会从slave中重新选举一个master。

对sentinel模式的理解:

1.sentinel模式是建立在主从模式的基础上,如果只有一个Redis节点,sentinel就没有任何意义

2.当master节点挂了以后,sentinel会在slave中选择一个做为master,并修改它们的配置文件,其他slave的配置文件也会被修改,比如slaveof属性会指向新的master

3.当master节点重新启动后,它将不再是master而是做为slave接收新的master节点的同步数据

4.sentinel因为也是一个进程有挂掉的可能,所以sentinel也会启动多个形成一个sentinel集群

5.当主从模式配置密码时,sentinel也会同步将配置信息修改到配置文件中,不需要担心。

6.一个sentinel或sentinel集群可以管理多个主从Redis。

7.sentinel最好不要和Redis部署在同一台机器,不然Redis的服务器挂了以后,sentinel也挂了

8.sentinel监控的Redis集群都会定义一个master名字,这个名字代表Redis集群的master Redis。

注:当使用哨兵模式的时候 客户端就不需要直接连接redis,而是连接哨兵的ip和端口,由sentinel来提供具体的可提供服务的Redis实现,这样当master节点挂掉以后,sentinel就会感知并将新的master节点提供给使用者。

sentinel模式基本可以满足一般生产的需求,具备高可用性。但是当数据量过大到一台服务器存放不下的情况时,主从模式或sentinel模式就不能满足需求了,这个时候需要对存储的数据进行分片,将数据存储到多个Redis实例中,这就需要集群模式。

cluster的出现是为了解决单机Redis容量有限的问题,将Redis的数据根据一定的规则分配到多台机器。
cluster可以说是sentinel和主从模式的结合体,通过cluster可以实现主从和master重选功能,所以如果配置两个副本三个分片的话,就需要六个Redis实例。
因为Redis的数据是根据一定规则分配到cluster的不同机器的,当数据量过大时,可以新增机器进行扩容
  这种模式适合数据量巨大的缓存要求,当数据量不是很大使用sentinel即可。

四、主从+哨兵的配置

对于单纯的主从来讲不需要配置太多,只需要在slave节点 加上
slaveof 【masterIp】 【masterPort】 就可以了。
然后分别启动master和slave就可以了。

其他的参数:
port:端口
masterauth:master设置连接密码
requirepass:连接master是认证的密码
(由于哨兵模式在master节点挂掉之后会修改配置文件,所以masterauth和requirepass不管是主从都需要设置)
bind:这个属性并不是配置内个ip可以访问它,而是设置他可以让别人用内个ip进行访问,例如设置127.0.0.1 则只能本地服务器使用127.0.0.1进行访问,还有一种情况若服务器配置了多个网卡,例如A:10.10.10.1;B:10.10.10.2,此时在bind中配置了A,那以B访问则访问不到

protected-mode:是否只允许内网访问。

以上配置都是在redis.conf中设置的。

下面来看哨兵的配置

哨兵的启动和redis-server的启动没有关系,一个哨兵的集群可以监控多个不同的redis主从实例

1.
sentinel monitor master-name ip redis-port quorum
例:
sentinel monitor mymaster 192.168.98.136 6379 1

quorum:quorum个sentinel认为master死了时,才能真正认为该master已经不可用了。(sentinel集群中各个sentinel也有互相通信,通过gossip协议)

2.
sentinel auth-pass mymaster mypwd

连接master 需要的密码

3.
down-after-milliseconds

sentinel会向master发送心跳PING来确认master是否存活,如果master在“一定时间范围”内不回应PONG 或者是回复了一个错误消息,那么这个sentinel会主观地(单方面地)认为这个master已经不可用了(subjectively down, 也简称为SDOWN)。而这个down-after-milliseconds就是用来指定这个“一定时间范围”的,单位是毫秒。

注:哨兵不会马上进行failover主备切换,因为还要考虑其他哨兵的意见,需要超过某个数量的哨兵都认为master凉凉了,才会准备进行准备切换。在这个时候也不是马上就能failover的,还是需要需要sentinel中的大多数sentinel授权后才可以进行failover

例如,集群中有5个sentinel,票数被设置为2,当2个sentinel认为一个master已经不可用了以后,将会触发failover,但是,进行failover的那个sentinel必须先获得至少3个sentinel的授权才可以实行failover。
如果票数被设置为5,要达到ODOWN状态,必须所有5个sentinel都主观认为master为不可用,要进行failover,那么得获得所有5个sentinel的授权。

4.
protected-mode
这个属性在哨兵设置中很容易出现坑,由于哨兵间需要进行通信进行授权,所以这个属性设置为yes时只可以进行内网访问,看服务器的情况如果主从切换失败了,可以试试把这个属性设置为no。

参考博客:
https://blog.csdn.net/yypzye/article/details/52281282
https://www.cnblogs.com/zhoujinyi/p/5569462.html

猜你喜欢

转载自blog.csdn.net/sinat_33625560/article/details/82466510