redis 主从模式以及哨兵模式

一、redis主从模式(master,slave)

           1.作用

                1)防止单点故障(一台redis宕机,整个redis不能用)

                2)可以进行读写分离(一台redis主机进行写操作,其他机子进行读操作),提高使用效率

                1.2实现

                 1)规划图

                        主从规划图    redis 主从模式以及哨兵模式_第1张图片   2)具体配置:

            克隆redis,修改IP,修改主机名称,使用xshell连接

            修改主机名称:

                  vim /etc/hostname

                  修改网卡:

                  vim /etc/sysconfig/network-scripts/ifcfg-ens33

                  :15 修改IP地址 192.168.XXX.31    (第15行)

                  重新启动:

                      reboot

                   使用xshell进行连接

            主从配置   

                   在redis操作

                   拷贝:cp /usr/redis/redis-5.0.5/redis.conf  /usr/redis/bin/master.conf

                   vim /usr/redis/bin/master.conf

 :69 bind 192.168.206.41 绑定自己的IPredis 主从模式以及哨兵模式_第2张图片

 :92 port 6666 实例端口号

 

 :136 daemonize yes 守护方式运行

                在 redis2操作:

                cp /usr/redis/redis-5.0.5/redis.conf  /usr/redis/bin/slave1.conf

                vim /usr/redis/bin/slave1.conf

:69 bind 192.168.206.42 绑定自己的IP

redis 主从模式以及哨兵模式_第3张图片

 

:92 port 7777 实例端口号

 

:136 daemonize yes 守护方式运行

 

slaveof 192.168.206.41 6666 在文件末尾配置当前实例是谁的从节点

redis 主从模式以及哨兵模式_第4张图片

 

                在 redis3操作:

                 cp /usr/redis/redis-5.0.5/redis.conf  /usr/redis/bin/slave2.conf

                 vim /usr/redis/bin/slave2.conf

:69 bind 192.168.206.43 绑定自己的IP

 

:92 port 8888 实例端口号

 

:136 daemonize yes 守护方式运行

 

slaveof 192.168.206.41 6666 在文件末尾配置当前实例是谁的从节点

 redis 主从模式以及哨兵模式_第5张图片

 

3)启动测试:

        redis1启动:

        /usr/redis/bin/redis-server  /usr/redis/bin/master.conf

        /usr/redis/bin/redis-cli -h 192.168.206.41 -p 6666

        set bbb 222 成功

         redis2启动:

        /usr/redis/bin/redis-server  /usr/redis/bin/slave1.conf

        /usr/redis/bin/redis-cli -h 192.168.206.42 -p 7777

        set bbb 222 错误 slave不可以写

        redis3启动:

        /usr/redis/bin/redis-server  /usr/redis/bin/slave2.conf

        /usr/redis/bin/redis-cli -h 192.168.206.43 -p 8888

        set bbb 222 错误 slave不可以写

        在 all session 输入 keys * 发现 三台 redis上都有bbb 说明主从同步成功

        info 显示当前redis实例运行情况

        info replication 显示主从角色信息

        info keyspace 显示key分布情况

1.2 原理

redis 主从模式以及哨兵模式_第6张图片

  • 从服务器连接主服务器,发送 PSYNC(同步) 命令;
  • 主服务器接收到 PSYNC 命名后,开始fork子进程执行 BGSAVE 命令生成 RDB 文件并使用缓冲区记录此后执行的所有写命令;
  • 主服务器 BGSAVE 执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
  • 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
  • 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
  • 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;

  1.2.1 特点

        master /slave 角色

        master/slave 数据是同步

        降低了master读压力 由从机分担

  1.2.2 缺点

        无法真正高可用(master一旦宕机,整个集群就无法进行写操作)

        所有的写操作都是master进行,写操作无法负载均衡

2 redis 哨兵模式(sentinel)

        2.1 作用

                哨兵模式主要用来解决主从模式的无法高可用的缺点,当主机master宕机时,没有写节点的问题。当master宕机后,会从slave中选举一台做主节点,从而达到高可用的目的。

        2.2 实现

                以主从为基础

        1) 规划图redis 主从模式以及哨兵模式_第7张图片

 

 2) 具体配置:

 在3台redis 操作:

