내 목표는 가상 IP(VIP)를 사용하여 2개 노드 HTTP 로드 밸런서를 구현하는 것입니다. 이 작업을 위해 나는 pacemaker
(가상 IP 스위칭)을 선택했고캐디HTTP 로드 밸런서용. 로드 밸런서 선택은 이 질문의 요점이 아닙니다. :)
내 요구 사항은 간단합니다. 정상적으로 작동하는 Caddy 인스턴스가 실행되고 있는 호스트에 가상 IP를 할당하고 싶습니다.
Pacemaker를 사용하여 구현한 방법은 다음과 같습니다.
# Disable stonith feature
pcs property set stonith-enabled=false
# Ignore quorum policy
pcs property set no-quorum-policy=ignore
# Setup virtual IP
pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=123.123.123.123
# Setup caddy resource, using SystemD provider. By default it runs on one instance at a time, so clone it and cloned one by default runs on all nodes at the same time.
# https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/configuring_the_red_hat_high_availability_add-on_with_pacemaker/ch-advancedresource-haar
pcs resource create caddy systemd:caddy clone
# Enable constraint, so both VirtualIP assigned and application running _on the same_ node.
pcs constraint colocation add ClusterIP with caddy-clone INFINITY
그러나 가상 IP가 할당된 노드에 SSH를 통해 연결하면 Caddy 구성 파일이 잘못 구성되어 수행됩니다. systemctl restart caddy
잠시 후 Pacemaker가 캐디 시작 실패를 감지하고 간단히 stopped
상태로 설정합니다.
Pacemaker가 SystemD 리소스를 상태로 전환하는 대신 계속 다시 시작하도록 하려면 어떻게 해야 합니까 stopped
?
게다가 구성 파일을 수정하고 실행하면 systemctl restart caddy
시작되지만 페이스메이커는 계속해서 stopped
상태를 유지합니다.
그리고 무엇보다도 다른 노드를 중지하면 다음과 같은 이유로 가상 IP가 어디에도 할당되지 않습니다.
# Enable constraint, so both VirtualIP assigned and application running _on the same_ node.
pcs constraint colocation add ClusterIP with caddy-clone INFINITY
누군가 내가 잘못하고 있는 일의 올바른 방향을 알려줄 수 있습니까?
답변1
Pacemaker에서 특정 오류는 치명적인 것으로 간주되며 오류가 발생하면 수동으로 정리해야 합니다(실패한 노드를 펜싱하여 정리하는 노드 수준 펜싱을 구성하지 않은 경우).
start
작업 실패가 치명적이지 않다는 것을 Pacemaker에 알려야 합니다 . 또한 일반적으로 펜싱 없이 클러스터에서 몇 초 후에 작업 실패를 자동으로 정리하는 실패 시간 초과를 설정합니다.
pcs property set start-failure-is-fatal=false
pcs property set failure-timeout=300