redis哨兵&codis

目录

1. 什么是哨兵模式

2. 哨兵集群

3. Redis阐述容灾机制

4. Redis哨兵原理

5. Redis-sentinel集群

6. redis主流集群方案

7. codis

8. redis集群之sentinel

1. 什么是哨兵模式

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例

2. Redis哨兵集群(功能,作用)

  1. 监控(Monitoring):哨兵(sentinel)会不断地检查你的master和slave是否运作正常

  2. 提醒(Notification):当被监控的某个redis出问题时,哨兵可以通过API向管理员或者其他应用程序发送通知

  3. 自动故障迁移(Automatic failover):当一个master不能正常工作时,哨兵(sentinel)会开始一次自动故障迁移操作,它会将失效master的其中一个slave升级为新的master

3. Redis重点阐述容灾机制

当某个master服务下线时,所有的slave将无法同步数据,这对于redis集群就是灾难性的,此时哨兵自动将该master下的某个slave服务升级为master服务器替代已下线的master服务继续处理请求,这时灾难的局面就被扭转了回来,这就是容灾机制

4. Redis哨兵-原理

5. Redis-sentinel集群

1、sentinel作用

1. 当用Redis做主从方案时,假如master宕机,Redis本身无法自动进行主备切换

2. 而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。

2、sentinel原理

1. sentinel负责持续监控主节点的健康,当主节挂掉时,自动选择一个最优的从节点切换成主节点

2. 从节点来连接集群时会首先连接sentinel,通过sentinel来查询主节点的地址

3. 当主节点发生故障时,sentinel会将最新的主节点地址告诉客户端,可以实现无需重启自动切换redis

3、sentinel支持集群

1. 只使用单个sentinel进程来监控redis集群是不可靠的,当sentinel进程宕掉后sentinel本身也有单点问题

2. 如果有多个sentinel,redis的客户端可以随意地连接任意一个sentinel来获得关于redis集群中的信息。

4、sentinel版本

1. Sentinel当前稳定版本称为Sentinel 2,Redis2.8和Redis3.0附带稳定的哨兵版本

2. 安装完redis-3.2.8后,redis-3.2.8/src/redis-sentinel启动程序 redis-3.2.8/sentinel.conf是配置文件。

5、运行sentinel两种方式(效果相同)

  • 法1:redis-sentinel /path/to/sentinel.conf
  • 法2:redis-server /path/to/sentinel.conf --sentinel
1. 以上两种方式,都必须指定一个sentinel的配置文件sentinel.conf,如果不指定,将无法启动sentinel。

2. sentinel默认监听26379端口,所以运行前必须确定该端口没有被别的进程占用。

6、sentinel.conf配置文件说明

1. 配置文件只需要配置master的信息就好啦,不用配置slave的信息,因为slave能够被自动检测到

2. 需要注意的是,配置文件在sentinel运行期间是会被动态修改的,例如当发生主备切换时候,配置文件中的master会被修改为另外一个slave。

3. 这样,之后sentinel如果重启时,就可以根据这个配置来恢复其之前所监控的redis集群的状态。

 

sentinel.conf配置文件注释

 1 '''1、sentinel monitor mymaster 127.0.0.1 6379 2'''
 2 #1)sentinel监控的master的名字叫做mymaster,地址为127.0.0.1:6379
 3 #2)当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了
 4 
 5 '''2、sentinel down-after-milliseconds mymaster 60000'''
 6 #1)sentinel会向master发送心跳PING来确认master是否存活,如果master在60000毫秒内不回应PONG 
 7 #2)那么这个sentinel会单方面地认为这个master已经不可用了
 8 
 9 '''3、sentinel failover-timeout mymaster 180000'''
