redis 修改角色_Redis集群之哨兵

本文介绍了Redis集群中哨兵系统的概念和作用,哨兵作为一个独立进程,用于监控主从服务器并自动进行主服务器故障切换。当主服务器宕机,哨兵系统会通过多数决机制选择一个从服务器升级为主服务器,确保服务的高可用性。详细步骤包括哨兵配置、主从服务器配置以及哨兵模式下的主服务器宕机切换过程,展示了如何通过哨兵实现透明的故障恢复。
摘要由CSDN通过智能技术生成

上篇文章成功部署redis集群,但也会存在一些问题,比如说主服务器A突然挂掉,这时候我们的技术方案只能是把从服务器手动切换为主服务器,这样的方式费时费力,并且还会造成服务器在一定时间内不可用。我们更希望的是当有主服务挂掉以后,redis自动帮我们在部署的从服务器中随机找一个切换为主服务器,这时候我们优先考虑的就是哨兵模式。哨兵模式是一种特殊的模式,哨兵是一个独立的进程,作为进程,它会独立运行。

Sentinel 哨兵的概念

Sentinel(哨兵)是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。

4107dfd1e08291dbdf366f4a9e63af43.png

在这里哨兵的作用是发布命令,让服务器返回其监控状态,包括主服务器与从服务器,当哨兵发现主服务器宕(master)机以后,会自动在该主服务器下的从服务器中(slave)随机选择一个从服务器切换为主服务器(master)。然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

其实在部署哨兵的时候并不是只部署一个哨兵,而是通过多个哨兵共同监测部署的redis集群,这样可以避免单个哨兵在监测的时候出现的一个问题,所以,主服务器宕机切换主从服务器并不是一个哨兵决定(单哨兵模式除外)。而是同选举的方式模式,当超过半数的决定由某个从服务器切换为主服务,则该从服务器切换为主服务器。

主服务器宕机切换过程:

假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。这样对于客户端而言,一切都是透明的。

宕机图裂过程:

图1:

dba4a4bd5a2439944d187811c89a2592.png

图2:

b71f23e88479614de23af3c7f7d1f44e.png

图3:

cc5f3d22fcb69a8b3bfd2528542ca06a.png

下面通过redis配置哨兵模式:

此次配置哨兵模式是一主二从三个哨兵,首先配置一主二从:

1、在/usr/local/目录下创建一个redis-colony文件夹

命令:mkdir  redis-colony

8e639cd97815720cb0e6c8d12bc9e392.png

2、在新建的redis-colony目录下新建redis-1000、redis-1001、redis-1002三个文件夹:

命令:mkdir  redis-1000 redis-1001 redis-1002

4c00caef569da11e236fa2467389f8c3.png

3、将虚拟机上安装的redis下的所有所有文件拷贝到redis-1000 redis-1001 redis-1002这三个文件夹

