继上篇:补充K8s删除redis及测试脚本

一、连接测试脚本connect.sh

1. 导入模块

import redis

导入 redis 模块,该模块提供了与 Redis 服务器进行交互的功能。

2. 配置 Redis 连接信息

redis_host = 'localhost'  # Redis服务器地址
redis_port = 6379         # Redis服务器端口
redis_db = 0              # Redis数据库索引

定义了 Redis 服务器的连接信息,包括服务器地址(localhost)、端口(6379)和数据库索引(0)。redis_host 是 Redis 服务器的主机名或 IP 地址,redis_port 是服务器监听的端口号,redis_db 是要连接的 Redis 数据库的索引。

3. 创建 Redis 连接

client = redis.StrictRedis(host=redis_host, port
### 部署Redis Sentinel以实现在Kubernetes上的高可用 #### 创建持久化存储资源 为了确保数据的安全性和持久性,在Kubernetes中部署Redis之前,需先定义PersistentVolume (PV) 和 PersistentVolumeClaim (PVC),这允许Pod请求特定数量的存储空间并绑定到实际的存储资源上。 ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: redis-pv-volume spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: redis-data spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi ``` #### 定义ConfigMap来保存配置文件 通过创建`ConfigMap`对象可以方便地管理应用程序所需的外部配置参数。对于Redis而言,通常会涉及到sentinel.conf这样的配置文件[^1]。 ```yaml apiVersion: v1 data: sentinel.conf: | protected-mode no port 26379 dir /tmp sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 kind: ConfigMap metadata: labels: app: redis-sentinel name: redis-sentinel-config ``` #### 设置Headless Service以便于服务发现 利用无头Service(Headless Service),可以让客户端直接连接至后端Pod而不需要经过负载均衡器处理流量分发逻辑。这对于构建分布式系统非常重要,因为各个组件之间可能需要相互通讯。 ```yaml apiVersion: v1 kind: Service metadata: name: redis-headless spec: clusterIP: None selector: app: redis-node ports: - protocol: TCP port: 6379 targetPort: 6379 ``` #### 构建StatefulSet用于运行多个实例副本 借助StatefulSet控制器能够保证每个Pod拥有唯一的身份标识符,并且支持有序启动/关闭操作以及稳定的网络身份。这里我们将为每台Redis服务器设置一个独立的状态集。 ```yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: redis-master-slave-set spec: serviceName: "redis-headless" replicas: 3 # 可调整为主从节点总数目的一半加一 template: metadata: labels: app: redis-node spec: containers: - name: master image: bitnami/redis:latest command: ["sh", "-c", "exec redis-server --slaveof $(MASTER_HOSTNAME) 6379"] env: - name: MASTER_HOSTNAME valueFrom: fieldRef: fieldPath: status.hostIP volumeMounts: - mountPath: /data name: data volumes: - name: data persistentVolumeClaim: claimName: redis-data ``` #### 初始化Sentinel集群成员关系 一旦所有必要的基础架构都已就绪,则可以通过向各节点注入相同的初始脚本来完成对整个集群内哨兵进程之间的同步工作。此过程一般是在容器内部执行命令行工具如`redis-cli`来进行交互式配置更新。 ```bash kubectl exec -it -n <namespace> <pod-name> -- sh -c 'echo "SENTINEL SET mymaster quorum 2" | redis-cli -p 26379' ``` 上述命令中的`<namespace>`应替换为实际使用的命名空间名称; `<pod-name>`则对应具体哪一个Pod实例的名字标签。 #### 测试主从切换功能正常与否 最后一步是要验证当发生故障转移时能否顺利接管业务连续性的能力。可通过模拟杀死当前活跃主机的方式触发自动选举新领导者的机制,之后再检查其他从属单元是否成功指向新的领导者续提供读写权限。 ```bash kubectl delete pod -l role=master ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑上单车去旅行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值