10 #1)如果sentinel A推荐sentinel B去执行failover,B会等待一段时间后,自行再次去对同一个master执行failover,
11 #2)这个等待的时间是通过failover-timeout配置项去配置的。
12 #3)从这个规则可以看出,sentinel集群中的sentinel不会再同一时刻并发去failover同一个master,
13 #4)第一个进行failover的sentinel如果失败了,另外一个将会在一定时间内进行重新进行failover,以此类推。
14 
15 '''4、sentinel parallel-syncs mymaster 1'''
16 #1)在发生failover主备切换时,这个选项指定了最多可以有多少个slave同时对新的master进行同步
17 #2)如果这个数字越大,就意味着越多的slave因为replication而不可用,这个数字越小,完成failover所需的时间就越长。
18 #3)可以通过将这个值设为 1 来保证每次只有一个slave处于不能处理命令请求的状态。
View Code

 

7、配置传播

1. 一旦一个sentinel成功地对一个master进行了failover,它将会把关于master的最新配置通过广播形式通知其它sentinel,其它的sentinel则更新对应master的配置。

2. 一个faiover要想被成功实行,sentinel必须能够向选为master的slave发送SLAVE OF NO ONE命令,然后能够通过INFO命令看到新master的配置信息。

3. 当将一个slave选举为master并发送SLAVE OF NO ONE`后,即使其它的slave还没针对新master重新配置自己,failover也被认为是成功了的。

 因为每一个配置都有一个版本号,所以以版本号最大的那个为标准:

 1 1)假设有一个名为mymaster的地址为192.168.1.50:6379 2 
 3 2)一开始,集群中所有的sentinel都知道这个地址,于是为mymaster的配置打上版本号1。
 4 
 5 3)一段时候后mymaster死了,有一个sentinel被授权用版本号2对其进行failover。
 6 
 7 4)如果failover成功了,假设地址改为了192.168.1.50:9000,此时配置的版本号为2
 8 
 9 5)进行failover的sentinel会将新配置广播给其他的sentinel,发现新配置的版本号为2时,版本号变大了,
10      说明配置更新了,于是就会采用最新的版本号为2的配置。

 生产环境使用docker-compose来搭建

 代码演示如下:

   git clone https://gitee.com/QiHanXiBei/redis_sentinel.git

  cd /home

  cd redis_sentinel/

  docker-compose up --force-recreate #启动 由于我们安装redis时设置了开机自启,这里我们需要kill-9杀死进程
  

    在master中连接redis------------------> redis-cli

    salve1中使用6380连接redis---------> redis-cli -p 6380

    salve2中使用6381连接redis---------> redis-cli -p 6381

数据同步:

    master存入数据-------------------------> set 123 123

    salve1和salve2获取数据-------------------------> get 123

    此时我们模拟主机宕机------------------> docker stop redis_sentinel_master_1

    初始主机中我们将redis退出重连就会发现他已经连不上了

     而从机中会推举一个成为主机,我们使用info查看 

同样还可以再进行测试,在这个从–>主(slave2)中存数据----> set 123 456

另外的从–>从(slave1)取数据—> get 123

我们可以看到数据还是同步的

6. Redis主流集群方案

  1)redis cluster集群方案

  2)master/slave主从方案

  3)哨兵模式来进行主从替换以及故障恢复

7. codis

  • 什么是codis?

    1. codis是redis集群解决方案之一,codis是GO语言开发的代理中间件

    2. 当客户端向codis发送指令时,codis负责将指令转发给后面的redis实例来执行,并将返回结果转发给客户端

  • 为什么会出现codis?

    1. 在大数据高并发场景下,单个redis实例往往会无法应对

    2. 首先redis内存不易过大,内存太大会导致rdb文件过大,导致主从同步时间过长

    3. 其次在CPU利用率中上,单个redis实例只能利用单核,数据量太大,压力就会特别大

  • codis部署方案

    1. 单个codis代理支撑的QPS比较有限,通过启动多个codis代理可以显著增加整体QPS

    2. 多codis还能起到容灾功能,挂掉一个codis代理还有很多codis代理可以继续服务
    

  • codis分片原理

    1. codis负责将特定key转发到特定redis实例,codis默认将所有key划分为1024个槽位

    2. 首先会对客户端传来的key进行crc32计算hash值,然后将hash后的整数值对1024进行取模,这个余数就是对应的key槽位

    3. 每个槽位都会唯一映射到后面的多个redis实例之一,codis会在内存中维护槽位和redis实例的映射关系

    4. 这样有了上面key对应的槽位,那么它应该转发到那个redis实例就很明确了

    5. 槽位数量默认是1024,如果集群中节点较多,建议将这个数值大一些,比如2048,4096

  • 不同codis槽位如何同步

    1. 如果codis槽位值存在内存中,那么不同的codis实例间的槽位关系得不到同步

    2. 所以codis还需要一个分布式配置存储的数据库专门来持久化槽位关系

    3. codis将槽位关系存储在zookeeper中,并且提供一个dashboard可以来观察和修改槽位关系

 

8. redis集群之sentinel

1. 使用docker-compose部署sentinel

docker-compose部署:https://www.cnblogs.com/boshen-hzb/p/10471665.html

附属篇

1、下载redis的相关镜像

docker pull registry.cn-hangzhou.aliyuncs.com/boshen-ns/redis-sentinel:3
docker pull registry.cn-hangzhou.aliyuncs.com/boshen-ns/redis:3

 

 2、创建redis的data目录,主要是为了持久化保存redis的数据

mkdir -p /home/redis-sentinel-cluster/data/master
mkdir -p /home/redis-sentinel-cluster/data/slave1
mkdir -p /home/redis-sentinel-cluster/data/slave2
mkdir -p /home/redis-sentinel-cluster/data/sentinel-1
mkdir -p /home/redis-sentinel-cluster/data/sentinel-2

3、创建2个哨兵的配置文件 (集群启动后会自动更新该配置文件 )

/home/redis-sentinel-cluster/sentinel-1.conf
port 26379

dir "/data"
sentinel monitor mymaster 172.16.1.11 16379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 5000
sentinel parallel-syncs mymaster 1
/home/redis-sentinel-cluster/sentinel-2.conf
port 26380

dir "/data"
sentinel monitor mymaster 172.16.1.11 16379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 5000
sentinel parallel-syncs mymaster 1

1)monitor     指的是初始化的监控主切点,ip和端口,后面的数字2代表,必须2个sentinel才能判断主节点是否失败

2)down-after-milliseconds   指的是超过5000秒,且没有回复,则判定主节点不可达

3)failover-timeout    指的是故障转移时间

4)parallel-syncs   指的是故障转移到新的主节点时,从节点的复制节点数量

4、创建 /home/redis-sentinel-cluster/docker-compose.yml

version: '2.1'
services:
  master:
    image: registry.cn-hangzhou.aliyuncs.com/boshen-ns/redis:3
    container_name: master
    restart: always
    network_mode: "host"
    volumes:
      - ./data/master:/data
    command: redis-server --port 16379
  slave1:
    image: registry.cn-hangzhou.aliyuncs.com/boshen-ns/redis:3
    container_name: slave1
    restart: always
    network_mode: "host"
    volumes:
      - ./data/slave1:/data
    command: redis-server --port 16380 --slaveof 172.16.1.11 16379
  slave2:
    image: registry.cn-hangzhou.aliyuncs.com/boshen-ns/redis:3
    container_name: slave2
    restart: always
    network_mode: "host"
    volumes:
      - ./data/slave2:/data
    command: redis-server --port 16381 --slaveof 172.16.1.11 16379
  sentinel-1:
    image: registry.cn-hangzhou.aliyuncs.com/boshen-ns/redis-sentinel:3
    container_name: sentinel-1
    restart: always
    network_mode: "host"
    volumes:
      - ./sentinel-1.conf:/etc/redis/sentinel.conf
      - ./data/sentinel-1:/data
  sentinel-2:
    image: registry.cn-hangzhou.aliyuncs.com/boshen-ns/redis-sentinel:3
    container_name: sentinel-2
    restart: always
    network_mode: "host"
    volumes:
      - ./sentinel-2.conf:/etc/redis/sentinel.conf
      - ./data/sentinel-2:/data
docker-compose.yml

5、启动redis集群

cd /home/redis-sentinel-cluster
docker-compose up -d

 

 6、验证集群

1)连接基本一个sentinel

docker exec -it sentinel-1 redis-cli -h 172.16.1.11 -p 26379

2) 查看基本信息

172.16.1.11:26379> info
# Server
redis_version:3.2.12
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:b0df607ad3315254
redis_mode:sentinel
os:Linux 3.10.0-693.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:6.3.0
process_id:1
run_id:ff490c3e11d3b9f8c4ca6fd2456c4d2cffa20bdc
tcp_port:26379
uptime_in_seconds:4022
uptime_in_days:0
hz:15
lru_clock:8184650
executable:/data/redis-server
config_file:/etc/redis/sentinel.conf

# Clients
connected_clients:2
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# CPU
used_cpu_sys:4.11
used_cpu_user:3.45
used_cpu_sys_children:0.01
used_cpu_user_children:0.00

# Stats
total_connections_received:3
total_commands_processed:5826
instantaneous_ops_per_sec:1
total_net_input_bytes:323533
total_net_output_bytes:36329
instantaneous_input_kbps:0.13
instantaneous_output_kbps:0.01
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0

# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.16.1.11:16379,slaves=2,sentinels=2
info

3)查看master

172.16.1.11:26379> sentinel masters
1)  1) "name"
    2) "mymaster"
    3) "ip"
    4) "172.16.1.11"
    5) "port"
    6) "16379"
    7) "runid"
    8) "657bd7c958c8a2267efd5d0148eac74db6dac780"
    9) "flags"
   10) "master"
   11) "link-pending-commands"
   12) "0"
   13) "link-refcount"
   14) "1"
   15) "last-ping-sent"
   16) "0"
   17) "last-ok-ping-reply"
   18) "1025"
   19) "last-ping-reply"
   20) "1025"
   21) "down-after-milliseconds"
   22) "5000"
   23) "info-refresh"
   24) "4163"
   25) "role-reported"
   26) "master"
   27) "role-reported-time"
   28) "4209375"
   29) "config-epoch"
   30) "0"
   31) "num-slaves"
   32) "2"
   33) "num-other-sentinels"
   34) "1"
   35) "quorum"
   36) "2"
   37) "failover-timeout"
   38) "5000"
   39) "parallel-syncs"
   40) "1"
master

4)查看slaves

172.16.1.11:26379> sentinel slaves mymaster
1)  1) "name"
    2) "172.16.1.11:16380"
    3) "ip"
    4) "172.16.1.11"
    5) "port"
    6) "16380"
    7) "runid"
    8) "07c0f9d673db676594da6ec38f12d9e7bbea32b2"
    9) "flags"
   10) "slave"
   11) "link-pending-commands"
   12) "0"
   13) "link-refcount"
   14) "1"
   15) "last-ping-sent"
   16) "0"
   17) "last-ok-ping-reply"
   18) "759"
   19) "last-ping-reply"
   20) "759"
   21) "down-after-milliseconds"
   22) "5000"
   23) "info-refresh"
   24) "4278"
   25) "role-reported"
   26) "slave"
   27) "role-reported-time"
   28) "4319936"
   29) "master-link-down-time"
   30) "0"
   31) "master-link-status"
   32) "ok"
   33) "master-host"
   34) "172.16.1.11"
   35) "master-port"
   36) "16379"
   37) "slave-priority"
   38) "100"
   39) "slave-repl-offset"
   40) "584317"
2)  1) "name"
    2) "172.16.1.11:16381"
    3) "ip"
    4) "172.16.1.11"
    5) "port"
    6) "16381"
    7) "runid"
    8) "6a1038dc76a386fe4137fe22f1dca7286f0774c6"
    9) "flags"
   10) "slave"
   11) "link-pending-commands"
   12) "0"
   13) "link-refcount"
   14) "1"
   15) "last-ping-sent"
   16) "0"
   17) "last-ok-ping-reply"
   18) "759"
   19) "last-ping-reply"
   20) "759"
   21) "down-after-milliseconds"
   22) "5000"
   23) "info-refresh"
   24) "4278"
   25) "role-reported"
   26) "slave"
   27) "role-reported-time"
   28) "4319936"
   29) "master-link-down-time"
   30) "0"
   31) "master-link-status"
   32) "ok"
   33) "master-host"
   34) "172.16.1.11"
   35) "master-port"
   36) "16379"
   37) "slave-priority"
   38) "100"
   39) "slave-repl-offset"
   40) "584317"
slaves

5)连接master,并存入一个key和value

[root@localhost redis-sentinel-cluster]# docker exec -it master redis-cli -h 172.16.1.11 -p 16379
172.16.1.11:16379> set boshen_name boshenboshen
OK

6)连接slave1,获取boshen_name的值

[root@localhost redis-sentinel-cluster]# 
[root@localhost redis-sentinel-cluster]# docker exec -it slave1 redis-cli -h 172.16.1.11 -p 16380
172.16.1.11:16380> get boshen_name
"boshenboshen"
172.16.1.11:16380> 

 

 由报错可知,从节点,不能写数据

7) 停掉master容器,查看是否能切换主节点

pass

 

普通部署:https://www.cnblogs.com/kevingrace/p/9004460.html

2. 使用docker-compose部署

redis-sentinel                        # 项目根路径
    ├── docker-compose.yml            # docker-compose文件
    └── sentinel                      # 存放初始化sentinel容器的相关文件
        ├── Dockerfile                # sentinel构建镜像文件
        ├── sentinel.conf             # sentinel配置文件
        └── sentinel-entrypoint.sh    # sentinel.sh启动脚本
目录结构
master:
  image: redis
  command: redis-server --port 6379 --requirepass 123456 --masterauth 123456
  ports:
    - "6379:6379"
slave1:
  image: redis
  command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456
  links:
    - master:redis-master
  ports:
    - "6380:6379"
slave2:
  image: redis
  command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456
  links:
    - master:redis-master
  ports:
    - "6381:6379"
sentinel1:
  build: sentinel
  environment:
    - SENTINEL_DOWN_AFTER=5000
    - SENTINEL_FAILOVER=5000    
  links:
    - master:redis-master
    - slave1
  ports:
    - "26379:26379"
sentinel2:
  build: sentinel
  environment:
    - SENTINEL_DOWN_AFTER=5000
    - SENTINEL_FAILOVER=5000    
  links:
    - master:redis-master
    - slave2
  ports:
    - "26380:26379"
redis-sentinel/docker-compose.yml
FROM redis

EXPOSE 26379
ADD sentinel.conf /etc/redis/sentinel.conf
RUN chown redis:redis /etc/redis/sentinel.conf
COPY sentinel-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/sentinel-entrypoint.sh
ENTRYPOINT ["sentinel-entrypoint.sh"]
redis-sentinel/sentinel/Dockerfile
port 26379
protected-mode no
sentinel monitor mymaster redis-master 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 5000
redis-sentinel/sentinel/sentinel.conf
#!/bin/sh

sed -i "s/$SENTINEL_QUORUM/$SENTINEL_QUORUM/g" /etc/redis/sentinel.conf
sed -i "s/$SENTINEL_DOWN_AFTER/$SENTINEL_DOWN_AFTER/g" /etc/redis/sentinel.conf
sed -i "s/$SENTINEL_FAILOVER/$SENTINEL_FAILOVER/g" /etc/redis/sentinel.conf

exec docker-entrypoint.sh redis-server /etc/redis/sentinel.conf --sentinel
sentinel-entrypoint.sh
[root@linux-node4 redis-sentinel]# cd redis-sentinel/                   # 进入项目根路径
[root@linux-node4 redis-sentinel]# docker-compose up --force-recreate   # 使用docker-compose启动项目
[root@linux-node4 redis-sentinel]# docker rm -f $(docker ps -a | grep redis | awk '{print $1}')    # 删除所有redis相关的docker容器

3、集群图解 & 测试

[root@linux-node4 redis-sentinel]# redis-cli -h 127.0.0.1 -p 26379
[root@linux-node4 redis-sentinel]# redis-cli -h 127.0.0.1 -p 26380
127.0.0.1:26379> info
# Server
redis_version:5.0.7
redis_mode:sentinel
os:Linux 3.10.0-957.1.3.el7.x86_64 x86_64
tcp_port:26379
executable:/data/redis-server
config_file:/etc/redis/sentinel.conf

# Clients
connected_clients:2
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0

# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.17.0.2:6379,slaves=2,sentinels=2
127.0.0.1:26379> 
redis-cli -h 127.0.0.1 -p 26379  连接sentinel查看集群信息
# master上可以写入和读取,但是slave只能读取不能写入
'''打开一个新终端在redis-master写入数据  '''
[root@linux-node4 redis-sentinel]# redis-cli -h 127.0.0.1 -p 6379  
127.0.0.1:6379> set test01 master6379
OK
127.0.0.1:6379> 

'''打开第二个新终端在redis-slave可以查看master中写入的值但是salve自己不能写数据  '''
[root@linux-node4 ~]# redis-cli -h 127.0.0.1 -p 6380 
127.0.0.1:6380> get test01                # slave可以查看到master写入的数据
"master6379"
127.0.0.1:6380> set test02 redis6380      # salve自己无法写入数据
(error) READONLY You can't write against a read only replica.
redis-master上可以写入和读取,但是slave只能读取不能写入
[root@linux-node4 redis-sentinel]# docker stop  redis-sentinel_master_1   # 停止redis-master模拟故障
redis-sentinel_master_1
[root@linux-node4 redis-sentinel]# docker ps | grep redis                 # 确定master已经停止
88d270dad925        redis-sentinel_sentinel2  redis-sentinel_sentinel2_1
307c9c7907e0        redis-sentinel_sentinel1  redis-sentinel_sentinel1_1
2ed5dbfff01d        redis                     redis-sentinel_slave1_1
ca3b568d0b19        redis                     redis-sentinel_slave2_1

[root@linux-node4 redis-sentinel]# redis-cli -p 26379                     # 连接sentinel,发现已经选举出新的master
127.0.0.1:26379> sentinel masters
1)  1) "name"
    2) "mymaster"
    3) "ip"
    4) "172.17.0.4"
    5) "port"
    6) "6379"
    7) "runid"
    8) "af1aa34a2a013c4b776456732ee5424c5590829c"
[root@linux-node4 redis-sentinel]# docker inspect redis-sentinel_slave2_1  # 我这里查看sentinel_slave2_1的ip为172.17.0.4
[root@linux-node4 redis-sentinel]# redis-cli -h 127.0.0.1 -p 6381
127.0.0.1:6381> info                  # 查看角色
127.0.0.1:6381> set name zhangsan     # 发现主库可以进行写入啦
OK
127.0.0.1:6381> 
停止redis-master模拟故障切换
#!/usr/bin/env python
import redis
from redis.sentinel import Sentinel

# 连接哨兵服务器(主机名也可以用域名)
sentinel = Sentinel([('192.168.56.14', 26379),  # 连接的是哨兵的
                     ('192.168.56.14', 26380),
                     ],
                    socket_timeout=2,
                    )

# 获取主服务器地址
master = sentinel.discover_master('mymaster')

# 获取主服务器进行写入(密码应为redis密码),源码中连接的是docker内部地址网络不通
master = sentinel.master_for('mymaster', socket_timeout=0.5, password='123456', db=15)
w_ret = master.set('foo', 'bar')
# 输出:True


# # 获取从服务器进行读取(默认是round-roubin)
slave = sentinel.slave_for('mymaster', socket_timeout=0.5, password='redis_auth_pass', db=15)
r_ret = slave.get('foo')
print(r_ret)
# # 输出:bar
使用redis连接sentinel测试redis集群写入

 

 

Redis 哨兵模式图解
启动哨兵服务

 

 

 

 

连接master服务

 

 

连接从服务器1

 

 

 

连接从服务器2

 

 

模拟停止master服务
 

选举后的从服务器

 

 

 

 

 

posted @ 2020-04-08 13:17  Mr-刘  阅读(890)  评论(0编辑  收藏  举报