如何将OSTicket Docker镜像与MariaDB Galera集群配合使用
直接配置MYSQL_HOST指向HAProxy代理
别注释MYSQL_HOST,直接把它设为HAProxy代理的地址和端口,比如MYSQL_HOST=swarm-maria_proxy:3306(如果你的代理用了自定义端口,替换成对应端口)。先确认OSTicket容器能解析swarm-maria_proxy这个主机名——如果是Docker Swarm环境,要保证两个服务在同一个overlay网络里;如果是单机Docker,得在同一个自定义网络。同时去HAProxy的日志里看看,OSTicket的连接请求有没有到达代理,代理有没有正确转发到Galera节点。先测连通性
进到OSTicket容器里,用telnet swarm-maria_proxy 3306或者nc -zv swarm-maria_proxy 3306测试端口能不能通。要是不通,先搞定网络问题——要么把两个容器拉到同一个Docker网络,要么检查DNS解析配置。调整HAProxy的Galera健康检查
Galera集群不能用普通的MySQL健康检查,HAProxy得确认节点处于Synced状态才转发流量。给你个HAProxy配置片段参考:listen galera_cluster bind *:3306 mode tcp balance leastconn option tcp-check tcp-check send PING\ tcp-check expect string PONG tcp-check send QUERY\;SHOW\ STATUS\ LIKE\ \'wsrep_ready\'\;\ tcp-check expect string wsrep_ready\tON server galera-node1 节点1IP:3306 check server galera-node2 节点2IP:3306 check server galera-node3 节点3IP:3306 check确保健康检查能识别正常节点,不然OSTicket连过去可能碰到未同步的节点导致失败。
检查所有数据库参数
除了MYSQL_HOST,MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE这些变量一个都不能少,而且得和Galera集群里的数据库权限匹配。看OSTicket日志找具体错误
跑docker logs <你的OSTicket容器名>,看日志里的具体报错——是主机解析失败?连接超时?还是权限不够?根据报错针对性解决比瞎试有用多了。
内容的提问来源于stack exchange,提问作者Nathan Walker

