Redis 集群和 Sentinel 高可用Redis哨兵监听模式

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

1、Redis 主从复制

    Redis主从复制和MySQL主从复制的目的是一样的,都是为了数据的备份与减轻单台服务器的压力。

   通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,但是由于数据是存储在一台服务器上的,如果这台服务器出现故障,比如硬盘坏了,也会导致数据丢失。

    为了避免单点故障,我们需要将数据库复制多份部署在多台不同的服务器上,即使有一台服务器出现故障其他服务器依然可以继续提供服务。

    那么这就要求当一台服务器上的数据库更新后,可以自动将更新的数据同步到其他服务器上,这个该怎么实现呢?

    1.1、Redis 主从复制的实现方式一:

        1.1.1、Redis提供了复制(replication)功能来自动实现多台服务器的数据同步。

        1.1.2、从redis2.6开始,master默认用于写,slave默认用于读,向slave写数据会导致错误。

        1.1.3、修改配置文件 redis.conf,启动时,服务器读取配置文件,并自动成为指定服务器的从服务器:

在此就用一个Redis通过三个不同的配置文件实现实例化三个Redis数据库。

第一步:复制三分 redis.conf文件,并分别命名为:redis6380.conf、redis6381.conf、redis6382.conf;

第二步:执行 > redis638*.conf,清空复制出来的配置文件,然后分别按复制以下代码,粘贴到对应的配置文件中,此处注意,如果是在不同的主机上部署的redis,要实现集群,则还要更改 bind 参数,注释掉 bind,同时修改 protected-mode 参数的值为 no,否则不能实现 Redis 相互通讯,也不能实现哨兵监听。

master 的配置文件 redis6380.conf:

include /usr/local/redis-x.x.x/redis.conf
daemonize yes
port 6380
pidfile /var/run/redis_6380.pid
logfile 6380.log
dbfilename dump6380.rdb
slave1 的配置文件 redis6381.conf:

include /usr/local/redis-x.x.x/redis.conf
daemonize yes
port 6381
slaveof 127.0.0.1 6380
pidfile /var/run/redis_6381.pid
logfile 6381.log
dbfilename dump6381.rdb
slave2 的配置文件 redis6382.conf:
include /usr/local/redis-x.x.x/redis.conf
daemonize yes
port 6382
slaveof 127.0.0.1 6380
pidfile /var/run/redis_6382.pid
logfile 6382.log
dbfilename dump6382.rdb
配置解释:

include:表示包含redis的默认配置文件,然后下面再更改需要该表的属性就相当于重写或者覆盖默认的属性。

daemonize:改成yes,表示Redis有台运行,启动的时候可以不加 & 就是后台运行,如果不覆盖这个属性,则如果要后台运行启动需要在命令的后面加上 &;

port:表示端口号;

pidfile :pid文件,每个Redis实例需要不同的文件,如果不改,将会覆盖默认的文件;

logfile:日志文件,同上;

dbfilename:rdb文件,同上;

slaveof:从属于那个主机下的那个端口号所在的redis实例。

        1.1.4、分别启动 redis实例,执行命令:/usr/local/redis-x.x.x/src/redis-server /usr/local/redis-x.x.x/redis638*.conf;

        1.1.5、分别执行命令:/usr/local/reids-x.x.x/src/redis-cli -h <主机IP> -p <端口号>,进入命令行客户端;

        1.1.6、分别执行命令:info replication,查看当前实例的角色信息。

    此方式的主从复制已经成功。

    1.2、Redis主从复制方式二:

        此方式与第一种方式的不同点在于:配置文件内容都按 master 的配置文件内容修改,master 启动正常启动,slave 启动命令不同,命令:/usr/local/redis-x.x.x/src/redis-server /usr/local/redis-x.x.x/redis638*.conf --slaveof <主机IP> <端口号>;

主服务信息查看:

从服务信息查看:


