Redis主从复制和哨兵机制以及持久化

1、redis主从复制

    1.1、主从复制

        通过配置两台(或多台)数据库的主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。

    1.2、redis主从复制

        redis 支持 master-slave(主从)模式,redisserver 可以设置为另一个 redis server 的主机(从机),从机定期从主机拿数据。特殊的,一个从机同样可以设置为一个 redis server 的主机,master以写为主,slaver以读为主。

        

    1.3、redis主从复制配置(配从不配主)

        1、启动三台装有redis的centos
        2、确定主从关系,将那两台作为从

        3、用vim编辑从服务器的redis.conf(自己的启动配置文件)

            命令 vim /usr/local/redis/etc/redis.conf

            3.1 slaveof 192.168.0.100 6379    格式是 slaveof  主机ip  主机端口

            3.2 #bind127.0.0.1    注销绑定,可以允许所有的ip连接登录到这台redis服务上

            3.3 protected-mode no    关闭保护模式

        注意:还需要开放6379端口,centos7 默认使用的防火墙是firewall即使关闭防火墙也还是连不上端口

            1、systemctl status firewalld 查看防火墙状态

            2、systemctl start firewalld 启动防火墙

            3、firewall-cmd --zone=public --add-port=6379/tcp --permanent 永久开放6379端口

            4、firewall-cmd --reload 更新防火墙规则

            5、systemctl restart firewalld.service 重启防火墙

            6、firewall-cmd --query-port=6379/tcp 查询是否开放了6379端口

            7、systemctl stop firewalld 关闭防火墙

        4、检查从机是否能访问主机的6379端口 

            命令 telnet 192.168.0.104 6379 测试端口

            使用 Ctrl + ] 退出telnet连接 quit退出

    1.4、redis主从复制检测

        1、分别启动三台centos
        2、分别启动redis
            命令 /usr/local/redis/bin/redis-server  /usr/local/redis/etc/redis.conf
        3、分别进入进入cli端

            命令 /usr/local/redis/bin/redis-cli

        4、分别执行在cli端执行info命令

        5、观察结果

            master端

                

            slave1端

                

            slave2端

                

    1.5、redis主从复制同步检测

        在1.4的基础上,在master端写入一些数据比如 set name z3  set age 30
        在slave端读取数据观察是否能读取到(是否完成同步)

            master端

                 

            slave1

                 

            slave2

                  

    1.6、redis主从复制的特点

        1、master可以有多台slave

        2、除了多个slave连到相同master外,slave也可以连接到其它slave形成图状结构

        3、主从复制不会阻塞master,也就是说当一个或多个slave与master连接进行复制时,master可以继续处理客户端发来的请求

         4、主从复制可以用来提高系统的伸缩性,我们可以用多个slave专门负责客户端的读请求,可以做数据冗余

