전체 글

Linux

TIME_WAIT 소켓과 keepalive

TIME_WAIT 소켓 TIME_WAIT 상태의 소켓은 TCP 세션 통신 과정에서 연결을 종료할 때 발생한다. TCP에서 최초 통신 수립 시에 3-way-handshaking을 하게되는데, 이후 연결을 해제할 때에는 4-way-handshaking을 하게된다. 연결 해제 시에는 연결을 해제하는 쪽에서 먼저 FIN을 보내게되고, 수신자에서 ACK, FIN을 전송한 이후 송신자가 다시 ACK 전송 후 정상적으로 받게되면 연결 해제가 정상적으로 완료된다. 다만 위 과정에서 송신자는 수신자가 전송한 FIN 이후에 연결된 소켓을 TIME-WAIT 상태로 전환하고 설정된 시간 만큼 대기 후 사라진다. 필요성 TIME_WAIT 소켓은 TCP 연결이 종료된 이후에도 흔적을 남김으로써 이후에 발생할 수 있는 문제점을 방..

Linux

vm.zone_reclaim_mode

linux에서는 사용 용도에 따라 페이지 프레임들을 zone으로 관리하며 그 종류는 다음과 같다. ZONE_DMA ZONE_DMA32 ZONE_NORMAL ZONE_HIGHMEM ZONE_MOVABLE ZONE_DEVICE cat /proc/buddyinfo 조회 시 node 0(NUMA 아키텍처에서 표현하는 영역)에서 DMA, DMA32, Normal 영역들이 표시되었다. 각 영역들을 풀어 설명하게 되면 ZONE_DMA, ZONE_DMA32 DMA란 Direct Memory Access의 약자로써 주소를 지정할 수 있는 모든 메모리에 접근할 수 없는 주변 장치들에 접근하는 DMA에 적합한 메모리를 나타낸다. 수년이 지난 후 DMS 특정 요구사항을 가진 메모리를 가지는 더 좋고 강력한 인터페이스들이 만들..

DevOps/Terraform

moved block

Moved 테라폼에서 기존 리소스의 이름이 변경되는 등의 상황이 발생하면 기존 리소스가 삭제되고 새로운 리소스가 생성된다. 다만 이때 삭제되고 생성되는 리소스가 정지되면 안되거나 내용이 삭제되면 안되는 경우가 대다수인데 이때 유용하게 쓸 수 있는 블록이 moved이다. None-moved resource "local_file" "a" { content = "hello!" filename = "hello.txt" } output "file_content" { value = local_file.a.content }위 tf파일에서 local_file.a의 이름을 b로 바꾸길 원할 때 resource "local_file" "b" { content = "hello!" filename = "hello.txt" }..

DevOps/Terraform

Terraform lifecycle

수명주기 terraform에서 resource를 선언할 때 블럭 내부에 배치하여 수명주기를 설정할 수 있다. 인수로는 다음 목록들을 입력할 수 있다. create_before_destroy (bool) 리소스 수정 시 수정된 리소스를 먼저 생성. 이후 기존 리소스 삭제 resource "local_file" "abc" { content = "lifecycle" lifecycle { create_before_destroy = true } } prevent_destroy (bool) 해당 리소스를 삭제하려할 때 거부 resource "local_file" "abc" { content = "lifecycle" lifecycle { prevent_destroy = true } } ignore_changes (l..

Linux

SSH Multiplexing

SSH Multiplexing SSH protocol은 TCP를 기반으로 실행되기 때문에 SSH를 사용해 원격 시스템에 연결할 때마다 새로운 TCP 연결을 생성해야한다. SSH 연결 협상은 약간의 시간이 소요되는데, 이때 multiplexing을 활용하게 되면 여러 SSH 세션이 동일한 TCP 연결을 공유하여 TCP 연결 협상이 처음에만 발생하도록할 수 있다. multiplexing 과정 특정 host에 연결 시도 시 OpenSSH는 Master 연결을 시작 OpenSSH는 원격 호스트와 연결된 Unix Domain Socket을 생성 이후 host에 ssh 연결 시도 시 OpenSSH는 새로운 TCP Connection 생성이 아닌 생성되어있는 Unix Domain Socket을 사용해 host와 통신..

DevOps/Ansible

Ansible run_once

run_once 여러 호스트를 대상으로 플레이북을 실행하여도 local_action과 같이 로컬에서 실행하는 경우가 발생할 수 있습니다. 이때, 해당 작업을 하나의 호스트에서만 수행하도록 하는 옵션이 run_once입니다. - name: run only once command: /usr/bin/custom-command run_once: true 위와 같이 작성 시, 모든 호스트들 중에서 최초 호스트에서만 작업을 수행하게됩니다. - name: copy only once local_action: command /usr/bin/custom/command run_once: true 또한 컨트롤러 역할의 로컬에서 작업을 수행하도록 하는 local_action과 함께 사용시 특히 유용할 수 있습니다.

xlwdn98767
개발 조무사 IT 개발 블로그