linuxer-admin

AWS-Linux-EBS-to-EFS

아키텍쳐를 수정중에 EBS에서 EFS로 파일을 넘길일이 생겼다.

300G 가량의 대량의 파일이 있는 디렉토리를 sync 해야했다.

EBS는 GP2로 400G, 1200IOPS를 가진 볼륨이었다. 스냅샷에서 볼륨을 생성해서 4T로 확장하여 12000IOPS를 가진 볼륨에서 테스트를 진행하였다.

새벽에 먼저 싱크를 진행한 내용이 있는데 network out 이 40mb를 넘지 않았다.

싱크는

rsync -av /src /dst

로 진행한것 같았다. rsync 의 속도를 끌어 올리기 위해 테스트했으나 실패. 속도는 40mb 에서 더 이상 올라가지 않았다.

그래서 강구한 방법이 tar 를 이용한 데이터 이동이었다.

tar -C <src> -cf - . | tar -C <dst> -xf -

속도는 170mb 정도 그러나, 치명적인 단점이 존재했다. 소유권과 퍼미션을 가져오지 않는것이었다.

-_-; 파일이동이라 함은..소유권과 퍼미션을 그대로 가져가야하는데...그게 안됬다. 그래서 임시 방편으로

tar -cvf /dst/file.tar /src

명령어로 EBS의 데이터를 tar 로 압축해서 EFS로 저장하는 명령어로 작업했다.

이때 속도는 170MB 정도.. tar로 압축하지 않고 pipeline 으로 보냈을때와 동일한 방식이지만 소유권과 퍼미션을 유지할수 있는 방법이다.

그렇지만 속도가 마음에 들지 않았다.

물망에 rclone / rdiff-backup 가 있었다.

rclone 은 씅광님이 추천해줘서 오후내내 테스트를 했다. 그런데 속도가 너무 잘나오는데 문제는 퍼미션과 소유권을 가져올수 없는것이다.

그래서 승광님께서 주신 힌트로 테스트를 진행했다.

clone sync /src /dst --checkers 128 --transfers 128

속도는 놀라웠다. T3a.medium type의 네트워크 성능(Gbps) 이라 표기된 5G를 모두쓰는것이었다.

이렇게 network 를 모두 사용하는것은 처음이라 신기할정도로 rclone는 빨랐다.

300G 모두 sync하는데 1시간 30분밖에 걸리지 않았으니까..

그런데 여기서 rclone은 문제가 발생한다.

https://rclone.org/local/#filenames

Filenames

Filenames should be encoded in UTF-8 on disk. This is the normal case for Windows and OS X.

There is a bit more uncertainty in the Linux world, but new distributions will have UTF-8 encoded files names. If you are using an old Linux filesystem with non UTF-8 file names (eg latin1) then you can use the convmv tool to convert the filesystem to UTF-8. This tool is available in most distributions' package managers.

If an invalid (non-UTF8) filename is read, the invalid characters will be replaced with a quoted representation of the invalid bytes. The name gro\xdf will be transferred as gro‛DFrclone will emit a debug message in this case (use -v to see), eg

인코딩 문제인데 이건...하...나중에 rsync 로 남은파일을 채워볼까 생각했지만 불확실성이 너무 컷다. 파일의 누락이 너무많았다

그래도 테스트는 그냥 진행했고 싱크속도 무지빠르고 쓸만했다.

그래서 이후에 소유권과 퍼미션을 넣어주는 작업을 궁리했다.

getfacl -R /src > file.list
sed 's/src/dst/g' file.list
cd /dst
setfacl --restore=file.list

4줄의 명령어로 소유권과 퍼미션을 그대로 가져오는 방법을 찾았다.

이제 인코딩 문제만 해결하면된다 생각했지만, 안정성의 문제때문에

tar로 압축해서 넘기를 방식으로 계속진행하기로 생각했다.

오늘 적당한 낚시와 어드바이스를 주신 승광님께 감사드린다!

kubernetes-newbe-1

개념만 맨날 보고 관리형만 썼더니 날 kuber는 완전 젬벵이었다.

그래서 CKA공부를 시작했다.

9월2일부터 시작해서 오늘 External-lb까지 설정해보았다.

정보가 너무 많고 다양한데 길잡이는 없었다.

그래서 이번 블로깅 컨셉을 잡았다.

리눅서의 쿠버 길잡이다.

앞으로 추가되는 포스팅 기대하시라!

RAID-F1

raid f1은 sysnology에서 만든 독자 raid 이다.

https://global.download.synology.com/download/Document/Software/WhitePaper/Firmware/DSM/All/enu/Synology_RAID_F1_WP.pdf

raid f1 백서다.

지금까지의 레이드는 디스크에 적합한 레이드였다. 그래서 raid controller 를 이용한 레이그 구성시에 SSD를 이용할 경우 정상적으로 퍼포먼스를 사용하지 못하거나 controller의 cache 를 disable 해서 사용하는 등의 여러가지 문제점이 발생하였다. 이런 문제점들을 개선하기위해 새로운 레이드를 sysnology에서 만든것같다.

RAID F1 F는 flash - 1은 disk 를 나타낸다고 한다.

F1은 raid5 의 방식을 차용한것으로 보입니다.

백서에선