命令:cp  -r  /usr/local/redis/*  /usr/local/redis-colony/redis-1000

51eccdfae810b9fcd5f75868de491920.png

拷贝完成,其余的两个文件夹用相同的方法拷贝到对应的文件夹中。

到此,基本的准备工作完成,前面的操作都是很简单,就是一些简单的创建、复制、粘贴而已。下面,通过redis的配置文件:redis.conf进行一主二从的配置

这里之前创建了三个文件夹,分别是redis-1000、redis-1001、redis-1002三个文件夹,在此,默认使用redis-1000里面的redis作为主服务器。

现在进行配置:

首先进入到redis-1000文件夹中,通过命令:vi  redis-conf打开配置文件,修改以下配置项:

配置主服务器的ip地址:

(1)在配置文件69行,配置主服务器的ip

cd2f98c2784a70526c48e68bd4600be3.png

配置主服务器端口:

(2)在配置文件92行,配置主服务器的端口

3226c4efb93d37b01912db5dbd600909.png

开启后台运行模式:

(3)在配置文件136行,修改daemonize的参数no为yes

4685ee5aae90d40341075a8a7a22a360.png

批注:其实主可以不做任何修改,默认也行,这里只是为了测试,同时也是为了方便做的修改。

下面配置从:

此次测试,默认使用redis-1001与redis-1002两个redis做从,下面是配置选项:

相同,进入到对应的文件夹中,通过命令:vi redis.conf打开redis配置文件进行修改。

redis-1001的配置文件修改内容:

#注释掉只允许本地连接

9fbe18dfddc6d722f73db54d5784daae.png

#开启后台运行模式

8a58a6ca8fd0ae8c7e343cad981382c5.png

#修改端口号

36534509253e8a453f8b196631ba712b.png

#新增从配置

d852166d9494c028a0544f165678cc97.png

注:192.168.1.88表示主的ip;1000表示主的ip

现在redis-1001中的redis已配置完成,下面进行redis-1002的redis配置

相同,进入到redis-1002目录下,通过vi redis.conf命令打开配置文件

下面是配置选项:

#注释掉bind,让其任意访问

321cc3a364727b4fbe49d4e1b960fd3c.png

#配置端口

636d0640fd9e4aa652360f880856ccb8.png

#开启后台启动模式

bc0447db3df7c9b5e7977c2eb69df3fe.png

#配置主从关系

ae8b95240a585f891b69985490c3da57.png

保存退出后,关于一主二从的配置就已经修改完成,下面只需要把三个redis按照顺序(主——从)启动即可:

首先启动主:

80427f7c39f9cdd67948ff31eee6c95d.png

启动两个从:

c99822c4279221d1793c7cea10584ebb.png

现在所有的redis都已经成功启动,现在看看启动的结果:

e91d2ce2887233e5ef0781af16578791.png

通过查看可以知晓,一主二从已经成功启动,现在我们随便连接一个redis,看看之前配置的结果是否生效,这里我选择连接主服务器:

f1eb187d1f6c5e30f3761264fcdb57ab.png

连接成功后,通过info 可以看到关于此时这个连接的redis信息:

af5a88caf355b13558c69c55df750b05.png

从此信息可以看出当前连接的redis角色是主,有2个从,分别是端口为1001与1002的两个redis,现在进行测试:首先,在主中存入一个键值对,然后连接从去看看是否能够获取,并且在从中也进行存储操作,看看是什么结果:1506ea3a17d21823875181953d6023d2.png

存储成功,通过ctrl+c退出

连接从,进行获取:

72df3b74b3a36180a5bd2f1cff3733ea.png

可以看出,在主中存入的数据,在从里面可以进行获取,当在从中进行存储操作的时候出现以下结果:

fbbbb4df901de8c400952954e18113fc.png

可以看到,当前连接的redis是没有写权限,只有读的权限

现在,一主二从配置完成,下面进行哨兵的配置,这也是重点;其实配置哨兵还是比较简单的,在这里我选择配置三个哨兵,主从个一个,这里有两个从,所以我选择的是配置三个哨兵,首先配置的是主的哨兵:

进入到redis-1000文件夹,编辑哨兵的配置文件sentinel.conf,修改或添加一下选项:

#配置ip

2e17d6e3d0976e12e87df24c729693e5.png

#配置端口

f5c399e57f1b6272c584d3d2b9aac4de.png

#开启后台启动模式

44c2e72decfaec76d38050968a19fcd9.png

#配置日志文件

45bfac12d9ded3c4bce8fd1578bb7a32.png

#配置日志文件存在的文件夹

d42e8d057b7a184409cace95c0fd45e5.png

#配置哨兵

ca8b8a0f90547bbe17c7eb62f6b80a5a.png

说明:

mymaster :master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。

192.168.1.88  :  这个是主的ip,因为我们配置哨兵只需要检测主即可。

2  :  哨兵容错机制,在哨兵模式中,如果有2个哨兵认为某个节点失联,则这是客观的认为这个节点失联。

#配置密码

#当在Redis实例中开启了requirepass foobared 授权密码 这样所有连Redis实例的客户端都要提供密码

# 设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码

e1eb6580b747f4d8adba93cf18d349df.png

这是自己玩,没有设置密码,生产上必须设置密码。

#指定哨兵客观认为节点失联时间,默认是30秒,也就是说30秒之后哨兵没有

#收到某节点信息,则客观认为该节点失联

4af23a70422bb19b38f626d3c9e92918.png

#故障转移的超时时间 failover-timeout 可以用在以下这些方面:

# 1. 同一个sentinel对同一个master两次failover之间的间隔时间。

# 2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。

# 3.当想要取消一个正在进行的failover所需要的时间。

# 4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了

# 默认三分钟

aa01366beeb040c3c38604269583afc0.png

如果只是自己测试,只需要配置前六项即可,如果是生产环境,则根据自己的需要进行配置文件的参数进行配置,后面的配置选项仅供参考。

哨兵配置文件参数项主从都差不多,前六项内容中,ip根据需求配置,端口每个哨兵必不能相同,日志文件可以统一都配一个,比我这里三个哨兵的配置文件都是1000.log,也可以不相同,每个哨兵配置一个都行。后面的dir配置后需要自己根据配置文件中的路径在虚拟机中创建文件夹。

当三个哨兵的配置文件都配置完成以后,我们只需要把哨兵启动即可,虽然我们配置了三个,但是我们也可以启动一个或者两个或者全部启动。

启动命令:/usr/local/redis/src/redis-server   /usr/local/redis-colony/redis-1000/sentinel.conf   --sentinel

c7e47d7b1e26d8c8ee4f7b479036682b.png

我这里选择3个全部启动,当我们进行查看的是,可以看到多了三个线程,分别是端口21000/21001/21002,证明之前配置的哨兵配置成功,现在进行测试,将默认的主节点挂掉,看是否从节点中能有一个节点切换为主节点。

d04d84100ac34ae4e7f9654256cafcfc.png

通过杀死线程的方式让1000端口挂掉,现在连接其他的从节点看其状态

6955eee77180c4dde42c2878e6986e1f.png

此时已连接到了1001端口,通过info可以看到1001端口的角色是从节点,目前的主节点端口是1002,状态是切换完成,现在连接到1002端口,看看该端口是否是主节点。

dedd2479ee6ad33d4645264712609f19.png

通过连接1002端口可以看出,当前1002端口的角色是主节点,并且有一个从节点,端口是1001。

到此,关于redis的哨兵模式配置成功,通过测试,当1000端口被启动时,会自动成为从节点,如果主节点挂掉,则会在1000端口与1001端口中随机选择一个节点切换为主节点,如果当前主节点下只有一个从节点,则该主节点挂掉,从节点切换为主节点;如果当前主节点下没有节点,主节点被挂掉,这个节点肯定就废了。

redis集群哨兵完成,在此记录学习编程的第N天,2020-10-22.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值