2013-04-29 5 views
0

두 개의 IIS 서버의로드 균형을 조정하기 위해 ldirectord를 사용하고 있습니다. 나는 어떤 연결을 열실제 서버가 죽을 때 ldirectord가 연결을 전송하지 않습니다.

  1. :로드 균형 조정이 제대로 작동

    autoreload = yes 
    quiescent = yes 
    checkinterval = 1 
    negotiatetimeout = 2 
    emailalertfreq = 60 
    emailalert = [email protected] 
    failurecount = 1 
    
    virtual = 172.22.9.100:80 
        checktimeout = 1 
        checktype = negotiate 
        protocol = tcp 
        real = 172.22.1.133:80 masq 2048 
        real = 172.22.1.134:80 masq 2048 
        request = "alive.htm" 
        receive = "I am not a zombie" 
        scheduler = wrr 
    

    , 실제 서버는 그럼에도 불구하고 나는 간단한 테스트에 문제가 발생하고 볼 등 다음과 같습니다 ldirectord.cg은 다음과 같습니다 클라이언트 브라우저 (IE 8)에서 실제 서버에서 호스팅되는 사이트에 연결

  2. 위의 연결을 0으로 설정하고 다른 실제 서버를 활성 상태로 유지하는 실제 서버의 무게를 캔디합니다.
  3. 페이지를 재생성하기 위해 ctions

ipvsadm -Ln에서 볼 수있는 것은 연결이 여전히 "죽은"서버에 있다는 것입니다. 나는 "살아있는"서버로 전송하기 위해 최대 1 분 (브라우저 측에서 TCP 타임 아웃이 있다고 가정)을 기다려야합니다. 그리고이 1 분 안에 다시로드 버튼을 계속 누르면 연결이 "죽은"서버에 남아 TCP 시간 초과 카운터가 다시 시작됩니다.

내 질문은 :로드 균형 조정 NAT 모드에서 죽은 서버로 기존 연결을 리디렉션 할 수있는 방법이 있습니까 즉시 (또는 즉시 닫기)?

클라이언트 쪽에서 새로 고침을하면 연결이 "좀비"가 될 수 있다는 사실이 실망 스럽습니다. persistance가 사용되지 않고 다른 서버가 준비되어 있고 사용 가능하더라도 죽은 실제 서버에 바인딩됩니다.

이 시간 제한에 영향을주는 유일한 점은 테스트에 사용하는 IE8을 실행중인 Windows 컴퓨터에서 keepAliveTimeout을 변경하는 것입니다. 내가 dafault 값에서 60 초에서 30 초로 그것을 계산했을 때 연결은 30 초 후에 전송 될 수있었습니다. 클라이언트 설정이로드 밸런서와 같은 네트워크 구성 요소의 작동에 영향을 미칠 수 있다는 것은 매우 이상한 것 같습니다.

그리고 다른 점은 - ipvsadm의 출력에서 ​​"Inactive Conenctions"라는 컬럼이 무엇입니까? 어떤 연결이 비활성으로 간주됩니까?

또한 ipvsadm의 출력에는 TIME_WAIT 상태의 몇 가지 연결이 있습니다. 이게 뭐야?

모든 통찰력과 제안은 높이 평가됩니다!

건배, 콘스탄틴

PS : 다음은 구성에 대한 좀 더 정보입니다 :

# uname -a 
Linux 3.0.58-0.6.2-default #1 SMP Fri Jan 25 08:31:01 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux 

# ipvsadm -L 
IP Virtual Server version 1.2.1 (size=4096) 
Prot LocalAddress:Port Scheduler Flags 
    -> RemoteAddress:Port   Forward Weight ActiveConn InActConn 
TCP lb-mysite.com wrr 
    -> spwfe001.mysite.com:h Masq 10  0   0 
    -> spwfe002.mysite.com:h Masq 10  0   0 

# iptables -t nat -L 
Chain PREROUTING (policy ACCEPT) 
target  prot opt source    destination 

Chain INPUT (policy ACCEPT) 
target  prot opt source    destination 

Chain OUTPUT (policy ACCEPT) 
target  prot opt source    destination 

Chain POSTROUTING (policy ACCEPT) 
target  prot opt source    destination 
SNAT  all -- anywhere    anywhere   to:172.22.9.100 
SNAT  all -- anywhere    anywhere   to:172.22.1.130 


# ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 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 brd 127.255.255.255 scope host lo 
    inet 127.0.0.2/8 brd 127.255.255.255 scope host secondary lo 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN   qlen 1000 
    link/ether 00:50:56:a5:77:ae brd ff:ff:ff:ff:ff:ff 
    inet 192.168.8.216/22 brd 192.168.11.255 scope global eth0 
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN   qlen 1000 
link/ether 00:50:56:a5:77:af brd ff:ff:ff:ff:ff:ff 
inet 172.22.9.100/22 brd 172.22.11.255 scope global eth1:1 
inet 172.22.8.213/22 brd 172.22.11.255 scope global secondary eth1 
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 
    link/ether 00:50:56:a5:77:b0 brd ff:ff:ff:ff:ff:ff 
    inet 172.22.1.130/24 brd 172.22.1.255 scope global eth2 


# cat /proc/sys/net/ipv4/ip_forward 
1 
# cat /proc/sys/net/ipv4/vs/conntrack 
1 
# cat /proc/sys/net/ipv4/vs/expire_nodest_conn 
1 
# cat /proc/sys/net/ipv4/vs/expire_quiescent_template 
1 

답변

1

우선은 - 당신은 삭제할 필요가 0에 무게를 변경하여 캔트 테스트 ... 실패한 서버를 시뮬레이트하기 위해 ipvs 테이블의 항목.

님의 살아 죽은 서버를 유지하는 ldirectord을 말한 : 가 대기 = 예를 변경할 필요가있는 사항 : 당신처럼 는 대기 = 더는 (테이블 밖으로 항목을 추출 할)

같습니다 없다 다음 값이 제대로 설정 : expire_nodest_conn을 - BOOLEAN expire_quiescent_template - BOOLEAN를

설명 : 여기 https://www.kernel.org/doc/Documentation/networking/ipvs-sysctl.txt