
https://gitlab.isc.org/isc-projects/kea/-/wikis/designs/High-Availability-Design
過去に以下のような記事を書きましたが、現在はISC Kea DHCP serverを使用しているのでこちらでのHA(Hot Standby)構成の設定方法について記事を書いておくことにしました。
確認環境
- Ubuntu 18.04.2 AArch64
- ISC Kea 1.7.4
- kea_1(primary): (dns03) / 192.168.1.4
- kea_2(secondary): (dns02) / 192.168.1.3
設定方法
以下公式ドキュメントの”15.15. ha: High Availability”のサンプルコードが答えそのものです。
以下のような設定ファイルをactive
、standby
のサーバ両方に設定します。this-server-name
だけは固有の設定値になるので、それぞれのサーバを識別できる値を設定しましょう。
"Dhcp4": {
"hooks-libraries": [{
"library": "/usr/local/lib/kea/hooks/libdhcp_lease_cmds.so",
"parameters": { }
}, {
"library": "/usr/local/lib/kea/hooks/libdhcp_ha.so",
"parameters": {
"high-availability": [{
"this-server-name": "kea_1",
"mode": "hot-standby",
"heartbeat-delay": 10000,
"max-response-delay": 10000,
"max-ack-delay": 5000,
"max-unacked-clients": 5,
"peers": [{
"name": "kea_1",
"url": "http://192.168.1.4:8080/",
"role": "primary",
"auto-failover": true
}, {
"name": "kea_2",
"url": "http://192.168.1.3:8080/",
"role": "standby",
"auto-failover": true
}]
}]
}
}],
"subnet4": [{
"subnet": "192.168.1.0/24",
"pools": [{
"pool": "192.168.1.100 - 192.168.1.129",
"client-class": "HA_kea_1"
}],
"option-data": [{
"name": "routers",
"data": "192.168.1.1"
}],
}]
}
パラメータについて
動作確認
まずActive
サーバを起動します。すると以下のようなlogが出力されると思います。HA構成で起動され、こちらのサーバがprimary
として認識されています。
2020-02-02 10:57:05.663 INFO [kea-dhcp4.ha-hooks/30] HA_LOCAL_DHCP_DISABLE local DHCP service is disabled while the kea_1 is in the WAITING state
2020-02-02 10:57:05.663 INFO [kea-dhcp4.ha-hooks/30] HA_SERVICE_STARTED started high availability service in hot-standby mode as primary server
2020-02-02 10:57:05.664 INFO [kea-dhcp4.dhcp4/30] DHCP4_STARTED Kea DHCPv4 server version 1.7.4 started
standby
であるkea_2
と通信が出来ないため、相手側はUNDEFINED
となり、ステータスとしてはPARTNER-DOWN
という扱いになります。
2020-02-02 10:57:16.676 WARN [kea-dhcp4.ha-hooks/30] HA_HEARTBEAT_COMMUNICATIONS_FAILED failed to send heartbeat to kea_2 (http://192.168.1.3:8080/): Connection refused
2020-02-02 10:57:16.676 INFO [kea-dhcp4.ha-hooks/30] HA_STATE_TRANSITION server transitions from WAITING to PARTNER-DOWN state, partner state is UNDEFINED
2020-02-02 10:57:16.677 INFO [kea-dhcp4.ha-hooks/30] HA_LEASE_UPDATES_DISABLED lease updates will not be sent to the partner while in PARTNER-DOWN state
2020-02-02 10:57:16.677 INFO [kea-dhcp4.ha-hooks/30] HA_LOCAL_DHCP_ENABLE local DHCP service is enabled while the kea_1 is in the PARTNER-DOWN state
2020-02-02 10:57:27.692 WARN [kea-dhcp4.ha-hooks/30] HA_HEARTBEAT_COMMUNICATIONS_FAILED failed to send heartbeat to kea_2 (http://192.168.1.3:8080/): Connection refused
standby側のkea_2を起動します。kea_2側のlogは以下の通りです。
Active側からリース情報を取得し、ローカルのリース情報データベースを更新します。ここでは15個のリース情報を68.271ミリ秒で取得し同期が取られました。その後は相手側がダウンしない限り準備完了状態(READY
)に状態移行します。
2020-02-02 10:58:05.755 INFO [kea-dhcp4.ha-hooks/28] HA_STATE_TRANSITION server transitions from WAITING to SYNCING state, partner state is PARTNER-DOWN
2020-02-02 10:58:05.756 INFO [kea-dhcp4.ha-hooks/28] HA_LEASE_UPDATES_DISABLED lease updates will not be sent to the partner while in SYNCING state
2020-02-02 10:58:05.758 INFO [kea-dhcp4.ha-hooks/28] HA_SYNC_START starting lease database synchronization with kea_1
2020-02-02 10:58:05.807 INFO [kea-dhcp4.ha-hooks/28] HA_LEASES_SYNC_LEASE_PAGE_RECEIVED received 15 leases from kea_1
2020-02-02 10:58:05.827 INFO [kea-dhcp4.ha-hooks/28] HA_SYNC_SUCCESSFUL lease database synchronization with kea_1 completed successfully in 68.271 ms
2020-02-02 10:58:05.828 INFO [kea-dhcp4.ha-hooks/28] HA_STATE_TRANSITION server transitions from SYNCING to READY state, partner state is PARTNER-DOWN
2020-02-02 10:58:05.829 INFO [kea-dhcp4.ha-hooks/28] HA_LEASE_UPDATES_DISABLED lease updates will not be sent to the partner while in READY state
そしてActive側から”ha-heartbeat
“コマンドを受信したことで状態をREADY
からHOT-STANDBY
状態に移行します。パートナーの状態はHOT-STANDBY
です
2020-02-02 10:58:10.834 INFO [kea-dhcp4.commands/28] COMMAND_RECEIVED Received command 'ha-heartbeat'
2020-02-02 10:58:15.851 INFO [kea-dhcp4.ha-hooks/28] HA_STATE_TRANSITION server transitions from READY to HOT-STANDBY state, partner state is HOT-STANDBY
2020-02-02 10:58:15.852 INFO [kea-dhcp4.ha-hooks/28] HA_LEASE_UPDATES_ENABLED lease updates will be sent to the partner while in HOT-STANDBY state
2020-02-02 10:58:15.852 INFO [kea-dhcp4.ha-hooks/28] HA_LOCAL_DHCP_ENABLE local DHCP service is enabled while the kea_2 is in the HOT-STANDBY state
2020-02-02 10:58:20.856 INFO [kea-dhcp4.commands/28] COMMAND_RECEIVED Received command 'ha-heartbeat'
Active側はstandby側からの”ha-heartbeat”コマンドを受信することで同期状態に移行しリース情報の同期がstandby側と行われます。これでHA構成が動作しDHCPからのIPアドレス配布がPrimary側から行われます。
2020-02-02 10:58:00.737 INFO [kea-dhcp4.commands/28] COMMAND_RECEIVED Received command 'ha-heartbeat'
2020-02-02 10:58:05.755 INFO [kea-dhcp4.ha-hooks/28] HA_STATE_TRANSITION server transitions from WAITING to SYNCING state, partner state is PARTNER-DOWN
2020-02-02 10:58:05.756 INFO [kea-dhcp4.ha-hooks/28] HA_LEASE_UPDATES_DISABLED lease updates will not be sent to the partner while in SYNCING state2020-02-02 10:58:05.758 INFO [kea-dhcp4.ha-hooks/28] HA_SYNC_START starting lease database synchronization with kea_1
2020-02-02 10:58:05.807 INFO [kea-dhcp4.ha-hooks/28] HA_LEASES_SYNC_LEASE_PAGE_RECEIVED received 15 leases from kea_1
2020-02-02 10:58:05.827 INFO [kea-dhcp4.ha-hooks/28] HA_SYNC_SUCCESSFUL lease database synchronization with kea_1 completed successfully in 68.271 ms
2020-02-02 10:58:05.828 INFO [kea-dhcp4.ha-hooks/28] HA_STATE_TRANSITION server transitions from SYNCING to READY state, partner state is PARTNER-DOWN
2020-02-02 10:58:05.829 INFO [kea-dhcp4.ha-hooks/28] HA_LEASE_UPDATES_DISABLED lease updates will not be sent to the partner while in READY state
2020-02-02 10:58:10.834 INFO [kea-dhcp4.commands/28] COMMAND_RECEIVED Received command 'ha-heartbeat'
2020-02-02 10:58:15.851 INFO [kea-dhcp4.ha-hooks/28] HA_STATE_TRANSITION server transitions from READY to HOT-STANDBY state, partner state is HOT-STANDBY
2020-02-02 10:58:15.852 INFO [kea-dhcp4.ha-hooks/28] HA_LEASE_UPDATES_ENABLED lease updates will be sent to the partner while in HOT-STANDBY state
2020-02-02 10:58:15.852 INFO [kea-dhcp4.ha-hooks/28] HA_LOCAL_DHCP_ENABLE local DHCP service is enabled while the kea_2 is in the HOT-STANDBY state
そして、Primary側がDOWN
すると、HA状態はPARTNER-DOWN
へ移行し、相手側のステータスがUNDEFINED
(未定義)に切り替わります。そして以下のメッセージが出力されている通り、 [highlight_bash]HA_LEASE_UPDATES_DISABLED lease updates will not be sent to the partner while in PARTNER-DOWN state[/highlight_bash] リースの更新は、PARTNER-DOWN
状態の間はパートナーに送信されず、secondary側だけで行われることが宣言されます。
2020-02-04 18:54:34.399 WARN [kea-dhcp4.ha-hooks/28] HA_HEARTBEAT_COMMUNICATIONS_FAILED failed to send heartbeat to kea_1 (http://192.168.1.4:8080/): Connection refused
2020-02-04 18:54:34.400 INFO [kea-dhcp4.ha-hooks/28] HA_STATE_TRANSITION server transitions from HOT-STANDBY to PARTNER-DOWN state, partner state is UNDEFINED
2020-02-04 18:54:34.400 INFO [kea-dhcp4.ha-hooks/28] HA_LEASE_UPDATES_DISABLED lease updates will not be sent to the partner while in PARTNER-DOWN state
2020-02-04 18:54:34.912 INFO [kea-dhcp4.leases/28] DHCP4_LEASE_ADVERT [hwtype=1 04:0c:ce:da:10:1a], cid=[01:04:0c:ce:da:10:1a], tid=0xc8cfbe11: lease 192.168.1.102 will be advertised2020-02-04 18:54:35.927 INFO [kea-dhcp4.leases/28] DHCP4_LEASE_ALLOC [hwtype=1 04:0c:ce:da:10:1a], cid=[01:04:0c:ce:da:10:1a], tid=0xc8cfbe11: lease 192.168.1.102 has been allocated for 86400 seconds
切り戻しについても、Primary側が復帰するとsecondary側ではPrimary側からのコマンドを受信し、それによってPrimary側が復帰したと判断し、相手側の状態をREADY
、そしてHA状態をHOT-STANDBY
へ切り替えます。
これでHA構成が通常状態に切り戻されます。
2020-02-04 18:59:57.717 INFO [kea-dhcp4.commands/28] COMMAND_RECEIVED Received command 'ha-heartbeat'
2020-02-04 18:59:57.733 INFO [kea-dhcp4.commands/28] COMMAND_RECEIVED Received command 'dhcp-disable'
2020-02-04 18:59:57.744 INFO [kea-dhcp4.commands/28] COMMAND_RECEIVED Received command 'lease4-get-page'
2020-02-04 18:59:57.780 INFO [kea-dhcp4.commands/28] COMMAND_RECEIVED Received command 'dhcp-enable'
2020-02-04 19:00:03.796 INFO [kea-dhcp4.ha-hooks/28] HA_STATE_TRANSITION server transitions from PARTNER-DOWN to HOT-STANDBY state, partner state is READY
2020-02-04 19:00:03.797 INFO [kea-dhcp4.ha-hooks/28] HA_LEASE_UPDATES_ENABLED lease updates will be sent to the partner while in HOT-STANDBY state
構成の状態については公式ドキュメントの以下に詳細があります。