요약하면 Synology RAID F1은 다음과 같은 이점을 제공합니다.
성능은 RAID 5에 가깝습니다.
지능형 RAID 재 구축
기존 RAID 알고리즘보다 뛰어난 플래시 내구성
8 %의 낮은 용량 오버 헤드로 높은 스토리지 효율성 (12 개의 SSD가있는 RAID F1)

페리티가 raid5보다 마지막 블록에 더 많은것으로 보입니다.

capacity of a RAID F1 array is N-1 times of smallest drive, where N is the stripe width or the number of disks.

결론은 페리티가 고정되어 읽기쓰기를 진행하여 모든 SSD가 한꺼번에 장애포인트가 되는것이 아닌 고정된 페리티를 사용하여 전체가 아닌 하나의 SSD의 수명을 소모시키는 방식입니다.

Since each write-operation involves writing to the parity block, it is expected that
the parity block will be worn out in the first place. This uneven parity distribution
approach will lead to that one SSD reaches its lifespan earlier than others, instead of
making all SSDs reach the end of their lifespan at the same time. When one SSD fails,
the customer can replace it with a new one.
The characteristics of RAID F1 is similar to RAID 5. Parity blocks are XOR’ed of all
other data blocks. One block is used as parity block within each stripe, so the usable
capacity of a RAID F1 array is N-1 times of smallest drive, where N is the stripe width
or the number of disks.

장단점이 있는방법으로 사실 뭐가 더 우월하다 보긴 어렵지만 장애포인트에 있어서 하나의 SSD만 교체하면된다는 부분은 매우 긍정적으로 생각할수 있을거 같습니다.

AWS-NLB-Sticky-sessions-timeout

ALB에 대한 고찰이후 ELB관련 주제의 포스팅을 적는건 오랜만이다.

NLB의 Sticky 에 대해 한번 적어보려 한다.

Target group의 속성 이야기다.

NLB sticky는 추가된지 6개월정도 지났지만 아직도 일반적으로 아는 기능은 아니다.
너무 오랜기간 없었던 터라 없다고 아는 사람이 더 많은..ㅋㅋㅋ 그런 기능이다.

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/network/load-balancer-target-groups.html

먼저 Docs 를 링크하고..

NLB의 Routing algorithm 은 ip_hash 방식으로 동작 한다.

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html

The protocol
The source IP address and source port
The destination IP address and destination port
The TCP sequence number

6개의 조건이 일치하면 같은 target으로 연결해주나, 하나의 조건이라도 달라지면 다른 target으로 연결해주는 것이다. 이 tuple 들이이 일치하지 않더라도 같은 target으로 연결하게 하는 방법이 있다. 그것이 바로 sticky session 인것이다.

stictky session 에서 라우팅 조건은 souce ip 뿐이다. 1 tuple인것이다. 하지만 그렇다고 해서 영원히 같은 인스턴스로 연결해주는것은 아니다. 여기엔 시간 제한이 붙어있다.

-추가 - 수정합니다.
docs에는 souce ip 1tuple로 동작한다 적혀있지만 NLB-multi-AZ(HA)구성을 할경우엔 A RR-EIP가 두개가 붙으므로 예상과는 다르게 동작할것입니다. 또한 1tuple로 동작하는 부분또한 client ip + nlb node ip 로 구성되므로 2tuple 로 동작합니다.

예상과 같은 정상적인 결과를 얻기위해선 Weighted, failover 방식으로 route53을 설정해서 단일존으로 라우팅 해야 동일한 결과를 얻을 수 있습니다.
-도움주신 무무님 감사합니다.

docs 대로라면 1tuple이라 생각했는데 요소는 1tuple이 아니라

Connection idle timeout 이다

NLB의 Connection idle timeout 은 TCP 350 초 UDP 120초다.
- UDP는 태우님이 물어보셔서 추가로 알아봤다.

https://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html#connection-idle-timeout

Elastic Load Balancing sets the idle timeout value for TCP flows to 350 seconds. You cannot modify this value. Clients or targets can use TCP keepalive packets to reset the idle timeout.

Connection idle timeoutElastic Load Balancing sets the idle timeout value for UDP flows to 120 seconds.

그래서 동작은 이렇다.

sticky session 을 켜고 연결이 지속되는 동안은 무조건 같은 target으로 연결되고 마지막 연결부터 350초가 지나고 연결하면 대상/클라이언트 모두 TCP RST 응답을 받아서 sticky session 의 연결이 해제되고 다른 target과 연결되게 되고 다시 sticky로 동작하는거다.

최근에 질문을 받아서 다시한번 정리해봤다.

읽어주셔서 감사하다!

에드센스 광고 추가

블로깅이 좀 시들해졌다..

AWS Devops pro 시험 준비를 시작하며 쫒기는 느낌이 들면서 다른 모든것에 소홀했다.

생소한것을 배우는건 즐거운 일이지만 거기에 목적이 들어가고 겹쳐지면 초초해진다.
이번엔 내가 페이스를 놓쳤다.

급해지기만했다.

블로깅을 손에서 놓으니까 뭔가 루즈해지는게 치열하지 않았다.

그래서 에드센스를 추가하고 동기를 얻어보려 했는데..

생각보다 애매했다..ㅋㅋㅋ

일단 유지해보고 반응을 봐야겠다.