2、redis哨兵机制

    2.1、redis哨兵机制

        有了主从复制的实现以后,如果我们想对主从服务器进行监控,那么在redis2.6以后提供了一个"哨兵"的机制。在2.6版本中的哨兵为1.0版本,并不稳定,会出现各种各样的问题,在2.8版本以后的哨兵功能才稳定起来。

        顾名思义,哨兵的含义就是监控Redis系统的运行状态。可以启动多个哨兵,去监控Redis数据库的运行状态。其主要功能有两点:

            1、监控主数据库和从数据库是否正常运行。

            2、主数据库出现故障时,可以自动将从数据库转换为主数据库,实现自动切换。

            哨兵机制模型

                

    2.2、哨兵机制的实现步骤

        在其中的一个slave配置哨兵(也可以配置在主服务器)

        注意:因为原来的slave1、slave2会被自动选举为主服务器所以在它的配置文件中要配置(#bind127.0.0.1 protected-mode no 以及开放6379端口),最好使用telnet +ip + 端口 测试一下。

           1、copy 文件/usr/local/redis/redis-4.0.8/sentinel.conf(自己的redis的sentinel.conf文件) 到 /usr/local/redis/etc路径中命令 cp  /usr/local/redis/redis-4.0.8/sentinel.conf  /usr/local/redis/etc/

           2、修改 sentinel.conf 文件  vim/usr/local/redis/etc/sentinel.conf

                1) dir "/usr/local/redis/etc"    数据存放目录

                2) protected-mode no    关闭保护模式

                3) sentinel monitor mymaster192.168.43.201 6379 1    格式是master 的名称、 ip 、地址、端口号,以及失败时选出master的投票数量

                4) sentineldown-after-milliseconds mymaster5000    超时5000毫秒为宕机

                5) sentinelparallel-syncsmymaster 2     从服务器的个数

            3、启动sentinel哨兵  命令/usr/local/redis/bin/redis-server /usr/local/redis/etc/sentinel.conf --sentinel&


            4、查看哨兵的信息 命令 /usr/local/redis/bin/redis-cli -h 192.168.43.64 -p 26379 info Sentinel


            5、关闭主服务器,查看集群信息 命令 /usr/local/redis/bin/redis-cli shutdown


        可以看出当主服务器192.168.43.201 宕机之后选举192.168.43.64 为新的主服务器

            6、查看剩余的两个redis服务器的信息

            192.168.43.64端

                

                可以看出192.168.43.64已经自动变为主服务器了

            192.168.43.106端

                

                可以看出它的主服务变成了192.168.43.64
            7、再次启动主服务器并查看信息
                
                可以看出它变成了从服务器,并且它的主服务器是192.168.43.64

3、redis的持久化机制

    Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘里面来保证数据的持久化。Redis支持两种持久化的实现,snapshotting (rdb)的持久化机制(快照)、append-only file(缩写aof)的持久化机制,可以通过启动配置文件(redis.conf)进行指定,默认采用rdb

    3.1、snapshotting (rdb)的持久化机制

        Snapshotting机制,将内存中的数据以快照的方式写入到二进制文件中。默认的文件名称为dump.rdb.可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个写入就自动做快照。

        注意配置dir "/usr/local/redis/etc/" 指定dump.rdb文件的存放路径

        在配置文件redis.cof里面,snapshotting的默认配置为:

            save 900 1               900秒内执行1次写操作,自动做快照。

            save 300 10             300秒内执行10次写操作,自动做快照。

            save 60 10000         60秒内执行10000次写操作,自动做快照。

    3.2、append-only file(aof)的持久化机制

        append-only file方式,有点类似Oracle的日志文件。 由于快照方式是经过一定的时间间隔做一次快照,所以可能会在redis发生意外的情况下丢失最后一次快照后的所有修改的数据。aof 比快照方式有更好的持久化性能,是因为由于在使用aof 的时候,redis会将每一个收到的写命令都通过write 函数追加到文件里面,当redis重新启动的时候会重新执行文件中保存的写命令来在内存里面重建数据库的内容。默认的文件名为appendonly.aof

        注意配置dir "/usr/local/redis/etc/" 指定appendonly.aof文件的存放路径

        aof 常见的设置:

            appendonly yes         启动aof 的持久化机制,同时快照方式的持久化机制会失去作用 

            appendfsync always     收到写命令就立即持久化到磁盘,效率最慢,但是保证完全的持久化 (通常采用)

            appendfsync everysec   每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中 

            appendfsync no         完全依赖os 性能最好,持久化没有保证 

        进行检测

            配置完毕之后启动redis服务,会在/usr/local/redis/etc/目录下出现appendonly.aof文件,因为没有做任何操作所以是空白的

            进行一些操作 set name z3 set age 30 set sex nan

                

            打开appendonly.aof文件进行查看 命令 vim /usr/local/redis/etc/appendonly.aof 

                

猜你喜欢

转载自blog.csdn.net/strong997/article/details/80170520