【问题标题】:HAProxy in kubernetes to connect galera clusterKubernetes中的HAProxy连接galera集群
【发布时间】:2021-10-26 12:08:00
【问题描述】:

我想从部署在 kubernetes 中的haproxy pod 连接 Galera 集群。

镜像的 Docker 文件。

FROM haproxy:2.3
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg

haproxy.cfg文件

defaults
    log global
    mode tcp
    retries 10
    timeout client 10000
    timeout connect 100500
    timeout server 10000
frontend mysql-router-service
    bind *:6446
    mode tcp
    option tcplog
    default_backend galera_cluster_backend
# MySQL Cluster BE configuration
backend galera_cluster_backend
    mode tcp
    #option mysql-check user haproxy
    option tcp-check 
    balance source
    server mysql_cluster_01 192.168.1.2:3306  check weight 1
    server mysql_cluster_02 192.168.1.3:3306  check weight 1
    server mysql_cluster_03 192.168.1.4:3306  check weight 1

这里mysql-router-service 可能会产生误导,但我们使用它是因为它是早期的数据库连接服务。

Kubernetes 部署清单

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ha-proxy
  namespace: mysql-router
spec:
  replicas: 1 
  selector:
    matchLabels:
      app: ha-proxy
  template:
    metadata:
      labels:
        app: ha-proxy
        version: v1
    spec:
      imagePullSecrets:
      - name: dreg
      containers:
      - name: ha-proxy
        image: our-registry:5000/haproxy:v14
        imagePullPolicy: Always
        ports:
        - containerPort: 6446

Kubernetes 服务清单:

apiVersion: v1
kind: Service
metadata:
  name: mysql-router-service
  namespace: mysql-router
  labels:
    app: ha-proxy
spec:
  selector:
    app: ha-proxy
    version: v1
  ports:
  - name: ha-proxy
    port: 6446
    protocol: TCP
    targetPort: 6446
  type: LoadBalancer
  loadBalancerIP: 192.168.1.101

ha-proxy pod 日志中看到以下内容

[WARNING] 237/114804 (1) : config : log format ignored for frontend 'mysql-router-service' since it has no log address.
[NOTICE] 237/114804 (1) : New worker #1 (8) forked

如果我们在配置文件中使用option mysql-check user haproxy,Galera 日志/var/log/mysql/error.log

[Warning] Access denied for user 'haproxy'@'192.168.1.10' (using password NO)

这里192.168.1.10是k8 worker之一。

在 galera 集群中,我们有以下用户

+---------------+-------------+
| Host          | User        |
+---------------+-------------+    
| 192.168.1.%   | haproxy     |  
| localhost     | mariadb.sys |
| localhost     | mysql       |
| localhost     | root        |
+---------------+-------------+

所有节点都在运行Ubuntu 18-04ufw 被禁用。

我们可以从 k8 worker telnet 到 galera 节点。 (telnet192.168.1.2 3306)

我们在这里错过了什么?

【问题讨论】:

  • 用户haproxy有密码吗?
  • @ThanhNguyenVan 是的,尝试使用带有密码的haproxy 用户。但仍然没有连接

标签: mysql docker kubernetes haproxy galera


【解决方案1】:

取决于:

[Warning] Access denied for user 'haproxy'@'192.168.1.10' (using password NO)

我认为您必须为用户设置密码:haproxy

【讨论】:

  • 是的,我尝试过使用密码和相同的访问权限,但仍然无法连接。或者我是否在haproxy.cfg 中提供了密码?
  • bind *:6446 如果我正确的话,这应该是 3306 的 myql 端口?
  • 正如我所说,我们必须将其绑定到运行在6446 上的kubernetes 服务,我们给了bind 192.168.1.20:6446,但仍然无法连接
  • 怎么样mysql -u haproxy -p xxx -h 192.168.1.2:6446, 192.168.1.2
猜你喜欢
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
相关资源
最近更新 更多