ThingWorx 고가용성을 위한 부하 분산
ThingWorx HA 구성을 위해서는 하나 또는 두 개의 부하 분산이 필요합니다.
• 하나는 ThingWorx Connection Servers로 트래픽을 전달하기 위한 것입니다. ThingWorx Connection Servers가 배포의 일부일 때만 필요합니다.
• 다른 하나는 현재 리더인 ThingWorx 서버로 트래픽을 전달하기 위한 것입니다. 이 부하 분산은 모든 ThingWorx HA 구성에서 필요합니다.
일반 부하 분산 요구사항
• 부하 분산은 자체의 고가용성 구성 내에서 작동해야 합니다.
• WebSocket 트래픽을 라우팅할 수 있습니다.
• 정적(또는 고정) 세션을 관리할 수 있습니다.
• (선택 사항) SSL 종료를 관리할 수 있습니다.
ThingWorx Connection Servers에 대한 부하 분산
연결 서버에 대한 부하 분산이 필요한 경우 부하 분산이 모든 ThingWorx 트래픽을 수신하고 다음 규칙에 따라 분산해야 합니다.
• 부하 분산은 WebSocket 트래픽만 연결 서버로만 전달해야 합니다. 사용자 트래픽 및 WebSocket 트래픽이 아닌 다른 트래픽은 ThingWorx 리더로 라우팅하는 다른 부하 분산으로 전달되어야 합니다.
• 최상의 성능을 위해 자산의 WebSocket 트래픽이 항상 고정 세션을 사용 중인 동일한 연결 서버로 이동해야 합니다.
◦ 해당 연결 서버가 오프라인 상태가 되면 해당 자산의 트래픽이 다른 연결 서버로 전달되어야 합니다.
◦ 자산과 연결 서버 간의 세션이 비활성 상태가 되면 사용 가능한 연결 서버를 사용하여 새 세션을 설정할 수 있습니다.
ThingWorx 서버에 대한 부하 분산
ThingWorx 서버로의 모든 트래픽(사용자, 자산, 연결 서버 등)은 이 부하 분산을 통해 라우팅되어야만 현재 ThingWorx 리더로 전달됩니다.
부하 분산은 각 ThingWorx 서버에서 정기적으로 서비스를 호출합니다. 이 서비스는 리더 상태로 응답합니다. 리더 코드를 부하 분산에 반환하는 ThingWorx 서버가 사용자 및 자산 트래픽을 수신합니다. 대기 코드를 반환하는 ThingWorx 서버는 트래픽을 수신하지 않습니다.
다음 조건을 충족시킬 수 있는 부하 분산을 사용할 수 있습니다.
• 부하 분산이 정기적으로 다음 GET 문을 ThingWorx 리더로 보내고 응답에 대해 작동합니다.
GET /Thingworx/Admin/HA/LeaderCheck
HTTP/1.0\r\nAuthorization:\ Basic\ <base64-encoded-string>
• 여기서 <base64-encoded-string>은 base64 형식으로 인코딩된 user:password 문자열이며 platform-settings.json의 LoadBalancerBase64EncodedCredentials 설정 값과 일치합니다.
• 부하 분산은 15-20초마다 이 호출을 각 ThingWorx 리더로 보내야 합니다.
• ThingWorx 리더로부터의 정상 응답은 응답 코드 200입니다.
◦ 리더가 응답 코드 200을 보내는 동안 대기 서버는 400, 401 또는 503 응답 코드를 반환하고 있어야 합니다.
• 리더가 응답 코드 200이 아닌 세 개의 응답 코드를 보낼 경우:
◦ 부하 분산에서는 대기 ThingWorx 서버에서 응답 코드 200을 확인해야 합니다.
◦ 이제 응답 코드 200을 보내는 대기 서버가 새 ThingWorx 리더로 간주되어야 합니다.
◦ 모든 트래픽은 새 ThingWorx 리더로 전달되어야 합니다.
위 요구사항을 충족시킬 수 있는 모든 부하 분산을 ThingWorx HA 배포에 사용할 수 있습니다. 부하 분산 구성 예제는
HAProxy 예제에 나와 있습니다. 이 예제는 HAProxy(
http://www.haproxy.org)를 기반으로 합니다.