Traefik 转发 TCP 到 MySQL 集群以及 浅析服务器环境,zk 集群搭建

3476 篇文章 106 订阅

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

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

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

本文的几个要点

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

mysql.yaml

早上发现这个 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 的扩展,如果没有证书的话,配置成 * 就好了

zookeeper.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

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 或其他服务。

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

docker network inspect minikube
复制代码

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

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

zookeeper 集群搭建

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

启动

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

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 的角色。

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

Prettyzoo

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

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

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储 基于muduo库实现了工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端,采用redis消息队列进行集群mysql数据库存储
可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟 可以工作在 nginx tcp 负载均衡环境中的集群聊天服务器和客户端源码 基于 muduo,nginx,redis 实现 添加了数据库连接池提高了并发能力,并且降低了聊天延迟

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值