MariaDB 和 HAProxy(集群)的连接问题
Connection issue with MariaDB and HAProxy (cluster)
我的 haproxy 运行 虚拟机和集群的连接有问题。让我解释一下这个问题。
我用 MariaDB(IP 192.168.0.1 和 192.168.0.2)和 haproxy 主机(IP 192.168.0.3)设置了 2 个 galera 集群机器。我几乎遵循了我在互联网上找到的所有教程,但我总是遇到同样的问题:我无法连接并从 haproxy 执行任何查询
实际状态:
加莱拉工作正常
root@db1:# mysql -u root -pPASSWORD -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'
+--------------+
| cluster size |
+--------------+
| 2 |
+--------------+
haproxy 已安装好,数据库中存在具有所有权限的用户。 haproxy 的配置文件如下:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 1024
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats.sock mode 600 level admin
stats timeout 2m
defaults
log global
mode http
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 1024
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
listen haproxy-monitoring
bind *:80
mode http
stats enable
stats show-legends
stats refresh 5s
stats uri /
stats realm Statistics
stats auth User:Password
stats admin if TRUE
frontend lb1db
bind *:3306
default_backend galera-cluster
backend galera-cluster
balance roundrobin
server db1 192.168.0.1:3306 check weight 1
server db2 192.168.0.2:3306 check weight 1
统计信息屏幕显示虚拟机和 运行
my.cnf如下:
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.0.94,192.168.0.93
wsrep_node_addres=192.168.0.1. #vm1 IP; in the other config is present the vm2 IP
wsrep_node_name=db1
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_cluster_name="Cluster_name"
wsrep_sst_method=rsync
bind-address=192.168.0.1 #vm1 IP; in the other config is present the vm2 IP
当我尝试在 haproxy 中执行查询时,我得到以下结果:
mysql -u root -pPASSWORD --host=192.168.0.3 --port=3306
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.0.3' (111 "Connection refused")
正如我所写的那样,我遵循了几个教程,但问题总是一样的。谁能帮帮我?
您正在使用的命令正在尝试连接到 HAProxy 服务器上的数据库服务。据我从您的描述中可以看出,此服务器(192.168.0.3)上没有数据库服务运行。
如果您想连接到数据库服务,则需要使用 Galera 集群中其中一台服务器的 IP 地址或主机名 - 例如192.168.0.1 或 192.168.0.2.
您必须在数据库服务中创建一个用户来授权这种访问(从阅读您的 post 来看,您似乎没有这样做)。其次,不建议启用任何远程访问 'root' 。
您可以在数据库集群中创建一个远程用户并授予一些权限。登录到集群中的一台服务器并以root身份登录到数据库:
# mysql -u root -p
然后创建具有远程访问权限的用户并授予一些权限;
MariaDB [(none)]> create user 'haproxy'@'192.168.0.3'identified by 'aPassword';
MariaDB [(none)]> GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'haproxy'@'192.168.0.3';
MariaDB [(none)]> FLUSH PRIVILEGES;
然后尝试使用来自 HAProxy 服务器的帐户 'haproxy':
# mysql -u haproxy --host 192.168.0.1 -p
现在应该可以了。我还注意到的一件事是,在集群的 my.cnf 中,集群服务器的行包含实际服务器地址以外的地址:
wsrep_cluster_address=gcomm://192.168.0.94,192.168.0.93
如果这实际上不是复制粘贴的产物,请确保这些与您的配置一致。
祝你好运!
我的 haproxy 运行 虚拟机和集群的连接有问题。让我解释一下这个问题。 我用 MariaDB(IP 192.168.0.1 和 192.168.0.2)和 haproxy 主机(IP 192.168.0.3)设置了 2 个 galera 集群机器。我几乎遵循了我在互联网上找到的所有教程,但我总是遇到同样的问题:我无法连接并从 haproxy 执行任何查询
实际状态:
加莱拉工作正常
root@db1:# mysql -u root -pPASSWORD -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"' +--------------+ | cluster size | +--------------+ | 2 | +--------------+
haproxy 已安装好,数据库中存在具有所有权限的用户。 haproxy 的配置文件如下:
global log 127.0.0.1 local0 log 127.0.0.1 local1 notice maxconn 1024 user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats.sock mode 600 level admin stats timeout 2m defaults log global mode http option tcplog option dontlognull retries 3 option redispatch maxconn 1024 timeout connect 5000ms timeout client 50000ms timeout server 50000ms listen haproxy-monitoring bind *:80 mode http stats enable stats show-legends stats refresh 5s stats uri / stats realm Statistics stats auth User:Password stats admin if TRUE frontend lb1db bind *:3306 default_backend galera-cluster backend galera-cluster balance roundrobin server db1 192.168.0.1:3306 check weight 1 server db2 192.168.0.2:3306 check weight 1
统计信息屏幕显示虚拟机和 运行
my.cnf如下:
[galera] wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so wsrep_cluster_address=gcomm://192.168.0.94,192.168.0.93 wsrep_node_addres=192.168.0.1. #vm1 IP; in the other config is present the vm2 IP wsrep_node_name=db1 binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 wsrep_cluster_name="Cluster_name" wsrep_sst_method=rsync bind-address=192.168.0.1 #vm1 IP; in the other config is present the vm2 IP
当我尝试在 haproxy 中执行查询时,我得到以下结果:
mysql -u root -pPASSWORD --host=192.168.0.3 --port=3306
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.0.3' (111 "Connection refused")
正如我所写的那样,我遵循了几个教程,但问题总是一样的。谁能帮帮我?
您正在使用的命令正在尝试连接到 HAProxy 服务器上的数据库服务。据我从您的描述中可以看出,此服务器(192.168.0.3)上没有数据库服务运行。
如果您想连接到数据库服务,则需要使用 Galera 集群中其中一台服务器的 IP 地址或主机名 - 例如192.168.0.1 或 192.168.0.2.
您必须在数据库服务中创建一个用户来授权这种访问(从阅读您的 post 来看,您似乎没有这样做)。其次,不建议启用任何远程访问 'root' 。 您可以在数据库集群中创建一个远程用户并授予一些权限。登录到集群中的一台服务器并以root身份登录到数据库:
# mysql -u root -p
然后创建具有远程访问权限的用户并授予一些权限;
MariaDB [(none)]> create user 'haproxy'@'192.168.0.3'identified by 'aPassword';
MariaDB [(none)]> GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'haproxy'@'192.168.0.3';
MariaDB [(none)]> FLUSH PRIVILEGES;
然后尝试使用来自 HAProxy 服务器的帐户 'haproxy':
# mysql -u haproxy --host 192.168.0.1 -p
现在应该可以了。我还注意到的一件事是,在集群的 my.cnf 中,集群服务器的行包含实际服务器地址以外的地址:
wsrep_cluster_address=gcomm://192.168.0.94,192.168.0.93
如果这实际上不是复制粘贴的产物,请确保这些与您的配置一致。
祝你好运!