Redis集群做法的难点,百万并发客户端「实战」( 三 )
# redis-cli -h 192.168.30.129 -a 123456Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.192.168.30.129:6379> keys *1) "key2"2) "key1"192.168.30.129:6379> CONFIG GET dir1) "dir"2) "/data/redis"192.168.30.129:6379> CONFIG GET dbfilename1) "dbfilename"2) "dump.rdb"192.168.30.129:6379> get key1"100"192.168.30.129:6379> get key2"lzx"192.168.30.129:6379> set key3 aaa(error) READONLY You can't write against a read only replica.1234567891011121314151617181920212223
# redis-cli -h 192.168.30.130 -a 123456Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.192.168.30.130:6379> keys *1) "key2"2) "key1"192.168.30.130:6379> CONFIG GET dir1) "dir"2) "/data/redis"192.168.30.130:6379> CONFIG GET dbfilename1) "dbfilename"2) "dump.rdb"192.168.30.130:6379> get key1"100"192.168.30.130:6379> get key2"lzx"192.168.30.130:6379> set key3 aaa(error) READONLY You can't write against a read only replica.
可以看到 , 在master节点写入的数据 , 很快就同步到slave节点上 , 而且在slave节点上无法写入数据 。
Sentinel模式Sentinel模式介绍主从模式的弊端就是不具备高可用性 , 当master挂掉以后 , Redis将不能再对外提供写入操作 , 因此sentinel应运而生 。
sentinel中文含义为哨兵 , 顾名思义 , 它的作用就是监控redis集群的运行状况 , 特点如下
功能作用
- 监控(monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常 。
- 提醒(Notifation):当被监控的某个 Redis 服务器出现问题时 ,Sentinel 可以通过 API 向管理员或者其他应用程序发送通知 。
- 自动故障转移(Automatic failover):当一个主服务器不能正常工作时 ,Sentinel 会开始一次自动故障迁移操作 ,它会将失效主服务器的其中一个从服务器升级为新的主服务器 ,并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时 ,集群也会向客户端返回新主服务器的地址 ,使得集群可以使用新主服务器代替失效服务器 。
同样 , 我们还是将每个哨兵部署在一个单独的容器中 。
sentinel配置文件
redis-sentinel1:redis-sentinel2:redis-sentinel3:
这三个配置文件一模一样 , 都是监听master的 。 要不你把这个配置文件copy到容器中 , 要不你就创建三份 , 分别挂载到容器中 , 这里选择了后面一种方法 。这里介绍几个基本的配置
sentinel monitor mymaster redis 6379 2 监听的master的容器别名为redis , 端口是6379 , 最后面的2是当大于等于2个哨兵认为master主观下线后(无论这个值为多少 , 至少得有一半以上的哨兵判定master主观下线后 , master才会被客观下线) , master才会被客观下线 , 这是sentinel重新从slave中选举一个来当master 。
sentinel auth-pass mymaster 123456 如果master配置了密码 , 则此项必须配置 , 否则sentinel会将master标记问主观下线(sdown) 。
docker-composer配置文件
### REDIS-SENTINEL ################################################# masterredis-sentinel:image: johnson19900110/redis-sentinel:latestrestart: always#如果master未开启数据持久化 , 此项应该删除volumes:- ./redis-sentinel/config/sentinel.conf:/usr/local/etc/redis/redis-sentinel.confnetworks:- backenddepends_on:- redis# redis sentinel slave 1redis-sentinel-slave1:image: johnson19900110/redis-sentinel:latestrestart: alwaysvolumes:- ./redis-sentinel/config/sentinel-slave1.conf:/usr/local/etc/redis/redis-sentinel.confnetworks:- backenddepends_on:- redis-slave1- redis-sentinel# redis sentinel slave 2redis-sentinel-slave2:image: johnson19900110/redis-sentinel:latestrestart: alwaysvolumes:- ./redis-sentinel/config/sentinel-slave2.conf:/usr/local/etc/redis/redis-sentinel.confnetworks:- backenddepends_on:- redis-slave2- redis-sentinel-slave1
- 果粉有福了,苹果正式宣布新规,这个做法很库克
- 华为强行排除小米!而小米的做法却很亮眼!这次小米更有格局
- java 从零实现属于你的 redis 分布式锁
- HFL Redis_10_set类型底层存储数据结构
- 上海|全球科技集群100强发布,北京、上海、粤港三城跻身前十
- 为什么 Redis 单线程能支撑高并发?
- Redis流行的原因
- 摸方向盘就换挡、激光去污、磁悬浮雨刷,特斯拉尝试韭菜新做法
- 谁更有良心显而易见!关于手机屏幕,华为、OPPO做法差距明显
- C# Redis分布式锁 - 单节点