小伙伴们好呀,上文才吐槽只能用 port-forward 去连接到 MySQL 主从集群,今天就解决了 哈哈😝
看来以后得多吐槽吐槽了,也许吐槽也是开窍的一种方式 哈哈哈
实际是 bug 会影响睡眠质量 哈哈🐖
早上发现这个 Traefik 动态配置里的 address 写错了,可能用的是第一次搭建的 MySQL 集群的 port,中间又因为其他尝试重新发布了好多次,导致这个 service 暴露出来的端口变了😱 (之前出错的场景是 连接上后秒断。。。 em.. 我也不知道是不是真的没配对那时)
tcp:
routers:
mysql-master:
rule: HostSNI(`*`)
service: mysql
entryPoints:
- mysql
services:
mysql:
loadBalancer:
servers:
- address: "192.168.49.2:30414"
这里的 HostSNI 中 SNI(Server Name Indication):是 TLS 的扩展,如果没有证书的话,配置成 * 就好了
tcp:
routers:
zk:
rule: HostSNI(`*`)
service: zk
entryPoints:
- zookeeper
services:
zk:
loadBalancer:
servers:
- address: "192.168.49.2:32358"
这里配置还是比较乱。。可能用 labels 会清晰些。
主要多了两个 tcp 入口,8006 和 8007
version: '3'
services:
traefik:
# The official v2 Traefik docker image
image: traefik:v2.9
# Enables the web UI and tells Traefik to listen to docker
command: --api.insecure=true --providers.docker --providers.file.directory=/etc/traefik/conf --api.insecure=true --providers.docker --providers.file.directory=/etc/traefik/conf --log.filePath=/var/log/traefik/traefik.log --log.format=json --log.level=DEBUG --accesslog=true --accesslog.filepath=/var/log/traefik/access.log --accesslog.format=json --entryPoints.zookeeper.address=:8007 --entryPoints.web.address=:80 --entryPoints.mysql.address=:8006
ports:
# The HTTP port
- "8002:80"
# The Web UI (enabled by --api.insecure=true)
- "8080:8080"
- "8007:8007"
- "8006:8006"
volumes:
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock
- /home/yang4ye/traefik-docker/conf:/etc/traefik/conf
- /home/yang4ye/logs/traefik:/var/log/traefik
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
networks:
- minikube
extra_hosts:
- "java4ye.test:192.168.49.2"
- "java4ye2.test:192.168.49.2"
networks:
minikube:
external: true
配置成功后,可以看到这里的 TCP 是正常的
(之前连不上这里也是正常的😂)
至少现在不用 k8s 的 port-forward 去转发了,看着舒服些了😝
再简单画个图看看现在的环境。
可以看到我的云服务器上跑着两个 docker 服务。一个是 Traefik, 一个 是 Minikube
因为我只有一台云服务器,所以就用了 minikube 来搭建 k8s 集群。
Traefik 则作为一个 总网关,对外部流量进行转发。
当然,外部流量进来得先在云服务器的防火墙上放开这些端口
同时,将这些端口映射到 Traefik 这个docker 节点上。
流量进来后,就会被 Traefik 进行接管了,根据配置规则进行转发,去到我们的 MySQL 或其他服务。
运行该命令可以清楚地看到 两个容器在同一网络内,可以相互通信。
docker network inspect minikube
所以,对 K8s 上暴露出来的 Service ,Traefik 都可以正常转发。
接下来快速分享下 helm 搭建 zk 集群的一个过程。🐷
上文分享了这个 MySQL 主从集群的搭建,这里搭建 ZK 集群的思路也是一样的,就不多赘述了。
helm install zookeeper bitnami/zookeeper --namespace prod -f config.yaml
zk集群:3个节点
replicaCount: 3
resources:
limits:
cpu: 1000m
memory: 1Gi
requests:
memory: 256Mi
cpu: 250m
service:
type: NodePort
# 多副本情况下不适用,默认会直接在 minikube 主机上创建 hostpath 存储
#persistence:
#enabled: true
#existingClaim: "zookeeper-pvc"
#storageClass: "storage-class-nfs"
#accessModes:
# - ReadWriteOnce
#size: 5Gi
#dataLogDir:
# size: 5Gi
# existingClaim: "zookeeper-datalog-pvc"
# selector: {}
这里要注意下这个 claim ,配置文件里只支持单个,所以多个zk节点就不适用了。
默认情况下,它自己会去创建,只是数据最后会存放在 minikube 这个 docker 节点上。
本来还想挣扎下,但是转念一想,貌似 zk 上也没啥重要数据要存放的,而且它在我接下来的规划中,更多是扮演 分布式锁和机器ID 的角色。
主要还是 协调 功能,如果到时真的需要保留一些重要数据,再考虑下能否将这些数据映射到主机上。
这里直接 New 填写 ip,port 即可。
但是命令行的话,有些命令还支持不了(这里就没细究下去了)
如果界面有点问题,这里的 Reset 操作可能有用。(em.. 因为我一开始都看不到 ZNode 😱)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。