感谢您看到这个!
我正在一个项目中工作,我想使用 docker-compose 创建 3 个带有 HAProxy 负载均衡器的 MariaDB Galera Cluster 节点,这是
docker-compose.yml
文件:
version: "3.8"
services:
nodo1:
image: hauptmedia/mariadb:10.1
container_name: nodo1
hostname: node1
restart: on-failure
ports:
- 10001:3306
environment:
- MYSQL_ROOT_PASSWORD=test
- REPLICATION_PASSWORD=test
- MYSQL_DATABASE=matias
- MYSQL_USER=matias
- MYSQL_PASSWORD=test
- GALERA=On
- NODE_NAME=nodo1
- CLUSTER_NAME=maria_cluster
- CLUSTER_ADDRESS=gcomm://
command: --wsrep-new-cluster
nodo2:
image: hauptmedia/mariadb:10.1
container_name: nodo2
hostname: nodo2
restart: on-failure
links:
- nodo1
ports:
- 10002:3306
environment:
- REPLICATION_PASSWORD=test
- GALERA=On
- NODE_NAME=nodo2
- CLUSTER_NAME=maria_cluster
- CLUSTER_ADDRESS=gcomm://node1
nodo3:
image: hauptmedia/mariadb:10.1
container_name: nodo3
hostname: nodo3
restart: on-failure
links:
- nodo1
ports:
- 10003:3306
environment:
- REPLICATION_PASSWORD=test
- GALERA=On
- NODE_NAME=nodo3
- CLUSTER_NAME=maria_cluster
- CLUSTER_ADDRESS=gcomm://node1
haproxy:
image: haproxy:latest
container_name: haproxy
restart: on-failure
ports:
- 3306:3306
volumes:
- /home/ansible/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
MariaDB Galera Cluster 运行良好,我可以创建数据库并且复制在所有节点中工作,但是,错误出现在 HAProxy 中。这是
haproxy.cfg
文件:
global
maxconn 4096
log /dev/log local0
user root
group root
daemon
defaults
log global
mode tcp
option tcplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend galera_frontend
bind *:3306
mode tcp
option mysql-check user matias
default_backend galera_backend
backend galera_backend
mode tcp
balance roundrobin
option mysql-check user matias
server nodo1 nodo1:10001 check
server nodo2 nodo2:10002 check
server nodo3 nodo3:10003 check
当我启动 Compose 并使用命令
docker logs haproxy
这是输出:
[root@rockyLinuxLAB ansible]# docker logs haproxy
[NOTICE] (1) : haproxy version is 2.7.8-58c657f
[NOTICE] (1) : path to executable is /usr/local/sbin/haproxy
[WARNING] (1) : config : parsing [/usr/local/etc/haproxy/haproxy.cfg:20] : 'mysql-check' ignored because frontend 'galera_frontend' has no backend capability.
[ALERT] (1) : config : [/usr/local/etc/haproxy/haproxy.cfg:29] : 'server galera_backend/nodo2' : could not resolve address 'nodo2'.
[ALERT] (1) : config : [/usr/local/etc/haproxy/haproxy.cfg:30] : 'server galera_backend/nodo3' : could not resolve address 'nodo3'.
[ALERT] (1) : config : Failed to initialize server(s) addr.
[NOTICE] (1) : haproxy version is 2.7.8-58c657f
[NOTICE] (1) : path to executable is /usr/local/sbin/haproxy
[WARNING] (1) : config : parsing [/usr/local/etc/haproxy/haproxy.cfg:20] : 'mysql-check' ignored because frontend 'galera_frontend' has no backend capability.
[NOTICE] (1) : New worker (8) forked
[NOTICE] (1) : Loading success.
[WARNING] (8) : Server galera_backend/nodo1 is DOWN, reason: Layer4 connection problem, info: "Connection refused", check duration: 0ms. 2 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
[ALERT] (8) : sendmsg()/writev() failed in logger #1: No such file or directory (errno=2)
[WARNING] (8) : Server galera_backend/nodo2 is DOWN, reason: Layer4 connection problem, info: "Connection refused", check duration: 0ms. 1 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
[WARNING] (8) : Server galera_backend/nodo3 is DOWN, reason: Layer4 connection problem, info: "Connection refused", check duration: 0ms. 0 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
[ALERT] (8) : backend 'galera_backend' has no server available!`
制作此项目的原因是具有水平扩展和冗余,具有负载平衡器、Web 服务(nginx 容器)和数据库。