中间件¶
安装Redis 集群¶
容器化Redis有单机版,集群模式,哨兵模式。Spring Boot应用针对不同模式有对应的代码库,使用不同的模式不能通过 配置自由切换,需要修改代码支持。RedisLab仅提供哨兵模式,没有集群模式。 以下为集群模式安装例子。
- ConfigMap中初始化密码
# vi sample/env-test/middleware/cm-redis-cluster.yml
apiVersion: v1
kind: ConfigMap
metadata:
name: redis-cluster
data:
update-node.sh: |
#!/bin/sh
REDIS_NODES="/data/nodes.conf"
sed -i -e "/myself/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/${POD_IP}/" ${REDIS_NODES}
exec "$@"
redis.conf: |+
cluster-enabled yes
cluster-require-full-coverage no
cluster-node-timeout 15000
cluster-config-file /data/nodes.conf
cluster-migration-barrier 1
appendonly yes
protected-mode no
requirepass redis123 # 设置密码保护
- 创建Redis Cluster Statefulset, 这里共有6个实例,两两主备。16384个哈希槽(hash slot) 被平均分配到三个主里。
# oc create -f sample/env-test/middleware/cm-redis-cluster.yml
- 创建 Headerless Service, 使每个Redis实例能够以内部域名直接访问
# vi sample/env-test/middleware/svc-redis-cluster.yml
apiVersion: v1
kind: Service
metadata:
name: redis-cluster
spec:
clusterIP: None # Headless Service
ports:
- name: client
port: 6379
protocol: TCP
targetPort: 6379
- name: gossip
port: 16379
protocol: TCP
targetPort: 16379
selector:
app: redis-cluster
sessionAffinity: None
type: ClusterIP
# oc create -f sample/env-test/middleware/svc-redis-cluster.yml
- 在spring boot配置中,修改redis host的访问地址
spring.redis.timeout = 30000
spring.redis.password = redis123
# 以逗号分割的redis集群节点配置,格式:host:port,
spring.redis.cluster.nodes=redis-cluster-0.redis-cluster:6379,redis-cluster-1.redis-cluster:6379,
redis-cluster-2.redis-cluster:6379,redis-cluster-3.redis-cluster:6379,redis-cluster-4.redis-cluster:6379,
redis-cluster-5.redis-cluster:6379
- 参考资料