主从复制Redis集群
主从容器启动的时候指定不同的配置文件
#!/bin/bash #change redis config ordinal=`env | grep podname | cut -d"=" -f2 | cut -d"-" -f2` sed -i "s/slaveof.*/slaveof rediscluster-0.rediscluster 6379/g" /etc/redis/redis-slave.conf if [ $ordinal -eq 0 ]; then redis-server /etc/redis/redis-master.conf else redis-server /etc/redis/redis-slave.conf fi
以上步骤实现了主从节点的数据同步,但是当主节点崩溃的时候还不能自动把一个从节点切换成主节点。要实现主从的自动切换就必须另外安装一个redis哨兵服务
主节点宕机后从节点自动升级为主节点,但主节点的IP已经变动了,此时应用服务还是拿着原主节点的地址去访问
一旦主节点宕机,从节点晋升成主节点,同时需要修改应用方的主节点地址,还需要命令所有从节点去复制新的主节点,整个过程需要人工干预
Redis哨兵集群安装配置
在主从复制的基础上,哨兵实现了自动化的故障恢复
访问redis集群的数据都是通过哨兵集群的,哨兵监控整个redis集群
一旦发现redis集群出现了问题,比如刚刚说的主节点挂了,从节点会顶上来。但是主节点地址变了,这时候应用服务无感知,也不用更改访问地址,因为哨兵才是和应用服务做交互的
redis容器最少需要6个,分别是1主2从3哨兵
pod0为主 pod1和pod2为从 pod3,pod4,pod5为哨兵
#!/bin/bash #change redis config ordinal=`env | grep podname | cut -d"=" -f2 | cut -d"-" -f2` sed -i "s/slaveof.*/slaveof rediscluster-0.rediscluster 6379/g" /etc/redis/redis-slave.conf if [ $ordinal -eq 0 ]; then redis-server /etc/redis/redis-master.conf elif [ $ordinal -gt 0 -a $ordinal -le 2 ]; then redis-server /etc/redis/redis-slave.conf elif [ $ordinal -gt 2 ]; then redis-sentinel /etc/redis/sentinel.conf fi
Rancher实现一个四层的负载均衡器
实现给一群pod提供一个对外访问的入口