redis之二 主从复制、sentinel集群搭建

版权声明:本文为博主原创文章,版权归博主所有。如转载,请注明出处! https://blog.csdn.net/javandroid/article/details/80854467

redis中文官网:
replication
sentinel

一、主从复制

通过redis的持久化功能,redis可以保证服务器重启也不会损失(或少量损失)数据。但数据保存在单台redis服务器上,如果这台服务器出现硬盘故障,则会导致数据丢失。
为了避免单点故障,可以将数据库复制多个副本保存在不同的服务器上,这样即使一台服务器故障,其它服务器仍可以提供服务。
redis提供了复制(replication)功能,可以在一台服务器数据更新后,自动将新的数据同步其它服务器上。
主从复制将服务器分为两类,一类是master,另一类是slave。主数据库可以读写,而从数据库通常是只读的,
这里写图片描述

主从复制的配置很简单,只需在从库的配置中加入”slave of 主库ip 主库端口”即可,主库无需进行任何配置。

服务器 端口 角色
127.0.0.1 6379 master
127.0.0.1 6380 slave
127.0.0.1 6381 slave
1.配置
【windows下请将redis.windows.conf文件复制一份改名为redis.conf后操作。】
#分别修改各自配置文件的端口
port 6379
port 6380
port 6381

#然后在两台slave库都加入以下配置
slave of 127.0.0.1 6379

#####这样就已经配置好了######

2.启动
#启动三台数据库
redis-server

#然后分别启动三台数据库的客户端
redis-cli 
redis-cli -p 6380
redis-cli -p 6381
#查看各库的信息。注意查看主库输出中role为master,两个从库为slave。
info replication

3.验证
#在主库上插入
set myname "hello kitty"

#三个库都获取,如果都能获取值"hello kitty",则说明配置成功
get myname

4.其它
#从库默认为是只读的,若对从库进行set,会发现报错:(error) READONLY You can't write against a read only slave.
#对应配置项为slave-read-only。修改该配置没意义,因为主库更新时进行数据同步会覆盖该值。
set myname "hello world"

二、sentinel集群

参考官网Redis 的 Sentinel 文档
主从复制模式中,当主库down掉后,可以手动将从库提升为主库来继续提供服务。但是手动的方式毕竟比较麻烦,需要人工介入,难以实现自动化。为此,redis在2.8版本中提供了哨兵工具来实现自动化的监控和故障恢复功能,哨兵是一个独立的进程。在生产环境下,为了高可用,哨兵通常也不会只有单节点,而是有多个。

需要再次强调的是,哨兵只是一个单独的进程。所以只需要在redis节点单独再启动一个哨兵进程即可。(有些博客演示时是把哨兵单独搞成个redis节点的形式,容易误导人)

服务器 端口 角色 是否部署哨兵 哨兵端口
127.0.0.1 6379 master 部署哨兵 26379
127.0.0.1 6380 slave 部署哨兵 26380
127.0.0.1 6381 slave 部署哨兵 26381
#说明
因为是在单台机器上演示,所以三个哨兵端口不能一样。
如果是三台服务器,则哨兵端口可以设为同一个,默认是26379

配置哨兵时,只需配置其监视主库即可,哨兵会自动发现主库对应的从库。

这里在前面主从复制的基础上,为每个redis节点都部署一个哨兵。
配置前首先确保按照前面主从复制的步骤配置好了主从复制模式。

1.开始配置

【linux下redis自带了sentinel.conf文件,直接配置下列项即可。
windows下请先创建一个sentinel.conf文件,然后在里面配置下列项】


#哨兵端口
port 26379
#监视一个主服务器(redis主节点), 这个主服务器的名称为mymaster,IP地址为127.0.0.1,端口为6379。 
#而将这个主服务器判断为失效至少需要2个Sentinel同意。只要同意Sentinel的数量不达标,自动故障迁移就不会执行。
sentinel monitor mymaster 127.0.0.1 6379 2
#
sentinel down-after-milliseconds mymaster 60000
#
sentinel failover-timeout mymaster 180000
#
sentinel parallel-syncs mymaster 1

2.启动redis集群

#启动三台redis
redis-server

3.依次启动三个哨兵
使用以下命令依次启动26379,26380,26381三个哨兵,注意观察输出

#下面依次启动三个哨兵进程(windows下没有redis-sentinel命令,不能用后者启动) 
  redis-server sentinel.conf --sentinel (Linux或Windows)
或redis-sentinel sentinel.conf          (仅Linux)

我这里仅观察26379哨兵的界面输出。其它哨兵的情况类似。
这里写图片描述
这里写图片描述
这里写图片描述
从输出界面的变化可以发现,哨兵启动后可以自动发现隶属于其监视的master节点下的slave节点,同时哨兵间也可以相互发现。

我们还可以使用info命令查看一下哨兵的信息

#连接26379哨兵
redis-cli -p 26379
#查看sentinel信息
info sentinel

到这里,哨兵集群的配置就算成功了。

扫描二维码关注公众号,回复: 4133193 查看本文章

4.演示故障迁移
实验目的:干掉master节点,观察哨兵选举将slave节点提升为master节点

windows下直接关闭master节点的命令行界面

Linux下使用kill杀进程
#查看master节点的pid
ps -ef|grep redis
#kill掉进程 
kill -9 [上面的pid]

然后等待一段时间(默认为,由sentinel.conf中的配置项决定),观察其它的哨兵命令行界面窗口。
这里写图片描述
最终,我们发现哨兵通过选举将6381这台slave节点提升为了master节点。
具体的选举过程和更多内容可以参考官方文档Redis 的 Sentinel 文档


猜你喜欢

转载自blog.csdn.net/javandroid/article/details/80854467