프로세스에서 사용하는 대역폭을 어떻게 제한 할 수 있습니까?


42

매일 밤 파일을 백업 할 CentOS 5.7 서버가 있습니다. 백업이 네트워크를 통해 전송되는 동안 서버가 호스팅하는 다양한 사이트를 방문하는 사람은 성능이 저하 될 것으로 우려됩니다.

프로세스의 최대 허용 처리량을 네트워크 인터페이스로 제한 할 수 있습니까? SSH 기반 파일 전송을 사용 가능한 대역폭의 절반으로 제한하고 싶습니다. 서버 또는 클라이언트쪽에있을 수 있습니다. 즉, 연결을 시작하는 클라이언트 또는 연결을 수신하는 서버 에서이 작업을 수행하게되어 기쁩니다.

(불행히도 백업 전용 인터페이스를 추가 할 수 없습니다. 사용 가능한 처리량을 늘릴 수는 있지만 네트워크 전송이 더 빨리 완료되지만 연결하는 동안 연결의 총 용량을 최대로 늘릴 수 있습니다.)


일부 배경

아마도 어떤 배경이 순서대로있을 것입니다. 물러서서 백업 자체를 생성하기에 충분한 로컬 공간이 부족하다는 문제가있었습니다. SSHFS를 입력하십시오! 백업은 웹 서버 자체에 백업 비트가 전혀 없도록 로컬 드라이브에 저장됩니다.

왜 중요한가요? 그것은 유서 깊은 사용을 무효화하는 것처럼 보이기 때문입니다 rsync --bwlimit. rsync실제로 전송을하고도되지 수 있습니다 심지어 백업 파일을 저장할 공간을 절약 할 수 없기 때문에 그것을.

"잠깐, 왜 백업 파일을 만들어야합니까? rsync소스 파일과 폴더 만이 아닌 이유는 무엇 입니까?" "Plesk"라는 성가신 것이 혼합되어 있기 때문에! 이것은 편의상 Plesk를 사용하는 클라이언트 쪽 웹 호스트입니다. 따라서 Plesk는 백업에 모든 종류의 추가 마법을 추가하여 복원 절차 중에 백업을 사용하는 것이 매우 안전하기 때문에 Plesk를 사용하여 백업을 시작합니다.

슬픈 얼굴



1
우연히 특정 질문에 정확하게 대답 하지 못하는 내 상황에 대한 또 다른 가능성 ionice은 프로세스가 작성할 수있는 쓰기를 조절하는 데 사용 하는 것입니다. SSHFS 파일 시스템에 작성 중이므로 백업 프로세스 클래스를 3으로 삭제하여 작성하려는 다른 프로세스에 완전히 영향을 줄 수 있습니다. 이렇게하면 백업 호그 대역폭으로 인해 사이트 방문자의 경험을 결코 저하시키지 않는 효과를 얻을 수 있습니다.
Wesley

하나의 질문, 당신의 SSH는 압축을 사용합니까? .ssh / config에 "Compression yes"?
Zlatko

답변:


25

iptables패킷을 표시하는 데 사용 (--pid-owner ...) 한 다음 tc, 트래픽을 형성하는 데 사용할 수 있습니다. 또한 "--sid-owner"를 사용하여 해당 프로세스의 스레드와 자식을 포함 할 수 있습니다.

http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH

매치 소유자 --pid
커널 2.3, 2.4, 2.5 및 2.6
-A 출력 -m 소유자가 --pid 소유자에게 78 iptables는
설명 이 일치하는 프로세스 ID 그들에 대한 책임 (PID)를 기반으로 패킷을 일치시키는 데 사용된다. 이 일치는 사용하기가 다소 어렵지만 한 가지 예는 PID 94가 HTTP 포트에서 패킷을 보내도록 허용하는 것입니다 (HTTP 프로세스가 스레드되지 않은 경우). 또는 특정 데몬에 대한 ps 출력에서 ​​PID를 가져온 다음 규칙을 추가하는 작은 스크립트를 작성할 수 있습니다. 예를 들어 Pid-owner.txt 예에 표시된 규칙을 사용할 수 있습니다.


최선의 방법은 내 솔루션과 관련이 있다고 생각합니다. --pid-owner는 실제로 프로세스를 기반으로 선택하지 않지만 프로세스 소유자를 선택합니다. 프로세스를 시작하고 해당 소유자를 기준으로 필터링하기 위해 특수 사용자를 만들어야합니다. 따라서 특정 프로세스에서 트래픽을 형성하고 있음을 확신 할 수 있습니다. 일반 사용자.
웨슬리

