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
- /usr/local/bin/redis-server
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,克拉斯塔正常动作.业务中断.)
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-greenkubectl create -f redis-cluster.yaml
次のスクリプトを実行して、redisクラスタ全体を作成します.redisは、masterと対応するslave不が同じサーバに表示されるように、ハッシュスロットを自動的に割り当てます.
create_cluster.sh