cp /usr/redis/redis-5.0.5/sentinel.conf  /usr/redis/bin/sentinel1.conf

cp /usr/redis/redis-5.0.5/sentinel.conf  /usr/redis/bin/sentinel2.conf

cp /usr/redis/redis-5.0.5/sentinel.conf  /usr/redis/bin/sentinel3.conf

修改:

vim /usr/redis/bin/sentinel1.conf

vim /usr/redis/bin/sentinel2.conf

vim /usr/redis/bin/sentinel3.conf

#关闭保护模式 当开启保护模式的时候默认只能本机连

protected-mode no #17

 

#哨兵端口

port 26666 #21 port 27777 port 28888   三个分别是 26666 27777 28888

 

#添加守护进程模式

daemonize yes #26

 

#添加指明日志文件名

logfile "./temp.log" #36

 

#修改工作目录

dir "/tmp" #65

 

#哨兵监控的master名称可以随便起,ip和端口固定 quorum 当哨兵是集群时,有多少个哨兵认为master失效(客观下线),master才算失效。 防止脑裂 配置计算最好是 哨兵总数量/2+1

sentinel monitor mymaster 192.168.206.41 6666 2 #84

 

#设置master和slaves验证密码

sentinel auth-pass mymaster 123456 #103

#master(默认30秒)不能使用后标记为主观down状态。

sentinel down-after-milliseconds mymaster 30000 #113

3) 启动哨兵,测试:

哨兵是以主从为基础,主从一定要先启动,并且保证主从正常

分别在3台服务器上运行

/usr/redis/bin/redis-sentinel  /usr/redis/bin/sentinel1.conf

/usr/redis/bin/redis-sentinel  /usr/redis/bin/sentinel2.conf

/usr/redis/bin/redis-sentinel  /usr/redis/bin/sentinel3.conf

查看哨兵进程:

在allsession中输入:

ps -ef |grep redis|grep -v grep

 

 

 

演示自动故障切换:

a.使用客户端连接3台服务器:

/usr/redis/bin/redis-cli  -h  192.168.170.31 -p 6666

/usr/redis/bin/redis-cli  -h  192.168.170.32 -p 7777

/usr/redis/bin/redis-cli  -h  192.168.170.33 -p 8888

b.在allsession中输入:

info replication 显示3台主机的主从状态 发现redis1是master 2和3是slave

redis 主从模式以及哨兵模式_第8张图片

 redis 主从模式以及哨兵模式_第9张图片

 redis 主从模式以及哨兵模式_第10张图片

 

c.让redis1的实例宕机:

shutdown 关闭服务器并保存数据

 ps -ef |grep redis|grep -v grep

等大约30秒 其中两个哨兵都在30连不上,分别认为是主观下线,当3个哨兵相互沟通后,就确定客观下线。

d. 在allsession中输入:

info replication redis1宕机 发现redis3变为master redis2变为slave

在新的master 执行写命令:

192.168.206.43:8888> set aaa 111

OK

192.168.206.43:8888> set bbb 222

OK

192.168.206.43:8888> set ccc 333

redis 主从模式以及哨兵模式_第11张图片

 

e. 让redis1恢复正常:

/usr/redis/bin/redis-server /usr/redis/bin/master.conf

/usr/redis/bin/redis-cli  -h  192.168.206.41 -p 6666

在allsession中输入:

info replication 发现redis1 自动变为redis3从节点

keys * 发现redis1在宕机期间 redis3的写入内容,依然可以同步(遵循了主从同步原理)

redis 主从模式以及哨兵模式_第12张图片

 

停止哨兵可以使用kill -9 命令

3 原理

redis 主从模式以及哨兵模式_第13张图片

 redis 主从模式以及哨兵模式_第14张图片

4 特点

1、保证高可用(除了切换主从的一瞬间,集群是高可用)

2、哨兵监控各个节点

3、自动故障迁移

4.1 缺点

     主从模式,切换需要时间,切换期间,不能对外提供服务

没有解决 master 写的压力

 

你可能感兴趣的:(Redis,redis,数据库,java)