iperf3 네트워크 대역폭 측정 및 트래픽 제너레이터 사용법
 
* iperf3 를 이용하며 간단하게 네트워크 통신 구간에 가용한 네트워크 대역폭을 측정해보자
 
 
1. iperf3 소개
> 간단하게 PC(혹은 핸드폰)의 유/무선 네트워크 통신 구간에서 최대전송능력(대역폭)을 측정해줌
> 이를 위해서 송신단말(=Client PC)에서 최대트래픽을 수신단말(=Server PC)에 전송하고 이에 대한 결과치를 표출해줌
> 기존 iperf 에서 현재 iperf3 업그레이드됨
> 이외에도 CLI 결과 출력된 부분은 GUI로 보여주는 툴들도 존재함(=jperf 등)
> 리눅스, 윈도우, 안드로이드 이외 다양한 OS 제공
> TCP, UDP, SCTP with IPv4/IPv6 지원, 멀티캐스트
 
* iperf3 사이트
 
 
2. 설치
> 위 다운로드 사이트에서 windows 64bit 용 다운로드 후 CMD창에서 iperf3 사용
> VMware VM 2대에서 테스트함 : PC1(192.168.11.133)---(VMware가상네트워크)---PC2(192.168.11.134)
# iperf3 -h  : 도움말
 
 
3. 각 예제별 사용
> 기본 예제부터 옵션을 하나씩 테스트 하면서 트래픽 모니터링 하면 쉽게 이해 할 수 있음
> PC1=서버, PC2=클라이언트
 
3.1 기본 테스트 (클라이언트 -> 서버)
PC1(서버)# iperf3 -s -V
PC2(클라이언트)# iperf3 -c 192.168.11.133 -V
=> (클라이언트) 디폴트옵션값 : tcp, port 5201, 윈도우 사이즈 8kbyte, 시간 10초 동안, 1초간격으로 모니터링, 1개 스트림
=> 클라이언트에서 전송 가능한 tcp 최대치의 트래픽을 10초동안 서버로 보냄
=> -V 옵션 : 상세한 정보를 출력
 
PC1#
=> 10초동안 총 4.89 GBytes 트래픽을 PC2(=클라이언트)로부터 받음
=> PC1(=서버)가 보낸 트래픽은 없음

 
PC2#
=> 10초동안 총 4.89 GBytes 트래픽을 PC1에게 보냄
=> 1초 간격으로 전송 트래픽 및 전송속도값 출력함
=> 받은것이 없는데 Summary 에 receiver 에 값이 나오는것 오류인듯...

 
 
3.2 리버스 (클라이언트 <- 서버)
PC1(서버)# iperf3 -s -V
PC2(클라이언트)# iperf3 -c 192.168.11.133 -V -R
=> 3.1 번 테스트 트래픽을 서버에서 클라이언트로 전송함
 
PC1#
=> 10초동안 총 5.19 GBytes 트래픽을 PC2(=클라이언트)에게로 보냄

 
PC2#
=> 10초동안 총 5.19 GBytes 트래픽을 PC1에게서 받음

 
 
3.3 특정 파일 보내기 or 받기 (=비권장 측정 방법)
PC1(서버)# iperf3 -s -V
PC2(클라이언트)# iperf3 -c 192.168.11.133 -V -F 1.GHO
=> 7기가 용량의 파일을 전송하면서 트래픽을 측정함
=> 다만, 실제 파일을 프로세싱하여 전송하다보니 앞 선 테스트보다는 성능이 떨어지게 측정됨
=> 또한, 전체 파일을 보내는 것이 아니고 일부 용량만 전송함, time 옵션을 증가해도 동일함
=> 최대 대역폭 측정 시 비권장 방식임
* -R 옵션 사용 시 클라이언트가 받을 수 있음
 
PC1#
PC1과 상동으로 스샷 skip
 
PC2#
=> 아래처럼 6.93 GByte 파일 1개의 용량 중 1.86 GByte만 4.34초 동안 서버에게 보냄

 
 
3.4 지정한 시간 동안 최대 트래픽 전송
PC1(서버)# iperf3 -s -V
PC2(클라이언트)# iperf3 -c 192.168.11.133 -V -t 5
=> 5초 동안 클라이언트에서 서버로 보냄
 
PC1#

 
PC2#
PC1과 상동으로 스샷 skip
 
 
3.5 지정한 용량만큼 최대 트래픽 전송
PC1(서버)# iperf3 -s -V
PC2(클라이언트)# iperf3 -c 192.168.11.133 -V -n 1024000000
=> 1024,000,000 byte = 1024,000 Kbyte = 1024 Mbyte = 대략 1 Gbyte 보냄
 
PC1#
PC2과 상동으로 스샷 skip
 
PC2#
=> 1024,000,000 bytes 를 보냄, 기본 단위 byte 임

 
 
3.6 동시 여러개 스트림(Stream)으로 전송
PC1(서버)# iperf3 -s -V
PC2(클라이언트)# iperf3 -c 192.168.11.133 -V -t 5 -P 2
=> 5초 동안 2개의 Stream 을 동시에 서버에 전송
 
