README.md 3.4 KB

此yaml为Redis Cluster模式,用于简单部署持久化Redis Cluster,Redis版本为4.0.8

  1. 创建namespace

        kubectl create namespace public-service
    

    其他namespace需要替换当前文件

    sed -i "s#public-service#YOUR_NAMESPACE#g" *

  2. 首先创建pv所用目录

        NFS服务器:
        /k8s/redis-cluster/1 *(rw,sync,no_subtree_check,no_root_squash)
        /k8s/redis-cluster/2 *(rw,sync,no_subtree_check,no_root_squash)
        /k8s/redis-cluster/3 *(rw,sync,no_subtree_check,no_root_squash)
        /k8s/redis-cluster/4 *(rw,sync,no_subtree_check,no_root_squash)
        /k8s/redis-cluster/5 *(rw,sync,no_subtree_check,no_root_squash)
        /k8s/redis-cluster/6 *(rw,sync,no_subtree_check,no_root_squash)
    
  3. 创建集群

        [root@k8s-master01 redis-cluster]# ls
        failover.py  redis-cluster-configmap.yaml  redis-cluster-rbac.yaml     redis-cluster-ss.yaml
        README.md    redis-cluster-pv.yaml         redis-cluster-service.yaml
        [root@k8s-master01 redis-cluster]# kubectl apply -f .
    
  4. 创建slot

    # 等待所有pod启动完毕后,直接执行以下命令。
    
        v=""
            
        for i in `kubectl get po -n public-service -o wide | awk  '{print $6}' | grep -v IP`; do v="$v $i:6379";done
    
        kubectl exec -ti redis-cluster-ss-5 -n public-service -- redis-trib.rb create --replicas 1 $v
    
  5. 查看状态

        [root@k8s-master01 ~]# kubectl exec -ti redis-cluster-ss-0 -n public-service -- redis-cli cluster nodesf9527e2ced3c472caabe3f815d87531e82e75049 172.168.5.174:6379@16379 master - 0 1541693210490 2 connected 5461-10922
        a47ef989862a2ddbf83c70d8191ff17c8b37a6fc 172.168.2.68:6379@16379 master - 0 1541693213497 3 connected 10923-16383
        b4c3d1ffe5ed70d2d40467d228004f4e0fb5fa25 172.168.5.175:6379@16379 slave f9527e2ced3c472caabe3f815d87531e82e75049 0 1541693216510 6 connected
        2aa4d2e5de3aca325bff95325102da72334a5164 172.168.1.76:6379@16379 master - 0 1541693214503 7 connected 0-5460
        74c6e2356e41c6842e05b043c48ce20b7f1ad3ae 172.168.0.95:6379@16379 slave a47ef989862a2ddbf83c70d8191ff17c8b37a6fc 0 1541693215504 4 connected
        2d5389ff7ff6b6dcc5cff83654a6e15c9c4a7750 172.168.6.170:6379@16379 myself,slave 2aa4d2e5de3aca325bff95325102da72334a5164 0 1541692127160 1 connected
        [root@k8s-master01 ~]# kubectl exec -ti redis-cluster-ss-0 -n public-service -- redis-cli cluster info
        cluster_state:ok
        cluster_slots_assigned:16384
        cluster_slots_ok:16384
        cluster_slots_pfail:0
        cluster_slots_fail:0
        cluster_known_nodes:6
        cluster_size:3
        cluster_current_epoch:7
        cluster_my_epoch:7
        cluster_stats_messages_ping_sent:1158
        cluster_stats_messages_pong_sent:1203
        cluster_stats_messages_sent:2361
        cluster_stats_messages_ping_received:1203
        cluster_stats_messages_pong_received:1142
        cluster_stats_messages_received:2345
    
  6. 其他说明

        创建Redis Cluster集群不一定非要用sts,用dc也一样。
        终止某一个pod虽然IP会变,但是不会影响集群完整性,会自我恢复。
        测试过终止所有Redis Cluster POD,此时集群无法正常恢复,使用failover.py(由于时间匆忙,随便写的)会恢复集群,
        并且不会丢失已保存的数据。