2、Redis容灾处理:当Master服务出现故障,需手动将slave中的一个提升为master, 剩下的slave挂至新的master上(冷处理)

    2.1、将其中一台 slave 提升为 master,在客户端命令行执行命令:slaveof no one;

    2.2、将其他的 salve 挂在新的 master 上:slaveof <主机IP> <端口号>

3、主从复制总结:

    一个Master可以有多个Slave,Slave下线,只是读请求的处理性能下降;Master下线,写请求无法执行,其中一台Slave使用slaveof no one命令成为Master,其它Slave执行slaveof命令指向这个新的Master,从它这里同步数据以上过程是手动的,要实现自动化处理,这就需要Sentinel哨兵,实现故障转移Failover操作

4、Redis 高可用 Sentinel 哨兵监听模式:

    4.1、Sentinel高可用哨兵监听作用:这是redis官方提供的高可用方案,可以用它管理多个Redis服务实例。Redis 编译后(make 后)产生redis-sentinel程序文件,可以在一个redis中运行多个sentinel进程。Sentinel会不断检查Master和Slave是否正常,如果Sentinel挂了,就无法监控。所以需要多个哨兵,组成Sentinel网络,一般最小的 sentinel 网络由三个 sentinel 组成。监控同一个Master的Sentinel会自动连接,组成一个分布式的Sentinel网络,互相通信并交换彼此关于被监控服务器的信息。当一个Sentinel认为被监控的服务器已经下线时,它会向网络中的其它Sentinel进行确认,判断该服务器是否真的已经下线。如果下线的服务器为主服务器,那么Sentinel网络将对下线主服务器进行自动故障转移,通过将下线主服务器的某个从服务器提升为新的主服务器,并让其从服务器转移到新的主服务器下,以此来让系统重新回到上线的状态。当下线的旧主服务器重新上线,Sentinel会让它成为从,挂到新的主服务器下。

    4.2、Sentinel高可用哨兵监听模式的实现:

        4.2.1、复制三份 sentinel.conf,并重命名为 sentinel26380.conf、sentinel26381.conf、sentinel26382.conf;

        4.2.2、修改配置文件:

            a、修改 Sentinel 端口号:port 26379 改为:port 26380、port 26381、port 26382;

            b、修改监听的主服务器:sentinel monitor mymaster 127.0.0.1 6379 2 改为:sentinel monitor mymaster 127.0.0.1 6379 2;  格式:Sentinel monitor <自定义主服务器name> <masterIP> <masterPort><Quorum投票数>

        4.2.3、启动 sentinel,创建监听网络,执行三条命令:/usr/local/redis-4.0.8/src/redis-sentinel /usr/local/redis-4.0.8/sentinel26380.conf、/usr/local/redis-4.0.8/src/redis-sentinel /usr/local/redis-4.0.8/sentinel26381.conf、/usr/local/redis-4.0.8/src/redis-sentinel /usr/local/redis-4.0.8/sentinel26382.conf

        4.3.4、最后配上完整的 Redis 集群的图片信息:


Redis进程一览:


哨兵信息:

        4.2.5、查看sentinel的监听效果:直接停掉主服务,停掉方式:kill -9 <进程号>或者shutdown,然后查看哨兵sentinel的信息,如下图:


        4.2.6、将挂掉的服务器重新启动,哨兵会自动将新启动的服务器当作从服务器挂到现在的主服务下。

5、Redis高可用哨兵监听模式总结:

    哨兵监听一般都会组成一个分布式的sentinel网络,至少需要三台服务器。当被监听的主服务下线的时候,sentinel网络会进行故障转移,将其他的某一个从服务器提升为主服务器,将别的服务器挂在新的主服务器下,保证redis系统重新回到线上。当被监听的挂掉的服务器重新启动的时候,sentinel网络会将其当作从服务器也挂在当前的主服务器下。

猜你喜欢

转载自blog.csdn.net/weixin_39082031/article/details/79618145