PC1#
=> 각각 ID가 5번과 7번의 Stream 이 측정됨

 
PC2#
=> 역시 2개의 Stream 확인됨

 
 
3.7 UDP 트래픽 전송하여 테스트 하기
PC1(서버)# iperf3 -s -V
PC2(클라이언트)# iperf3 -c 192.168.11.133 -V -u
=> 기본 1Mbit/sec 로 udp 트래픽을 전송함, 3.8의 -b 옵션으로 전송 속도를 변경하길 권장함
=> 지터(=Jitter, 지연)과 로스(=Lost, 손실) 표현됨
 
PC1#
=> 처음 1초 동안 11Mbit/s(=1.35Mbyte)를 받고 그 다음부터는 80KBytes 를 받음
=> summary 에 지터와 Total Datagrams 확인됨
=> Transfer 는 받았기 때문에 0으로 나오며 -R 옵션 사용 시 값 표현됨

 
PC2#
=> 전체 2.10MBytes 를 전송하였고, 평균 1.76Mbit/sec 이며 269개 Datagrams 를 로스(손실)없이 전송하였음

 
 
3.8 UDP 트래픽 전송하여 테스트 하기
PC1(서버)# iperf3 -s -V
PC2(클라이언트)# iperf3 -c 192.168.11.133 -V -u -t 5 -b 1G
=> 1GBit/s 전송속도로 5초 동안 UDP를 전송함
 
PC1#
=> 5.21 초 동안 75746개의 UDP datagrams 를 받았고 301개 로스(손실) 결과 확인

 
PC2#
=> 1Gbit/sec 전송속도로 5초간 UDP 트래픽을 전송함

 
 
4. GUI 화면으로 테스트 하기(=jperf)
> 위 CLI 결과값을 자바로 GUI 로 볼 수 있도록 제공함
> java runtime 설치 필요함
> jperf2폴더에서 jperf.bat 실행
=> 단 iperf 버전은 2.0 버전임
 
PC1#
=> 세부 옵션은 commond 창에 확인
=> PC1은 서버 모드임
=> 그래프에 표출되는 단위 변경 가능 : Mbits 등등
=> 오른쪽 상단에 선택으로 start 함

 
 
PC2#
=> 클라이언트를 선택 후 서버의IP를 지정함
=> 역시 오른쪽 상단에 선택으로 트래픽 전송 시작함

 
 
* jperf 다운로드 사이트
 
 
* 참고링크
http://www.openmaniak.com/iperf.php  : 영문, 예제 별 설명 잘 나옴
http://dreamlog.tistory.com/430 : 국문, 간단 명료하게 설명 잘 나옴
저작자 표시
신고
Posted by 쏠라구구

요리 지식 더구나 프랑스 요리 지식에 대한 정보가 없어서 몇번을 읽다가 말다가를 반복하다가,


세부 내용 보다는 소설의 큰 흐름만 파악하기로하고 읽다보니 어느새 반나절만에 정독을 하게 되었다.


마치 게임 문명이나 육성 시뮬레이션 게임처럼 주인공이 하나하나 요리에 대한 지식과 실력이 쌓이고,


조리학교를 키워나가게 되고 이런 과정이 정말 흥미진진하게 펼쳐진다.


개인적으로 음식은 대부분 배가 고프니 한끼를 때우는 경우가 많았는데,


가끙은 이 책에 나오는 것 처럼 요리의 맛을 제대로 음미하고 즐기면서 먹어봐야겠다는 생각이 들었다.

저작자 표시
신고
Posted by 쏠라구구

* Docker Swarm Tutorial 1대의 PC에서 실습

   

1. Swarm mode overview

> Docker Engine v1.12.0 부터 Swarm mode가 추가됨

> Swarm 은 Docker Engine 의 Cluster 를 관리함

   

* Feature highlight

> Cluster management integrated with Docker Engine

> Decentralized design

> Declarative service model

> Scaling :

> Desired state reconciliation

> Multi-host networking : 컨테이너간 통신을 위해서 자동으로 Overlay 통신

> Service discovery :

> Load balancing :

> Secure by default :

> Rolling updates :

   

* Swarm mode key concepts

> Swarm :

> Node : Swarm 에 참여하는 Docker Engine 의 instance(서버), Manager node 와 Worker node 구분

> Service and tasks : Service, replicated services, global services, task

> Load balancing : ingress load balancing, PublishedPort or 지정포트, internal DNS 로 internal LB

   

   

2. Getting started with Swarm mode

> Swarm mode 의 Docker engine Cluster 초기화

> Swarm 에 nodes 추가

> Swarm 에 application services 배포

> Swarm managing

   

  

hostname

IP(eth0)

VM1

pc

192.168.18.100

VM2

pc1

192.168.18.101

VM3

pc2

192.168.18.102

VM4

pc3

192.168.18.103

   

   

2.1 Set up

