前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我掌握的新兴技术:Traefik 转发 TCP 到 MySQL 集群以及 浅析服务器环境,zk 集群搭建

我掌握的新兴技术:Traefik 转发 TCP 到 MySQL 集群以及 浅析服务器环境,zk 集群搭建

原创
作者头像
Java4ye
发布2024-02-06 09:47:45
6240
发布2024-02-06 09:47:45
举报
文章被收录于专栏:云原生

小伙伴们好呀,上文才吐槽只能用 port-forward 去连接到 MySQL 主从集群,今天就解决了 哈哈😝

看来以后得多吐槽吐槽了,也许吐槽也是开窍的一种方式 哈哈哈

实际是 bug 会影响睡眠质量 哈哈🐖

本文的几个要点

  1. 使用 Traefik 转发 TCP 到 MySQL,外部可以访问
  2. 运行环境分析(图解)
  3. zk 集群搭建
  4. prettyzoo 工具使用

mysql.yaml

早上发现这个 Traefik 动态配置里的 address 写错了,可能用的是第一次搭建的 MySQL 集群的 port,中间又因为其他尝试重新发布了好多次,导致这个 service 暴露出来的端口变了😱 (之前出错的场景是 连接上后秒断。。。 em.. 我也不知道是不是真的没配对那时)

代码语言:yaml
复制
tcp:
  routers:
    mysql-master:
      rule: HostSNI(`*`)
      service: mysql
      entryPoints:
         - mysql
  
  services:
    mysql:
      loadBalancer:
        servers:
          - address: "192.168.49.2:30414"

这里的 HostSNISNI(Server Name Indication):是 TLS 的扩展,如果没有证书的话,配置成 * 就好了

zookeeper.yaml

代码语言:yaml
复制
tcp:
 routers:
   zk:
     rule: HostSNI(`*`)
     service: zk
     entryPoints:
         - zookeeper
  
 services:
   zk:
    loadBalancer:
      servers:
       - address: "192.168.49.2:32358"

docker-compose.yaml

这里配置还是比较乱。。可能用 labels 会清晰些。

主要多了两个 tcp 入口,8006 和 8007

代码语言:yaml
复制
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

Traefik 界面

配置成功后,可以看到这里的 TCP 是正常的

(之前连不上这里也是正常的😂)

至少现在不用 k8s 的 port-forward 去转发了,看着舒服些了😝

环境分析

再简单画个图看看现在的环境。

可以看到我的云服务器上跑着两个 docker 服务。一个是 Traefik, 一个 是 Minikube

因为我只有一台云服务器,所以就用了 minikube 来搭建 k8s 集群。

Traefik 则作为一个 总网关,对外部流量进行转发。

当然,外部流量进来得先在云服务器的防火墙上放开这些端口

同时,将这些端口映射到 Traefik 这个docker 节点上。

流量进来后,就会被 Traefik 进行接管了,根据配置规则进行转发,去到我们的 MySQL 或其他服务。

运行该命令可以清楚地看到 两个容器在同一网络内,可以相互通信。

代码语言:sh
复制
docker network inspect minikube

所以,对 K8s 上暴露出来的 Service ,Traefik 都可以正常转发。

接下来快速分享下 helm 搭建 zk 集群的一个过程。🐷

zookeeper 集群搭建

上文分享了这个 MySQL 主从集群的搭建,这里搭建 ZK 集群的思路也是一样的,就不多赘述了。

启动

代码语言:sh
复制
helm install zookeeper bitnami/zookeeper --namespace prod -f config.yaml

config.yaml

zk集群:3个节点

代码语言:yaml
复制
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 的角色。

主要还是 协调 功能,如果到时真的需要保留一些重要数据,再考虑下能否将这些数据映射到主机上。

Prettyzoo

这里直接 New 填写 ip,port 即可。

但是命令行的话,有些命令还支持不了(这里就没细究下去了)

如果界面有点问题,这里的 Reset 操作可能有用。(em.. 因为我一开始都看不到 ZNode 😱)

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本文的几个要点
  • mysql.yaml
  • zookeeper.yaml
  • docker-compose.yaml
  • Traefik 界面
  • 环境分析
  • zookeeper 集群搭建
  • 启动
  • config.yaml
  • Prettyzoo
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档