redis集群
Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施。
它有几个好处:
- 高性能,集群的性能和单节点的性能是同一个级别,并不会降低
- 高可用,在使用集群承担高负载的同时,也能进行高可用的容灾机制
- 易扩展,向集群添加新的节点,或者移除节点,都是透明化操作,不需要停机
- 原生,不需要其他代理或工具,和单机redis几乎完全兼容
何为哨兵模式
哨兵模式,是监控redis集群状态的工具,就好像一个监控器,监控着主从服务器是否健康,是redis的高可用性解决方案,当某个主服务器宕机时,它会选举出一个最优的从服务器来充当主服务器,这样,用户体验不会改变
需要注意的是,虽然哨兵模式支持创建多个,但是一般建议采取奇数台,道理很简单,假如选举的两个从服务器票数一样,就会使场面瞬间尬住,主从间的切换有可能会崩掉
还有一点是,哨兵也不是不会出错的,如果哨兵出错,没有下一个哨兵出战,那么程序有可能会出错
使用docker创建镜像
建一个文件夹,进入项目文件夹,再建一个专门存放哨兵的脚本sentinel,cd sentinel
建立sentinel.conf配置文件
sentinel monitor mymaster redis-master 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 5000
该配置的意思是,监控主服务器的6379端口并启动两个实例,如果5秒内没有收到主节点的心跳,则哨兵就认为主节点宕机了,默认是30秒,如果5秒以上连接不上主库同步,则在5秒后进行选举,对其他从服务器进行角色转换
建立sentinel-entypoint.sh脚本
#!/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
该脚本文件会对配置文件进行同步,用来启动哨兵
建立Dockerfile指定基础镜像,同时拷贝配置文件到镜像内部
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"]
最后退到项目的根目录,建
docker-compose.yml
配置文件master: image: redis ports: - "6379:6379" slave1: image: redis command: redis-server --slaveof redis-master 6379 links: - master:redis-master ports: - "6380:6379" slave2: image: redis command: redis-server --slaveof redis-master 6379 links: - master:redis-master ports: - "6381:6379" sentinel1: build: sentinel environment: - SENTINEL_DOWN_AFTER=5000 - SENTINEL_FAILOVER=5000 links: - master:redis-master - slave1 sentinel2: build: sentinel environment: - SENTINEL_DOWN_AFTER=5000 - SENTINEL_FAILOVER=5000 links: - master:redis-master - slave2
意思是,我们起三台redis服务,分别跑在6379,6380,6381 ,一主两从,并且有两个哨兵实例来监控他们
在项目根目录下,启动服务:
docker-compose up --force-recreate # 如果希望在后台运行可以加-d参数
测试一下,打开三个终端,分别进入redis-cli -p 6379,6380,6381
在主服务器6379下,添加一个数据,然后分别get测试哨兵
手动停止主库的容器进程,来模拟宕机的情况docker stop redissentinel_master_1
使用
info
命令查询服务器的角色,可以看到,原本是slave,现在成为了master
- Post link: https://www.godhearing.cn/docker-compons-da-jian-redis-ji-qun-shao-bing-mo-shi/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.