> 4대 PC 준비, Docker Engine v1.12 이상 설치, manager machine 에 IP 설정, hosts 간 포트 오픈

> 4대 PC : pc(Manager Node 192.168.18.100), pc1~3(Worker Nodes 192.168.18.101~103)

   

* hosts 간 사용 포트

TCP port 2377

클러스터 관리용 통신

TCP & UDP port 8946

Nodes 간 통신

TCP & UDP port 4789

Overlay 네트워크 트래픽

   

   

2.2 Create a Swarm

> Manager Node 에 Swarm 설정 및 광고~

> Worker Node 에서는 아래 --token 포함된 명령어도 Swarm join 시킨다

docker swarm init --advertise-addr <MANAGER-IP>

docker swarm init --advertise-addr 192.168.18.100

   

> 아래 처럼 Manager 과 Worker 로 참여 할때의 token 다른 것을 알 수 있음

docker swarm join-token manager

docker swarm join-token worker

   

> Swarm의 현재 정보 확인

docker info : "Is Manager: True"

docker node ls : Node에 *은 현재 접속 node 임

   

   

   

2.3 Add nodes to the Swarm

> Worker node 에서 Swarm에 join 시키자, 3대의 Worker Node를 Swarm에 join 함

docker swarm join --token [키값] 192.168.18.100:2377

   

> docker node 확인

   

   

2.4 Deploy a service to the Swarm

> Swarm 을 통한 서비스 배포(=컨테이너 실행)

>> 'helloworld' 라는 서비스를 생성, 1개(=replicas)의 instance(=컨테이너) 실행

>> Alpine 리눅스 이미지를 사용하며, 이미지 로딩 후 ping docker.com 실행

docker service create --replicas 1 --name helloworld alpine ping docker.com

   

>> 1대의 컨테이너가 실행되었으며, 실행된 Node는 PC(=192.168.18.100)임-master node 임

docker service ls

docker service ps helloworld

docker ps : COMMAND 에서 ping docker.com 확인

   

> inspect 로 Swarm service 에 대해서 상세히 확인

docker service inspect --pretty helloworld

docker service inspect helloworld

   

   

   

2.5 Scale the service in the Swarm

> Scale 명령으로 실행 컨테이너 갯수를 조정, 5개로 늘려보자

docker service scale helloworld=5

docker service ls : REPLICAS 에 5/5 확인

   

docker service ps helloworld : NAME에 .1~.5로 늘어남, pc3 node에 2대의 컨테이너가 실행됨을 확인

   

pc3 node 에서 docker ps 로 실행 중인 컨테이너 2대 확인

   

   

2.6 Delete the service running on the Swarm

> Swarm 실행한 Service 삭제하기, node에 실행되는 모든 컨테이너가 삭제됨

docker service rm helloworld

docker service ps helloworld

docker ps

   

   

2.7 Apply rolling updates to a service

> 서비스 중단을 최소화한 순차적인 업데이트, Redis 3.0.6 에서 Redis 3.0.7 으로 롤링업데이트 해보자

>> redis v3.0.6 3개 컨테이너를 실행하고 update-dely 는 10초를 지정

docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6

docker service ls

docker service ps redis

   

   

docker service inspect --pretty redis : UpdateConfig 에 Delay 10초 확인

   

   

> redis 3.0.7 업그레이드 실행 : 순차적으로 1대 컨테이너 종료 후 3.0.7 컨테이너 실행 확인 되면 Delay 후((=10초)

>> 다른 redis 컨테이너 작업 진행됨, 실패 시 'FAILED' 상태가 되고 원인(로그) 확인 조취 후 다시 실행하자~

docker service update --image redis:3.0.7 redis

docker service ps redis

   

> 작업 완료 후 확인(Update status),

docker service inspect --pretty redis

docker service ps redis : 완료 후 v3.0.6(shutdown) -> v3.0.7(Running) 확인

   

   

   

2.8 Drain a node on the Swarm

> 특정 Node를 작업하거나 할때 운영중인 컨테이너를 자동으로 다른 Node에서 실행되게함

> 현재는 PC, PC1, PC2에 각각 1대의 redis 컨테이너가 구동 중

   

> PC1을 작업한다고 가정하고 drain 상태로 만들면 해당 Node는 Drain 으로 변경되고,

> 다른 Node에서 컨테이너가 자동으로 실행됨

   

> PC1 작업 완료 후 다시 Active 상태로 변경

>> 하지만 PC1으로 다시 컨테이너가 실행 되지는 않음

   

   

2.9 Global Services

> 모든 Node에서 컨테이너를 구동 하자

docker service create --mode=global --name prometheus prom/prometheus

   

   

* 참고링크

https://docs.docker.com/engine/swarm/

https://docs.docker.com/engine/swarm/swarm-tutorial/

http://docker-public.oss-cn-shanghai.aliyuncs.com/Docker%2FWhat%20is%20New%20in%20Docker.pdf : 강추!

신고
Posted by 쏠라구구


티스토리 툴바