前提・実現したいこと
Ansibleで、MariaDBのGalera Cluster、HAProxy、Keepalivedを構築しました。
HAProxyとKeepalivedの構築は、可用性かつ冗長構成がとれたGalera Clusterへのアクセスを可能にするためです。
Keepalivedの構築後に、DBサーバからVIP経由でデータベースに接続確認すると、エラーになります。
VIP経由の確認はSSTユーザー(galeraユーザー)を利用しています。
db1i(=db1i2):192.168.10.31
db2i(=db2i2):192.168.10.32
db3i(=db3i2):192.168.10.33
db_v1i:192.168.10.1
app1i:192.168.10.21
app2i:192.168.10.22
app3i:192.168.10.23
lb1i:192.168.10.11
lb2i:192.168.10.12
lb1e:10.0.0.11
lb2e:10.0.0.12
app_v1e:10.0.0.1
発生している問題・エラーメッセージ
[root@db1]# mysql -u galera -p -h 192.168.10.1 Enter password: ERROR 2013 (HY000): Lost connection to MySQL server at 'handshake: reading initial communication packet' , system error: 11
該当のソースコード
・MariaDB上でgaleraユーザーの設定や権限に問題ないことを確認 ・MariaDB [(none)]> select user, host from mysql.user; +-------------------------------------+ | user | host | +--------+----------------------------+ | galera | 192.168.10.0/255.255.255.0 | ・/etc/my.cnf.d/server.cnf(MariaDBの設定ファイル:db1i2) [galera] wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://192.168.10.31,192.168.10.32,192.168.10.33" binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=192.168.10.31 wsrep_cluster_name="MariaDB_Cluster" wsrep_node_name="db1i2" wsrep_node_address=192.168.10.31 wsrep_sst_method=rsync wsrep_sst_auth=galera:galera wsrep_on=ON ・/etc/my.cnf.d/server.cnf(MariaDBの設定ファイル:db2i2) [galera] wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://192.168.10.31,192.168.10.32,192.168.10.33" binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=192.168.10.32 wsrep_cluster_name="MariaDB_Cluster" wsrep_node_name="db2i2" wsrep_node_address=192.168.10.32 wsrep_sst_method=rsync wsrep_sst_auth=galera:galera wsrep_on=ON ・/etc/my.cnf.d/server.cnf(MariaDBの設定ファイル:db3i2) [galera] wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://192.168.10.31,192.168.10.32,192.168.10.33" binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=192.168.10.33 wsrep_cluster_name="MariaDB_Cluster" wsrep_node_name="db3i2" wsrep_node_address=192.168.10.33 wsrep_sst_method=rsync wsrep_sst_auth=galera:galera wsrep_on=ON ・/etc/haproxy/haproxy.cfg(haproxyの設定ファイル:db1i2,db2i2,db3i2) #--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 10000 user haproxy group haproxy daemon stats socket /var/run/haproxy.sock mode 600 level admin stats bind-process 1 nbproc 1 #--------------------------------------------------------------------- # common defaults that all the 'listen' and 'backend' sections will # use if not designated in their block #--------------------------------------------------------------------- defaults mode tcp log 127.0.0.1 local2 option tcplog option tcpka option dontlognull retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 10m timeout server 1m timeout check 10s maxconn 300 listen stats :10080 mode http stats enable stats uri / stats realm HAProxy\ Statistics stats auth haproxy:haproxy #--------------------------------------------------------------------- # main frontend which proxys to the backends #--------------------------------------------------------------------- frontend main 192.168.10.1:3306 default_backend db_cluster maxconn 1000 #--------------------------------------------------------------------- # the various backends #--------------------------------------------------------------------- backend db_cluster balance source #server db1i2 192.168.10.31:3306 check inter 2000 rise 2 fall 5 server db1i2 192.168.10.31:22 check inter 2000 rise 2 fall 5 #server db2i2 192.168.10.32:3306 check inter 2000 rise 2 fall 5 server db2i2 192.168.10.32:22 check inter 2000 rise 2 fall 5 #server db3i2 192.168.10.33:3306 check inter 2000 rise 2 fall 5 server db3i2 192.168.10.33:22 check inter 2000 rise 2 fall 5 ・/etc/keepalived/keepalived.conf(keepalivedの設定ファイル:db1i2) vrrp_script chk_haproxy { script "killall -0 haproxy" interval 2 timeout 3 raise 2 fall 4 } vrrp_instance VI_1 { interface enp0s8 state BACKUP virtual_router_id 21 priority 100 nopreempt advert_int 2 garp_master_refresh 2 virtual_ipaddress { 192.168.10.1 dev enp0s8 } track_script { chk_haproxy } } vrrp_sync_group VG_SYNC_GROUP { group { VI_1 } } ・/etc/keepalived/keepalived.conf(keepalivedの設定ファイル:db2i2) vrrp_script chk_haproxy { script "killall -0 haproxy" interval 2 timeout 3 raise 2 fall 4 } vrrp_instance VI_1 { interface enp0s8 state BACKUP virtual_router_id 21 priority 50 nopreempt advert_int 2 garp_master_refresh 2 virtual_ipaddress { 192.168.10.1 dev enp0s8 } track_script { chk_haproxy } } vrrp_sync_group VG_SYNC_GROUP { group { VI_1 } } ・/etc/keepalived/keepalived.conf(keepalivedの設定ファイル:db3i2) vrrp_script chk_haproxy { script "killall -0 haproxy" interval 2 timeout 3 raise 2 fall 4 } vrrp_instance VI_1 { interface enp0s8 state BACKUP virtual_router_id 21 priority 50 nopreempt advert_int 2 garp_master_refresh 2 virtual_ipaddress { 192.168.10.1 dev enp0s8 } track_script { chk_haproxy } } vrrp_sync_group VG_SYNC_GROUP { group { VI_1 } }
試したこと
■(試したこと)⇒ 接続成功(〇)/ 接続失敗(×)
・MariaDB上でgaleraユーザーの設定や権限に問題ないことを確認(詳細はソースコード欄に記述)
・journalctl、MariaDBのエラーログ、/var/log/messages、/var/log/secureにエラーログなし
・DBサーバからVIPへpingOK
・mysql -u user -p -h hostコマンドにおいて、ユーザーがgaleraユーザーの場合、ホストがDBサーバでは、DB接続可能。ホストがVIPでは、DB接続不可。 ⇒ ×(DB接続不可のエラー出力はエラーメッセージ欄に記述)
・すべてのDBサーバの/etc/hosts.allowにmysqld: ALLを追記 ⇒ ×
・ルータのポート開放(DBサーバに対して4444/tcp, 4567/tcp, 4568/tcp、VIPに対して3306/tcp) ⇒ ×
・ホストOS(Windows10)のWindowsDefenderファイアウォールで3306/tcp, 4444/tcp, 4567/tcp, 4568/tcpのポート開放 ⇒ ×
・firewalldでzone=trustedに対して、3306/tcp, 4444/tcp, 4567/tcp, 4568/tcpのポート開放 ⇒ ×
・nmap -Pn VIP → 3306/tcp open mysql, 4444/tcp closed krb524, 4567/tcp open tram
・VIPアドレスをすべてのDBサーバのループバックアドレスに設定 ⇒ ×(詳細はソースコード欄に記述)
補足情報(FW/ツールのバージョンなど)
Ansible: 2.9.21
MariaDB: 10.3.30
ゲストOS: CentOS 7.9
ホストOS:Windows10
仮想環境: VirtualBox
回答1件
あなたの回答
tips
プレビュー