文章目录[隐藏]
介绍
Redis Sentinel集群是由若干Sentinel节点组成的分布式集群,可以实现故障发现、故障自动转移、配置中心和客户端通知。
如下图:
Redis Sentinel 故障转移过程:
从这张图中我们能看到主节点挂掉了,原先的主从复制也断开了,客户端和损坏的主节点也断开了。从节点被提升为新的主节点,其它从节点开始和新的主节点建立复制关系。客户端通过新的主节点继续进行交互。Sentinel 会持续监控已经挂掉了主节点,待它恢复后,集群会调整为下面这张图。
创建Storageclass
所有node节点安装nfs驱动
1 |
yum install -y nfs-common nfs-utils |
下载 Storageclass chart
1 |
helm fetch aliyuncs/nfs-client-provisioner |
解压
1 |
tar zxvf nfs-client-provisioner-*.tgz |
进入文件夹,修改values.yaml
1 2 3 4 5 6 7 8 9 10 11 12 |
replicaCount: 1 strategyType: Recreate image: repository: registry.cn-hangzhou.aliyuncs.com/kubeapps/quay-nfs-client-provisioner tag: v3.1.0-k8s1.11 pullPolicy: IfNotPresent nfs: server: 2.16.210.108 #nfs服务器地址 path: /nfs #nfs文件地址 mountOptions: storageClass: name: managed-nfs-storage #Storageclass名称 |
启动Storageclass
1 |
helm install managed-nfs-storage nfs-client-provisioner/ -f nfs-client-provisioner/values.yaml |
查看
1 2 3 |
$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE managed-nfs-storage cluster.local/nfs-client-nfs-client-provisioner Delete Immediate true 33m |
helm安装
github地址:https://github.com/helm/charts/tree/master/stable/redis-ha
搜索
1 2 3 4 |
$ helm search repo redis-ha NAME CHART VERSION APP VERSION DESCRIPTION aliyuncs/redis-ha 4.3.3 5.0.6 Highly available Kubernetes implementation of R... stable/redis-ha 4.4.6 5.0.6 DEPRECATED - Highly available Kubernetes implem... |
拉取代码到本地
1 |
helm fetch aliyuncs/redis-ha |
解压并进入文件夹
1 2 3 4 |
# 解压 $ tar -xzvf redis-ha-*.tgz # 进入目录 $ cd redis-ha |
编辑values.yaml
文件,修改配置
1 2 3 4 5 6 7 8 9 10 11 12 |
# 修改反亲和性 hardAntiAffinity: false #部署pod时平均部署在不同节点上,node数量少于3改为false # 修改storageClass storageClass: "managed-nfs-storage" #配置Storageclass名称 accessModes: - ReadWriteOnce size: 1Gi #资源大小,根据nfs服务器资源配置 # 设置密码 auth: true # 开启权限验证 redisPassword: 1234565 # 密码 |
创建namespace
1 2 3 4 5 |
# 创建 $ kubectl create namespace redis-cluster # 查看 $ kubectl get namespace |
启动redis-ha
1 |
helm install redis-ha --namespace redis-cluster -f redis-ha/values.yaml |
redis-ha
:集群的名称
显示如下成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
NAME: redis-ha LAST DEPLOYED: Mon Nov 30 14:55:39 2020 NAMESPACE: default STATUS: deployed REVISION: 1 NOTES: Redis can be accessed via port 6379 and Sentinel can be accessed via port 26379 on the following DNS name from within your cluster: redis-ha.default.svc.cluster.local #redis连接信息 To connect to your Redis server: 1. Run a Redis pod that you can use as a client: kubectl exec -it redis-ha-server-0 sh -n default 2. Connect using the Redis CLI: |
查看pod
1 2 3 4 5 6 7 8 9 10 11 12 |
$ kubectl get svc,pod -n redis-cluster NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/redis-ha ClusterIP None <none> 6379/TCP,26379/TCP 17h service/redis-ha-announce-0 ClusterIP 10.0.0.98 <none> 6379/TCP,26379/TCP 17h service/redis-ha-announce-1 ClusterIP 10.0.0.5 <none> 6379/TCP,26379/TCP 17h service/redis-ha-announce-2 ClusterIP 10.0.0.229 <none> 6379/TCP,26379/TCP 17h NAME READY STATUS RESTARTS AGE pod/redis-ha-server-0 2/2 Running 0 17h pod/redis-ha-server-1 2/2 Running 0 17h pod/redis-ha-server-2 2/2 Running 0 17h |
redis-ha不对外暴露任何端口。
应用通过哨兵连接redis
删除
1 |
helm uninstall redis-ha -n redis-cluster --keep-history |
删除namespace
1 |
kubectl delete namespace redis-cluster |
补充
调试yaml
1 |
helm install redis-ha --namespace redis-cluster -f redis-ha/values.yaml --dry-run --debug |