k 8 sの3つのnodeにredis clusterを配備する

5218 ワード

目的
redis clustorは、正常に稼働するには6台のサーバが必要です.さまざまな理由で、開発や特別なニーズのため、3台のサーバでしかredis clustorを稼働できません.哨兵モードを使用する場合、最新のclustorモードを用いてredisを実行させる.
本文はredis配置方式の研究と解としてのみ
準備作業
redis dockerを作成するlatestミラーには、次のコンポーネントが含まれます.
1. redis-cli
2. ruby
3. redis-trib
ミラーにパッケージングして阿里ミラーサーバにアップロードするcluster-redis:latest
クラスタアクションの作成
3台のサーバでそれぞれ2つのredisコンテナを実行
次のredis-clusterデプロイメントファイルを使用すると、同じポート、同じ角のredisコンテナを2つ配置できます.
redis-cluster.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: redis-blue
labels:
app: redis
member: redis-blue
spec:
replicas: 3
template:
metadata:
labels:
app: redis
member: redis-blue
spec:
hostNetwork: true
containers:
- name: redis
image: registry.cn-hangzhou.aliyuncs.com/wise2c/cluster-redis:latest
command: ["/bin/sh", "-c"]
args: ["echo 'dir /tmp/data' >> /root/redis.conf && /usr/local/bin/redis-server /root/redis.conf"]

- /usr/local/bin/redis-server


- /root/redis.conf

ports: - name: redis-port containerPort: 6379 - name: cluster-port containerPort: 16379 volumeMounts: - mountPath: /tmp/data name: data volumes: - name: data hostPath:

path: /tmp/redis-blue

apiVersion: extensions/v1beta1 kind: Deployment metadata: name: redis-green labels: app: redis member: redis-green spec: replicas: 3 template: metadata: labels: app: redis member: redis-green spec: hostNetwork: true containers: - name: redis image: registry.cn-hangzhou.aliyuncs.com/wise2c/cluster-redis:latest command: ["/bin/sh", "-c"] args: ["sed -i 's/6379/6380/g' /root/redis.conf && echo 'dir /tmp/data' >> /root/redis.conf && /usr/local/ports: - name: redis-port containerPort: 6380 - name: cluster-port containerPort: 16380 volumeMounts: - mountPath: /tmp/data name: data volumes: - name: data hostPath: path: /tmp/redis-green
kubectl create -f redis-cluster.yaml
次のスクリプトを実行して、redisクラスタ全体を作成します.redisは、masterと対応するslave不が同じサーバに表示されるように、ハッシュスロットを自動的に割り当てます.
create_cluster.sh

!/usr/bin/env bash

redis_count=`kubectl get pod -o wide -l app=redis | grep Running | wc -l`

echo "redis_count:"$redis_count

if [ $redis_count -ne 6 ]; then echo "the running redis count: ${redis_count} is error"exit 1 fi redis_blue_ips=`kubectl get pod -o wide -l app=redis -l member=redis-blue | awk 'NR>1{printf $6":6379 "}' redis_green_ips=`kubectl get pod -o wide -l app=redis -l member=redis-green | awk 'NR>1{printf $6":6380 "}' redis_ips=$redis_blue_ips" "$redis_green_ips echo "redis_ips:"$redis_ips redis_blue_name=`kubectl get pod -o wide -l app=redis -l member=redis-blue | grep Running | awk '{printf $1" "}'

echo $redis_ips | awk -F' ' '{for( i=1;ikubectl create -f redis-cluster.yaml bash create_cluster.sh 機械の1台を消す masterとslaveは同じ機械にあるので、vm 2のようなvmを1台ずつオフにすると このときvm 3では、redis clusterによってvm 3 slave 2(6380)--->master 2(6380)がmasterに自動的に復元され、クラスタが正常に動作し、トラフィックが中断されない。 消した機械を取り戻す vm 2を再起動すると、クラスタの状態は次のとおりです。 このときクラスタは正常に動作し、vm 3には2つのmasterがあります。vm 3をオフにすると、クラスタ内の2つのmasterが同時にラインオフし、クラスタが自動的にリカバリできなくなります。 ポイント:以下のスクリプトを実行し、slave 2をmaster 2にアップグレードし、クラスタの自動修復機能を復元します。 failover.sh !/usr/bin/env bash redis_blue_name=`kubectl get pod -o wide -l app=redis -l member=redis-blue | grep Running | awk '{printf $1":6379 redis_names=`kubectl get pod -o wide -l app=redis -l member=redis-blue | grep Running | awk '{printf $1","}' redis_array=${redis_names//,/ } for redis_name in $redis_array do kubectl exec -it ${redis_name} -- redis-cli cluster failover done bash failover.sh克拉斯塔自动恢复,成为下一个状态.克拉斯塔正常动作,商业会中断。以上の著者の操作は、各假想に2つのマスターを出現させることを目的とする.1台の假想マシーンがマシーンに現れると、クライスターが正常に動作する.3台のマスターと3台のslaveがそれぞれ同じマシーンである場合、redis clusterは自動的に回復する.最好的解决方案是,依然是6台的假想机器,3台的master,3台的slave的redis cluster。To do我们能一步进步.1.create-redis.sh  2.failover.sh  3.作为kubectl米勒制作,k 8 s deployment实行这个米勒.実装:1.克拉斯塔的制作2.恢复了克拉斯塔的自动修复机能(所有的服务器在开闭,业务中断。每秒,确认克拉斯塔需要slave,克拉斯塔正常动作.业务中断.)