@Wesley 맨 페이지가 말하는 것이 아닙니다 : " 지정된 프로세스 id를 가진 프로세스에 의해--pid-owner processid 패킷이 생성 된 경우와 일치합니다 ." linux.die.net/man/8/iptables
Ajedi32

이 답변에 iptables 및 tc를 사용하는 방법의 예가 포함되어 있으면이 답변이 훨씬 좋습니다. 주어진 iptables -A OUTPUT -m owner --pid-owner 78예제는 완전하지 않은 것 같습니다 (패킷 만 일치하기 때문에 "마킹"하는 방법을 말하지 않음) tc.
Ajedi32

패킷을 표시하려면 다음과 같은 것을 추가해야합니다 -j MARK --set-mark 1. 자세한 내용은 다음을 참조하십시오 : wiki.archlinux.org/index.php/…
Mircea Vutcovici

40

방금 발견 한 한 가지 옵션은 물방울 을 사용하는 것 입니다.

물방울은 휴대용 경량 사용자 공간 대역폭 셰이퍼입니다. 협업 모드 (트릭과 함께) 또는 독립 모드로 실행될 수 있습니다.

물방울은 유닉스 로더 사전 로딩을 이용하여 작동합니다. 기본적으로 소켓을 통해 데이터를 보내고받는 데 필요한 새로운 버전의 기능을 응용 프로그램에 제공합니다. 그런 다음 소켓을 통한 데이터의 전송 및 수신 지연에 따라 트래픽을 제한합니다. 물방울은 전적으로 사용자 공간에서 실행되며 루트 권한이 필요하지 않습니다.


1
이것이 내 문제를 해결 한 것입니다. 클라이언트가 내가 전체 블록 체인을 다운로드 해야하는 사람이라고 결정할 때 비트 코인 데몬에 문제가 발생했습니다.
Omnifarious

trickle링크 당신은 (404)에 리드를 준
GEREMIA

끊어진 링크를 수정했습니다 (Wayback Machine 링크로 바꾸어).
G-Man, 'Reinstate Monica'라고

3
Trickle은 현재 github에있는 것 같습니다 : github.com/mariusae/trickle
Cheetah

또는sudo apt-get install trickle
ggll

22

파이프 (또는 stdout)에 쓸 수 있으면 pv(pipe viewer) 명령을 설치할 수 있습니다 . 원래 파이프를 통해 전송 된 데이터의 진행률을 표시하기 위해 작성되었습니다.

tar cvf - /files/to/backup | pv -L 512k > /your/file/on/sshfs

   -L RATE, --rate-limit RATE
          Limit the transfer to a maximum of RATE  bytes  per  second.   A
          suffix of "k", "m", "g", or "t" can be added to denote kilobytes
          (*1024), megabytes, and so on.

이것은 실제로 내가 사용할 것이라고 생각하는 대답입니다! 그러나 그것은 내가 원래 요청한 특정 질문에 대한 정확한 대답이 아닙니다. 아아, 질문 종류는 변했지만 여전히 프로세스의 네트워크 속도를 제한하는 데 중점을 두었습니다. 그러나, 당신은 내가 요청한이 새로운 질문에 기여할 수 있습니다 : unix.stackexchange.com/q/34174/4232
Wesley

감사! 나는 비슷한 일을하고 결국했다 ssh my-remote-server bash -c "'find / -xdev|cpio -o|gzip -c1'"|pv --rate-limit 1M > my-remote-root.cpio.gz.
clacke

1
ionion과 결합했을 수도 있지만 특정 서버에서는 허용되지 않았습니다. ssh my-remote-server ionice -c3 bash -c "'find / -xdev|cpio -o|gzip -c1'"|pv --rate-limit 1M > my-remote-root.cpio.gz
clacke

6

같은 이유로 --bwlimit = KBPS 옵션과 함께 rsync를 사용합니다.

당사의 1Gbit 이더넷은 기존 SCSI320 DAS RAID를 쉽게 습득 할 수 있으며 기본적으로 DOS는 NFS 저장소에 의존하는 일부 구형 프로덕션 박스입니다.


4

데이터를 어떻게 전송합니까? (ssh를 통한 동기화? scp? sftp? 다른 것?)

rsync를 사용하면 대역폭을 제한 할 수 있습니다 (--bwlimit = KBPS 옵션 참조). rsync -e ssh --bwlimit ..

또는 멋진 속도 제한을 수행하기 위해 qdisc 또는 이와 동등한 것을 설정할 수 있지만 귀하의 경우 이것이 심각한 과잉 일 것입니다. 이에 대한 문서는 Linux Advanced Routing and Traffic Control HOWTO에 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.