web-dev-qa-db-ja.com

keepalived-接続がなく、ポートでリッスンしませんか?

次のサーバー:

....:100::10 mysql1 master
....:100::20 mysql2 master
....:100::30 loadbalancer (keepalived) with virtual ip ...:100::40

構成:

vrrp_instance V1 {
    state MASTER
    interface eth0
    lvs_sync_daemon_inteface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    smtp_alert

    virtual_ipaddress {
       ...:100::40
    }
}

virtual_server ...:100::40 3306 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    protocol TCP

    real_server ...:100::10 3306 {
            weight 50
            TCP_CHECK {
                    connect_timeout 3
                    connect_port 3306
            }
    }

    real_server ...:100::20 3306 {
            weight 10
            TCP_CHECK {
               connect_timeout 3
               connect_port 3306
            }
    }

}

両方のサーバーへの直接接続が機能しています:(bind-address = ::およびip6tablesファイアウォールがアクティブではありません)

$ mysql -uroot -p -h...:100::10
Welcome to the MySQL monitor.  Commands end with ; or \g.

$ mysql -uroot -p -h...:100::20
Welcome to the MySQL monitor.  Commands end with ; or \g.

...:100:30もちろんそうではありません:

$ mysql -uroot -p -h...:100::30
ERROR 2003 (HY000): Can't connect to MySQL server on '...:100::30' (111)

残念ながら、...:100 :: 40のタイムアウトが発生します

$ mysql -uroot -p -h...:100::40
ERROR 2003 (HY000): Can't connect to MySQL server on '...:100::40' (110)

ipvsadmは私には大丈夫に見えます:

# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port      Forward Weight ActiveConn InActConn
TCP  [...:100::40]:mysql     wrr
  -> [...:100::10]:mysql     Route   50     0          0

# ifconfig
eth0      Link encap:Ethernet  HWaddr ..........
          inet6 addr: ............/64 Scope:Link
          inet6 addr: ...:100::30/64 Scope:Global
          inet6 addr: ...:100::40/128 Scope:Global

私の問題は、keepalivedがポート3306でリッスンしていないことです。

# netstat -nlta
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN

# keepalived --help
Keepalived v1.2.2 (12/18,2011)

どこに問題がありますか?

2
da_didi

各実サーバーは構成を変更する必要があります。そうしないと、仮想IPアドレスで応答しないため(例:...:100:40)、ネットワークパケットが破棄されます。

# nano /etc/sysctl.conf
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2

または直接

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

ローカルループバックに仮想IPアドレスを追加する必要があります。

ip addr add 2a00:14e0:600:1200:100::40 dev lo

そして、/ etc/network/interfacesを編集して、再起動後も変更が持続するようにします。

iface eth0 inet6 static
    address ...:100::20
    netmask 64
    gateway ...::1
    post-up ip addr add ...:100::40 dev lo

現在、最初の接続はタイムアウトしますが、2番目の接続は正常に機能しています。これをテストします。

1
da_didi