2014-09-29 4 views
1

Qugaa bgpd와 nsm 바이너리를 우분투 3.13.0-36- 제네릭 커널을 기반으로 한 도커에 번들했습니다. 이제 저는 리눅스 서버에서 여러 개의 이러한 고정 장치를 실행합니다. 이 docker는 docker-py를 사용하여 인스턴스화됩니다.도커 & Quagga BGP

저는 배관공을 사용하고 각 도커에 이더넷 인터페이스를 만들고 172.17.xx.xx 종류의 주소를 할당했습니다. 내 BGP 구성은 모든 dockers가 BGP와 완전히 맞물 리도록 구성됩니다. 즉, 도커의 각 BGP는 다른 도커에서 실행되는 모든 다른 BGP에 연결됩니다.

BGP 세션이 설정되고 BGP 경로 등이 절대적으로 좋습니다. 이제 도커의 수가 30 개를 초과하면 bgp에 연결할 수 없습니다. "top"명령은 많은 CPU 사용량을 나타내지 않으며, 메모리는 한계에 있으며, 많은 네트워크 활동이 아니며 BGP 프로세스 내에서 많은 프로세싱을 기대하지도 않습니다.

컨테이너에서 tcpdump를 가져 왔을 때의 모습입니다.

9 2014-09-26 18 : 17 : 54.997861 0a : 60 : 4a : 3b : 56 : 31 ARP 44 누가 172.17.1.32입니까? 내가 40 대의 도커를 돌릴 때 172.17.1.6

에게 말해라. 나는 위에 나온 것처럼 40 개의 그런 ARP 요청과 하나의 ARP 응답을 본다.

그러나 이것은 계속 발생하며 약 1600 (40 * 40) 개의 메시지가 짧은 시간 내에 발생합니다. 나는 이것이 "telnet localhost bgpd"명령을 사용하여 로컬 bgp 모듈에 연결하는 것을 허용하지 않는 것이라고 생각합니다.

나는 이것이 Quagga 나 BGP와 관련이 있다고 생각하지 않습니다. 나는 docker 네트워킹과 관련이 있다고 생각한다. 누구나 이런 문제를 해결할 방법이나 아이디어가 있습니까? 아니면이 문제의 근본 원인이 무엇입니까?

답변

2

마지막으로이 문제의 근본 원인을 발견하고이를 수정했습니다. 이것은 도커 인스턴스의 수, 각 도커에서 작성한 MAC 항목 수 및 Linux 서버에 지정된 기본 ARP 캐시 크기가 1024로 결합 된 것입니다.

제 경우에는 MAC 항목을 생성하게됩니다 as (도커의 수 * 나는 pipework을 통해 생성하고있는 이더넷 인터페이스의 수). 따라서 각 DOCKER의 MAC 항목 수가 기본 크기 인 1024를 초과하면 문제가 발생합니다.

/etc/sysctl.conf 파일 끝에 다음 행을 추가하거나 아래 항목을/etc/etc/sysctl.conf가이 문제를 해결했습니다. "sysctl을 -p"명령을 실행 한 후에 수정

net.ipv4.neigh.default.gc_thresh1 = 8192 
net.ipv4.neigh.default.gc_thresh2 = 12288 
net.ipv4.neigh.default.gc_thresh3 = 16384 

관련 문제