server-side/haproxy
HAProxy balance
C/H
2017. 7. 4. 11:27
balance <algorithm> [ <arguments> ] balance url_param <param> [check_post [<max_wait>]] Define the load balancing algorithm to be used in a backend. 백엔드에서 사용할로드 밸런싱 알고리즘을 정의. May be used in sections : defaults | frontend | listen | backend yes | no | yes | yes Arguments : <algorithm> is the algorithm used to select a server when doing load balancing. This only applies when no persistence information is available, or when a connection is redispatched to another server. <algorithm> may be one of the following : <algorithm>은 로드를 수행 할 때 서버를 선택하는 데 사용되는 알고리즘. 지속성 정보를 사용할 수 없거나 연결이 다른 서버에 다시 전달되는 경우에만 적용. <algorithm>은 다음 중 하나 일 수 있다. roundrobin Each server is used in turns, according to their weights. This is the smoothest and fairest algorithm when the server's processing time remains equally distributed. This algorithm is dynamic, which means that server weights may be adjusted on the fly for slow starts for instance. It is limited by design to 4095 active servers per backend. Note that in some large farms, when a server becomes up after having been down for a very short time, it may sometimes take a few hundreds requests for it to be re-integrated into the farm and start receiving traffic. This is normal, though very rare. It is indicated here in case you would have the chance to observe it, so that you don't worry. 각 서버는 가중치에 따라 순서대로 사용된다. 이것은 서버의 처리 시간이 균등하게 분산되어있을 때 가장 부드럽고 가장 공정한 알고리즘이다. 이 알고리즘은 동적이다. 즉, 에로 느린 시작을 위해 서버 가중치를 즉시 조정할 수 있습니다. 백엔드 당 4095 개의 활성 서버로 디자인에 의해 제한된다. 일부 대형 팜에서는 매우 짧은 시간 동안 서버가 다운 된 후 서버가 가동되는 경우 팜이 서버에 다시 통합되어 트래픽 수신을 시작해야하는 경우가 종종 있다. 매우 드물지만 이것은 정상입니다. 관찰 할 기회가 있기 때문에 여기에 표시되어 있으므로 걱정할 필요가 없습니다. static-rr Each server is used in turns, according to their weights. This algorithm is as similar to roundrobin except that it is static, which means that changing a server's weight on the fly will have no effect. On the other hand, it has no design limitation on the number of servers, and when a server goes up, it is always immediately reintroduced into the farm, once the full map is recomputed. It also uses slightly less CPU to run (around -1%). 각 서버는 가중치에 따라 순서대로 사용된다. 이 알고리즘은 정적이라는 점을 제외하고는 roundrobin과 유사하다. 즉, 서버의 가중치를 변경하면 효과가 없다. 반면에 서버 수에 대한 설계 제한이 없으며 서버가 가동되면 전체 맵을 다시 계산하면 항상 팜에 즉시 다시 도입됩니다. 또한 CPU 사용량도 약간 적습니다 (약 -1 %). leastconn The server with the lowest number of connections receives the connection. Round-robin is performed within groups of servers of the same load to ensure that all servers will be used. Use of this algorithm is recommended where very long sessions are expected, such as LDAP, SQL, TSE, etc... but is not very well suited for protocols using short sessions such as HTTP. This algorithm is dynamic, which means that server weights may be adjusted on the fly for slow starts for instance. 연결 수가 가장 적은 서버가 연결을 수신합니다. 라운드 로빈은 모든 서버가 사용되도록 동일한로드의 서버 그룹 내에서 수행됩니다. LDAP, SQL, TSE 등과 같이 매우 긴 세션이 예상되는 곳에서는이 알고리즘을 사용하는 것이 좋지만 HTTP와 같은 짧은 세션을 사용하는 프로토콜에는 적합하지 않습니다. 이 알고리즘은 동적입니다. 즉, 예를 들어 느린 시작을 위해 서버 가중치를 즉시 조정할 수 있습니다. first The first server with available connection slots receives the connection. The servers are chosen from the lowest numeric identifier to the highest (see server parameter "id"), which defaults to the server's position in the farm. Once a server reaches its maxconn value, the next server is used. It does not make sense to use this algorithm without setting maxconn. The purpose of this algorithm is to always use the smallest number of servers so that extra servers can be powered off during non-intensive hours. This algorithm ignores the server weight, and brings more benefit to long session such as RDP or IMAP than HTTP, though it can be useful there too. In order to use this algorithm efficiently, it is recommended that a cloud controller regularly checks server usage to turn them off when unused, and regularly checks backend queue to turn new servers on when the queue inflates. Alternatively, using "http-check send-state" may inform servers on the load. 사용 가능한 연결 슬롯이있는 첫번째 서버에 연결을 수신합니다. 서버는 가장 낮은 숫자 식별자에서 가장 높은 값으로 선택됩니다 (서버 매개 변수 "id"참조). 기본값은 팜의 서버 위치입니다. 서버가 maxconn 값에 도달하면 다음 서버가 사용됩니다. maxconn을 설정하지 않고이 알고리즘을 사용하는 것은 이치에 맞지 않습니다. 이 알고리즘의 목적은 항상 가장 적은 수의 서버를 사용하여 비 집중식 시간 동안 추가 서버의 전원을 끌 수있게하는 것입니다. 이 알고리즘은 서버 가중치를 무시하고 HTTP보다 RDP 또는 IMAP와 같은 긴 세션에 더 많은 이점을 제공하지만 유용 할 수도 있습니다. 이 알고리즘을 효율적으로 사용하려면 클라우드 컨트롤러가 서버 사용을 정기적으로 검사하여 사용하지 않을 때 서버의 사용을 중지하고 백엔드 대기열을 정기적으로 확인하여 대기열이 부풀려 질 때 새 서버를 켜도록하는 것이 좋습니다. 또는 "http-check send-state"를 사용하여 부하가 발생한 서버에 알릴 수 있습니다 source The source IP address is hashed and divided by the total weight of the running servers to designate which server will receive the request. This ensures that the same client IP address will always reach the same server as long as no server goes down or up. If the hash result changes due to the number of running servers changing, many clients will be directed to a different server. This algorithm is generally used in TCP mode where no cookie may be inserted. It may also be used on the Internet to provide a best-effort stickiness to clients which refuse session cookies. This algorithm is static by default, which means that changing a server's weight on the fly will have no effect, but this can be changed using "hash-type". 소스 IP 주소는 해싱되어 실행중인 서버의 총 가중치로 나뉘어 요청을받을 서버를 지정합니다. 이렇게하면 서버가 다운되거나 가동되지 않는 한 동일한 클라이언트 IP 주소가 항상 같은 서버에 도달하게됩니다. 실행중인 서버 수가 변경되어 해시 결과가 변경되면 많은 클라이언트가 다른 서버로 이동합니다. 이 알고리즘은 일반적으로 쿠키를 삽입 할 수없는 TCP 모드에서 사용됩니다. 세션 쿠키를 거부하는 고객에게 최선의 노력을 기울일 수 있도록 인터넷에서 사용할 수도 있습니다. 이 알고리즘은 기본적으로 정적입니다. 즉, 서버의 가중치를 변경하는 것은 아무 효과가 없지만 "해시 유형"을 사용하여 변경할 수 있습니다. uri This algorithm hashes either the left part of the URI (before the question mark) or the whole URI (if the "whole" parameter is present) and divides the hash value by the total weight of the running servers. The result designates which server will receive the request. This ensures that the same URI will always be directed to the same server as long as no server goes up or down. This is used with proxy caches and anti-virus proxies in order to maximize the cache hit rate. Note that this algorithm may only be used in an HTTP backend. This algorithm is static by default, which means that changing a server's weight on the fly will have no effect, but this can be changed using "hash-type". 이 알고리즘은 URI의 왼쪽 부분 (물음표 앞에) 또는 전체 URI ( "전체"매개 변수가있는 경우)를 해시하고 실행중인 서버의 총 무게로 해시 값을 나눕니다. 결과는 요청을받을 서버를 지정합니다. 이렇게하면 서버가 위 또는 아래로 이동하지 않는 한 동일한 URI가 항상 동일한 서버로 전달됩니다. 이것은 캐시 적중률을 최대화하기 위해 프록시 캐시 및 안티 바이러스 프록시와 함께 사용됩니다. 이 알고리즘은 HTTP 백엔드에서만 사용할 수 있습니다. 이 알고리즘은 기본적으로 정적입니다. 즉, 서버의 가중치를 변경하는 것은 아무 효과가 없지만 "해시 유형"을 사용하여 변경할 수 있습니다. This algorithm supports two optional parameters "len" and "depth", both followed by a positive integer number. These options may be helpful when it is needed to balance servers based on the beginning of the URI only. The "len" parameter indicates that the algorithm should only consider that many characters at the beginning of the URI to compute the hash. Note that having "len" set to 1 rarely makes sense since most URIs start with a leading "/". 이 알고리즘은 두 개의 선택적 매개 변수 "len"과 "depth"를 지원하며 그 뒤에 양의 정수가 옵니다. 이러한 옵션은 URI 시작 부분을 기준으로 서버의 균형을 유지해야하는 경우에 유용합니다. "len"매개 변수는 알고리즘이 해시를 계산하기 위해 URI의 시작 부분에있는 많은 문자만 고려해야한다는 것을 나타냅니다. "len"을 1로 설정하면 대부분의 URI가 선행 "/"로 시작하는 의미다. The "depth" parameter indicates the maximum directory depth to be used to compute the hash. One level is counted for each slash in the request. If both parameters are specified, the evaluation stops when either is reached. "depth"매개 변수는 해시를 계산하는 데 사용되는 최대 디렉토리 깊이를 나타냅니다. 하나의 레벨은 요청의 각 슬래시에 대해 계산됩니다. 두 매개 변수가 모두 지정되면 둘 중 하나에 도달하면 평가가 중지됩니다. url_param The URL parameter specified in argument will be looked up in the query string of each HTTP GET request. 인수에 지정된 URL 매개 변수는 각 HTTP GET 요청의 쿼리 문자열에서 조회됩니다. If the modifier "check_post" is used, then an HTTP POST request entity will be searched for the parameter argument, when it is not found in a query string after a question mark ('?') in the URL. Optionally, specify a number of octets to wait for before attempting to search the message body. If the entity can not be searched, then round robin is used for each request. For instance, if your clients always send the LB parameter in the first 128 bytes, then specify that. The default is 48. The entity data will not be scanned until the required number of octets have arrived at the gateway, this is the minimum of: (default/max_wait, Content-Length or first chunk length). If Content-Length is missing or zero, it does not need to wait for more data than the client promised to send. When Content-Length is present and larger than <max_wait>, then waiting is limited to <max_wait> and it is assumed that this will be enough data to search for the presence of the parameter. In the unlikely event that Transfer-Encoding: chunked is used, only the first chunk is scanned. Parameter values separated by a chunk boundary, may be randomly balanced if at all. 수식어 "check_post"가 사용되면 URL에 물음표 ( '?')가있는 쿼리 문자열에서 HTTP POST 요청 엔티티가 매개 변수 인수를 검색합니다. 선택적으로 메시지 본문 검색을 시도하기 전에 대기 할 8 진수 수를 지정하십시오. 엔터티를 검색 할 수없는 경우 라운드 로빈이 각 요청에 사용됩니다. 예를 들어 클라이언트가 항상 첫 번째 128 바이트의 LB 매개 변수를 보내는 경우이를 지정하십시오. 기본값은 48입니다. 엔터티 데이터는 게이트 웨이에 필요한 수의 8 진수가 도착할 때까지 검색되지 않습니다.이 값은 최소값 (기본 / 최대 값, 내용 길이 또는 첫 번째 청크 길이)입니다. Content-Length가 없거나 0이면 클라이언트가 약속 한 것보다 많은 데이터를 기다릴 필요가 없습니다. 콘텐츠 - 길이가 존재하고 <max_wait>보다 크면, 대기는 <max_wait> 이것이 매개 변수의 존재를 검색하기에 충분한 데이터라고 가정합니다. 드문 경우로 Transfer-Encoding : chunked가 사용되면 첫 번째 청크 만 스캔됩니다. 청크 경계로 분리 된 매개 변수 값은 무작위로 균형을 잡을 수 있습니다. If the parameter is found followed by an equal sign ('=') and a value, then the value is hashed and divided by the total weight of the running servers. The result designates which server will receive the request. 매개 변수 뒤에 등호 ( '=')와 값이있는 경우이 값은 해시되고 실행중인 서버의 총 가중치로 나누어집니다. 결과는 요청을받을 서버를 지정합니다. This is used to track user identifiers in requests and ensure that a same user ID will always be sent to the same server as long as no server goes up or down. If no value is found or if the parameter is not found, then a round robin algorithm is applied. Note that this algorithm may only be used in an HTTP backend. This algorithm is static by default, which means that changing a server's weight on the fly will have no effect, but this can be changed using "hash-type". 이것은 요청의 사용자 ID를 추적하고 서버가 위 또는 아래로 이동하지 않는 한 동일한 사용자 ID가 항상 동일한 서버로 보내지는 데 사용됩니다. 값이 없거나 매개 변수가 없으면 라운드 로빈 알고리즘이 적용됩니다. 이 알고리즘은 HTTP 백엔드에서만 사용할 수 있습니다. 이 알고리즘은 기본적으로 정적입니다. 즉, 서버의 가중치를 변경하는 것은 아무 효과가 없지만 "해시 유형"을 사용하여 변경할 수 있습니다. hdr(<name>) The HTTP header <name> will be looked up in each HTTP request. Just as with the equivalent ACL 'hdr()' function, the header name in parenthesis is not case sensitive. If the header is absent or if it does not contain any value, the roundrobin algorithm is applied instead. HTTP 헤더 <name> 각 HTTP 요청에서 조회됩니다. 동등한 ACL 'hdr ()'함수와 마찬가지로 괄호 안의 머리글 이름은 대 / 소문자를 구분하지 않습니다. 헤더가 없거나 값이없는 경우 라운드 로빈 알고리즘이 대신 적용됩니다. An optional 'use_domain_only' parameter is available, for reducing the hash algorithm to the main domain part with some specific headers such as 'Host'. For instance, in the Host value "haproxy.1wt.eu", only "1wt" will be considered. 선택적 'use_domain_only'매개 변수를 사용할 수 있습니다. 해시 알고리즘을 'Host'와 같은 특정 헤더가있는 기본 도메인 부분으로 줄이기 위해 사용할 수 있습니다. 예를 들어 호스트 값 "haproxy.1wt.eu"에서는 "1wt"만 고려됩니다. This algorithm is static by default, which means that changing a server's weight on the fly will have no effect, but this can be changed using "hash-type". 이 알고리즘은 기본적으로 정적입니다. 즉, 서버의 가중치를 변경하는 것은 아무 효과가 없지만 "해시 유형"을 사용하여 변경할 수 있습니다. rdp-cookie rdp-cookie(name) The RDP cookie <name> (or "mstshash" if omitted) will be looked up and hashed for each incoming TCP request. Just as with the equivalent ACL 'req_rdp_cookie()' function, the name is not case-sensitive. This mechanism is useful as a degraded persistence mode, as it makes it possible to always send the same user (or the same session ID) to the same server. If the cookie is not found, the normal roundrobin algorithm is used instead. RDP 쿠키 <이름> (생략하면 "mstshash")는 들어오는 TCP 요청마다 해시되고 해시됩니다. 동일한 ACL 'req_rdp_cookie ()'함수와 마찬가지로 이름은 대소 문자를 구분하지 않습니다. 이 메커니즘은 동일한 사용자 (또는 동일한 세션 ID)를 항상 동일한 서버로 보낼 수 있으므로 저하 된 지속성 모드로 유용합니다. 쿠키가 발견되지 않으면, 대신에 일반적인 라운드 로빈 알고리즘이 사용됩니다. Note that for this to work, the frontend must ensure that an RDP cookie is already present in the request buffer. For this you must use 'tcp-request content accept' rule combined with a 'req_rdp_cookie_cnt' ACL. 이 기능을 사용하려면 프론트 엔드가 RDP 쿠키가 요청 버퍼에 이미 있는지 확인해야합니다. 이를 위해서는 'req_rdp_cookie_cnt'ACL과 결합 된 'tcp-request content accept'규칙을 사용해야합니다. This algorithm is static by default, which means that changing a server's weight on the fly will have no effect, but this can be changed using "hash-type". 이 알고리즘은 기본적으로 정적입니다. 즉, 서버의 가중치를 변경하는 것은 아무 효과가 없지만 "해시 유형"을 사용하여 변경할 수 있습니다. <arguments> is an optional list of arguments which may be needed by some algorithms. Right now, only "url_param" and "uri" support an optional argument. <인수> 일부 알고리즘에서 필요할 수있는 선택적 인수 목록입니다. 현재 "url_param"및 "uri"만 선택적 인수를 지원합니다. balance uri [len <len>] [depth <depth>] balance url_param <param> [check_post [<max_wait>]] The load balancing algorithm of a backend is set to roundrobin when no other algorithm, mode nor option have been set. The algorithm may only be set once for each backend. 백엔드의 로드 밸런싱 알고리즘은 다른 알고리즘, 모드 또는 옵션이 설정되지 않은 경우 라운드로빈으로 설정됩니다. 알고리즘은 백엔드 마다 한 번만 설정할 수 있습니다. Examples : balance roundrobin balance url_param userid balance url_param session_id check_post 64 balance hdr(User-Agent) balance hdr(host) balance hdr(Host) use_domain_only Note: the following caveats and limitations on using the "check_post" extension with "url_param" must be considered : 참고 : "url_param"과 함께 "check_post"확장 프로그램 사용시 다음주의 사항 및 제한 사항을 고려해야합니다. - all POST requests are eligible for consideration, because there is no way to determine if the parameters will be found in the body or entity which may contain binary data. Therefore another method may be required to restrict consideration of POST requests that have no URL parameters in the body. (see acl reqideny http_end) 바이너리 데이터를 포함 할 수있는 본문이나 엔티티에 매개 변수가 있는지 확인할 방법이 없으므로 모든 POST 요청은 고려 대상입니다. 따라서 본문에 URL 매개 변수가없는 POST 요청을 고려하지 않으려면 다른 방법이 필요할 수 있습니다. (acl reqideny http_end 참조) - using a <max_wait> value larger than the request buffer size does not make sense and is useless. The buffer size is set at build time, and defaults to 16 kB. <max_wait> 요청 버퍼 크기보다 큰 값은 의미가 없으며 쓸모가 없습니다. 버퍼 크기는 빌드시 설정되며 기본값은 16kB입니다. - Content-Encoding is not supported, the parameter search will probably fail; and load balancing will fall back to Round Robin. Content-Encoding은 지원되지 않습니다. 매개 변수 검색이 실패합니다. 로드 밸런싱은 라운드 로빈으로 돌아갑니다. - Expect: 100-continue is not supported, load balancing will fall back to Round Robin. Expect : 100-continue는 지원되지 않습니다.로드 균형 조정은 Round Robin으로 되돌아갑니다. - Transfer-Encoding (RFC2616 3.6.1) is only supported in the first chunk. If the entire parameter value is not present in the first chunk, the selection of server is undefined (actually, defined by how little actually appeared in the first chunk). Transfer-Encoding (RFC2616 3.6.1)은 첫 번째 청크에서만 지원됩니다. 전체 매개 변수 값이 첫 번째 청크에 없으면 서버 선택은 정의되지 않습니다 (실제로 첫 번째 청크에 실제로 표시되는 빈도로 정의됩니다). - This feature does not support generation of a 100, 411 or 501 response. 이 기능은 100, 411 또는 501 응답 생성을 지원하지 않습니다. - In some cases, requesting "check_post" MAY attempt to scan the entire contents of a message body. Scanning normally terminates when linear white space or control characters are found, indicating the end of what might be a URL parameter list. This is probably not a concern with SGML type message bodies. 경우에 따라 "check_post"를 요청하면 메시지 본문의 전체 내용을 검사 할 수 있습니다. 선형 공백이나 제어 문자가 발견되면 정상적으로 스캔이 종료되고 URL 매개 변수 목록의 끝을 나타냅니다. 이것은 아마도 SGML 유형 메시지 본문과 관련이 없습니다. See also : "dispatch", "cookie", "appsession", "transparent", "hash-type" and "http_proxy".
반응형