私は3つのサーバー(まだルーティングなし)で構成されたフラットネットワークを持っています。
virtual_server 10.0.0.80 3306 {
delay_loop 2
lb_algo rr
lb_kind DR
protocol TCP
real_server 10.0.0.81 3306 {
weight 10
TCP_CHECK {
connect_timeout 1
}
}
real_server 10.0.0.82 3306 {
weight 10
TCP_CHECK {
connect_port 3306
connect_timeout 1
}
}
real_server 10.0.0.83 3306 {
weight 10
TCP_CHECK {
connect_port 3306
connect_timeout 1
}
}
}
keepalived(サービスとして)はすべてのボックスで動作し、失敗します。ただし、virtual_serverは現在IPを持つkeepalivedボックスのページ(またはデータベースクエリなど)のみを提供し、残りの2/3の時間(加重平均)では失敗します。
例:BOX1に接続保持アドレスがある場合、要求はWORK、FAIL、FAILを繰り返し、「box1」でのみ応答します。 BOX2がコネクション保持アドレスとして使用されると、要求はFAIL、WORK、FAILになり、「box2」のみが応答されます。
保持されていないIPボックスは、接続維持IPで応答する必要があることを所有していないか、または知らないため、クエリへの応答を拒否すると確信しています。保持されていないボックスが常に応答するようにする方法は?
これは私の最初の接続維持設定ではありませんが、最初のvirtual_server設定です。ロードバランサーのみが必要で、HAProxyが提供する高可用性は必要ありません。
ベストアンサー1
助けてくれてありがとうserverfault.comの質問から私の問題を解決することができました。
短い答え:
仮想インターフェイスに仮想IPを追加しnet.ipv4.conf.default.accept_source_route
ます0
。
長い答え:
仮想インターフェイスの目的は、サービスを停止して開始することなく、接続の維持を簡単に無効にする/アクティブ化/障害を回避することです。 VIPを別のサーバーにフェールオーバーするには、仮想インターフェイスを上下に移動するだけです。
私はこれを簡単にするためにシステムサービスの作成呼ぶ/usr/local/src/dummy.service
。
[Unit]
Description=Create dummy network interface
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/ip link set dummy0 up
ExecStop=/usr/sbin/ip link set dummy0 down
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
その後、有効にします。
# systemctl enable /usr/local/src/dummy.service
また、仮想モジュールドライバをロードしました。
文書/etc/modules-load.d/dummy.conf
:
dummy
文書/etc/modprobe.d/dummy.conf
:
alias dummy0 dummy
options dummy numdummies=1
shutdown -r now
この時点で動作することを証明する方が簡単だと思いますが、必要に応じてmodprobeを再ロードできます。
これにより、新しいインターフェイスが表示されます。
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
3: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/ether 12:23:34:45:56:7a brd ff:ff:ff:ff:ff:ff
valid_lft forever preferred_lft forever
keepalived.conf
私はvrrp_instanceを追跡しています。
vrrp_instance mysql {
...
track_interface {
dummy0
}
...
}
これは私の仕事で変更が必要なものです。
dummy0
インターフェイスにVIP IPアドレスを追加する必要があります。修正/usr/local/src/dummy.service
と# systemctl daemon-reload
ExecStart=/usr/sbin/ip link set dummy0 up && ip addr add 10.0.0.100 dev dummy0
すべてのネットワークデバイスがクエリに応答して再起動できるように、ソースルーティングが有効になっていないことを確認する必要があります。
# cat "net.ipv4.conf.default.access_source_route = 0" > /etc/sysctl.d/10-keepalived.conf
完全性のために、私の全体の内容は次のとおりです/etc/sysctl.d/10-keepalived.conf
。
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.conf.eno16777736.arp_ignore = 1
net.ipv4.conf.eno16777736.arp_announce = 2
net.ipv4.conf.eno16777736.rp_filter = 2
net.ipv4.conf.default.accept_source_route = 0