HAproxy 를 이용한 로드밸런싱 고가용성 구성

개요

HAProxy는 여러 서버에 대해 요청을 확산시키는 TCP 및 HTTP 기반 애플리케이션들을 위해 고가용성 로드밸런서와 리버스 프록시를 제공하는 자유-오픈 소스 소프트웨어이다. C 프로그래밍 언어로 개발되어 있으며 빠르고 효율적인 것으로 유명하다.
공식 사이트 참조

설정에 따라 Server #A와 #B로 번갈아가며 연결해준다.

haproxy를 통해 부하를 분산하는 등의 용도로 서비스 효율을 높일 수 있다.

설치

여기에서 다운 받아도 되며, yum epel-release에 포함되어 있으므로 epel-release 리포지터리 추가 후 yum 이나 dnf 명령 등을 통해 설치할 수 있다.

sudo dnf install -y haproxy
마지막 메타자료 만료확인 7:58:42 이전인: 2022년 07월 28일 (목) 오전 12시 23분 23 초.
종속성이 해결되었습니다.
================================================================================
 꾸러미          구조           버전                    레포지터리         크기
================================================================================
설치 중:
 haproxy         x86_64         1.8.27-4.el8            appstream         1.4 M

연결 요약
================================================================================
설치  1 꾸러미

총계 내려받기 크기: 1.4 M
설치된 크기 : 4.2 M
...중략...
설치되었습니다:
  haproxy-1.8.27-4.el8.x86_64                                                                                                                   
완료되었습니다!

서비스가 구동 될 모든 서버에 설치해준다.
자동으로 서비스가 구동될 수있도록 서비스를 등록 해준다.

sudo systemctl enable haproxy.service
 또는
sudo service haproxy start

설정

기본적으로 /etc/haproxy/haproxy.cfg 가 존재한다.

global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

#---------------------------------------------------------------------
# status web 설정
# haproxy 서비스 상태, 백엔드 서비스의 상태 등을 웹을 통해 확인할 수 있다.
# 필수는 아니다.
#---------------------------------------------------------------------
listen hastats
    mode http
    bind *:8088
    stats enable
    stats show-legends
    stats uri /hastat
# 서버 주소가 192.168.0.1이라면  http://192.168.0.1/hastat으로 접속한다.
    stats auth admin:admin
#  hastats 웹에 접속 시 인증으로 제한하려면 계정과 패스워드를 지정한다.

#---------------------------------------------------------------------
# 프론트 엔드 설정
# 프론트 엔드에서 설정한 포트로 연결이 들어올 경우 백엔드로 보낸다
#---------------------------------------------------------------------
# 외부에서 haproxy를 통해 연결을 시도할 때 사용하는 포트
frontend  kubeproxy
    bind *:16443
    default_backend kubeproxy
    mode tcp

#---------------------------------------------------------------------
# 백엔드 설정
# 프론트엔드에서  defaultbackend 타겟으로 설정 된 백엔드 정보
#---------------------------------------------------------------------
backend kubeproxy
    balance     roundrobin
# Balance Option
# Roundrobin : 순차적으로 분배
# static-rr : 서버에 부여된 가중치에 따라서 분배
# leastconn : 접속수가 가장 적은 서버로 분배
# source : 운영중인 서버의 가중치를 나눠서 접속자 IP 해싱(hashing)해서 분배
# uri : 접속하는 URI를 해싱해서 운영중인 서버의 가중치를 나눠서 분배 (URI의 길이 또는 depth로 해싱)
# url_param : HTTP GET 요청에 대해서 특정 패턴이 있는지 여부 확인 후 조건에 맞는 서버로 분배 (조건 없는 경우 round_robin으로 처리)
# hdr : HTTP 헤더에서 hdr(<name>)으로 지정된 조건이 있는 경우에 대해서만 분배 (조건없는 경우 round robin 으로 처리)
# rdp-cookie : TCP 요청에 대한 RDP 쿠키에 따른 분배
    mode tcp
    option tcp-check
    option tcplog
# 외부에서 16443 포트로 연결을 시도하면 아래의 서버에 순차적으로 연결해준다.
    server  storage01 192.168.0.1:6443 check
    server  storage02 192.168.0.2:6443 check
    server  storage03 192.168.0.3:6443 check

frontend web-console
        bind *:18080
        default_backend web-console
        mode tcp
backend web-console
        balance roundrobin
        mode    tcp
        option  tcp-check
        option  tcplog
        server  storage01       192.168.1.1:8080       check
        server  storage02       192.168.1.2:8080       check
        server  storage03       192.168.1.3:8080       check

백엔드로 동작할 모든 서버에 동일한 설정 파일을 넣어준다.

확인

haproxy 웹 서비스를 통해 정보 확인이 가능한다.

백엔드 서비스에 문제가있다면 붉은색으로 표시된다.

Keepalive를 이용한 linux 로드밸런싱 고가용성 구현

개요

keepalive 참조
keepalive는 Linux 시스템 혹은 Linux 기반 인프라에서의 로드밸런싱 및 고가용성을 위한 기능을 제공한다.
단순하게 설명하면, 두 개 이상의 Linux 시스템이 존재할 경우, virtual IP 를 생성하고 시스템의 상태에 따라 해당 virtual IP를 할당해주는 기능을 한다.

설치

# CentOS (Redhat 계열)
$ sudo isntall -y keepalived

# Ubuntu (Devian 계열)
$ sudo apt-get install -y keepalived

설정

/etc/keepalived/keepalived.conf 를 환경에 맞도록 수정한다.

Master server

! Configuration File for keepalived Master

global_defs {
   router_id rtr_0           # Master와 Backup 구분
}

vrrp_instance VI_0 {          # Master와 Backup과 구분
    state MASTER              # 또는 BACKUP
    interface eth0            # 노드에서 실제 사용할 인터페이스 지정
    virtual_router_id 10      # Master와 Backup 모두 같은 값으로 설정.
    priority 200              # 우선순위, 값이 높은 쪽인 Master가 된다.
    advert_int 1
    authentication {
        auth_type PASS        # Master와 Backup 모두 같은 값으로 설정.
        auth_pass P@ssW0rd    # Master와 Backup 모두 같은 값으로 설정.
    }

    virtual_ipaddress {
        192.168.0.100      # Master와 Backup 동일하게 설정한 VIP
    }
}
# #으로 시작하는 내용은 모두 삭제한다.

Backuo(slave)

! Configuration File for keepalived

global_defs {
   router_id rtr_1           
}

vrrp_instance VI_1 { 
    state BACKUP                    # MASTER가 아니므로 수정              
    interface eth0            
    virtual_router_id 10      
    priority 100                    # 낮은 우선순위를 위해 수정
    advert_int 1
    authentication {
        auth_type PASS        
        auth_pass P@ssW0rd        
    }

    virtual_ipaddress {
        192.168.0.100      
    }
}

구동

각각의 서버에서 서비스를 구동한다.

 sudo systemctl enable keepalived --now
# BACKUP 서버들에서도 동일하게 서비스를 구동해준다. 

확인

ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 4e:be:1a:32:52:04 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.41/24 brd 192.168.1.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.40/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::4cbe:1aff:fe32:5204/64 scope link
       valid_lft forever preferred_lft forever

192.168.1.40/32가 virtual IP. backup 노드로 설정된 서버에는 해당 ip가 보이지 않는다.

다른 시스템에서 가상아이피를 이용하여 ssh 접속, 혹은 ping 명령등을 수행해서 확인하면 된다.

그레이카드를 이용한 사진 촬영 #1. 측광

개요

그레이 카드 (Gray card) 란 빛 반사율 18%인 회색의 평면 개체를 말한다. 좁은 의미로는 반사율 18%의 10*13cm, 20*25cm의 두 개의 회색 카드로 구성된 Kodak 그레이 카드 / R-27을 의미한다.

원래의 기본 용도는 ‘정확한 측광(빛의 양 측정)’ 이다.
대다수의 카메라는 보통 측광을 위한 센서가 있고 이 센서가 감지하는 빛의 양에 따라 적절한 노출 값을 가이드한다. 

측광

사진의 예시는 중앙부 스팟 측광 으로 설정이 되어있다. 즉 중앙의 원에 해당하는 영역이1각 모드에 따른 측광 영역은 카메라 제조사 및 설정에 따라 달라질 수 있다. 얼마나 밝은가 를 계산하고 이에 따라 어느 정도로 조리개 값, 셔터 속도, 감도 등을 설정 해야 하는지 가이드를 해준다는 이야기이다. 2당연히 자동 모드로 찍을 경우는 측광 결과에 따라 자동으로 이 값들을 정해서 촬영을 하게 된다.
좋은 사진을 위해서는 정확한 측광이 매우 중요하다. 잘못된 측광으로 인해 여자친구의 얼굴이 새까맣게 찍힐 수도 있고, 하얗게 뜬 얼굴에 눈만 덩그러니 찍힐 수가 있으니까. 이런 문제를 줄이고 정확한 측광을 위해 필요한 것이 바로 ‘그레이 카드’ 이다.

원리

여기서 왜 많고 많은 색 중에 회색이며, 0%부터 100%까지의 숫자 중 왜 18%인가를 이해할 필요가 있다. 카메라는 다양한 피사체를 촬영하고, 이 피사체들은 각기 다른 색상과 반사율을 가지고 있다. 여기서의 측광이란 광원에서 나온 빛이 피사체에 부딛히고 반사되어 나오는 빛을 측정하는 것인데, 같은 광원에서 반사율이 달라진다면? 그리고 검정색과 흰색의 경우는? 카메라가 인식하는 빛의 양은 당연히 달라질 수 밖에 없다.
카메라가 이 반사율과 색상의의 차이를 정확히 인식하고 측광을 하면 좋겠지만 안타깝게도 그렇지 못하다. 카메라는 센서가 인식하는 모든 대상을 흑백으로 보고 빛을 18% 반사한다고 가정하고 노출을 정하게 된다.

카메라가 인식하는 사물과 색상은 위 표와 같다고 보면 된다.
즉, 어떤 사물 어떤 색이건 대상을 흑백으로 변환한 다음 측광 영역에 해당하는 곳의 색이 중앙의 회색과 일치하지 않는다면 현재 인식한 색과 비교하여 노출의 정도를 표시해주게 되는 것이다.
예를 들면 카메라가 인식한 색이 좌측의 검정색이라면 노출이 부족하므로 현재 설정이 2스톱 부족하다고 표시해주고 우측의 흰색이라면 노출이 과하다고 인식하여 노출이 2스톱 높다고 표시하게 되는 것이다.

여기서 그레이 카드의 역할은 매우 쉽고 단순하다. 피사체에 따라 반사된 빛의 양은 천차만별이므로 정확한 측정을 위해 피사체 근처에 그레이카드를 두고 카메라가 그레이카드의 광량을 측정 했을 때 18%반사율의 회색과 일치하는 값을 찾게 하는 것이다.

사용법

위 원리를 이해 했다면 사용법은 매우 단순하다.
멀리 있는 피사체라면 불가능하겠지만 사람이나 정물을 촬영할 경우라면 다음의 절차를 따르면 된다.

  1. 적정한 광원 아래 피사체를 위치한다.
  2. 그레이 카드로 피사체를 가리거나 근처에 둔다.
  3. 카메라로 피사체 근처 그레이 카드의 광량을 측정한다.
  4. 측정 된 값에 맞는 노출값을 설정한다.
  5. 그레이카드를 치운다.
  6. 실제 피사체를 촬영한다.

마무리

사실 필름 한 컷 한 컷이 돈이고, 촬영 직후 바로 결과물을 확인할 수 없던 과거에나 쓰던 물건이긴 하다. 카메라 자체의 측광을 위한 센서나 알고리즘도 좋아졌고, 정확하게 노출을 측정해주는 노출계를 사용하는 것도 좋은 방법이다.
아니 이런 기술적인 부분을 차치하더라도 요즘은 대부분 디지털 카메라로써 촬영 후 즉시 결과물의 확인이 가능하니 노출이 맞지 않다 싶으면 바로 다시 촬영하면 된다. 현장에서 미처 추가 촬영을 하지 못했다면 포토샵 등의 다양한 소프트웨어의 힘을 빌어 얼마든지 사후에도 처리가 가능하다.
하지만 적어도 카메라의 측광이란 어떤 원리로 이루어지는지 이해하고, 상황에 따라 적절히 그레이 카드를 활용한다면 더 좋은 결과물을 얻을 수 있을 것이다.

MS 파워포인트 한/영 자동전환 기능 끄기

마이크로소프트 파워포인트(Microsoft Power Point)를 사용하다 보면 자동으로 한글이 영어로 영어에서 한글로 바뀌는 경우를 볼 수 있다.
아주 아주 편리한 기능으로 ‘database’라는 단어를 입력하고 싶을 때 한글이 선택된 상태로 ‘ㅇㅁㅅ뮴ㄴㄷ’를 입력하면 자동으로 제대로 된 영문으로 고쳐주는 기능이다.

정상적인 동작. 아주 편하다

 

하지만 종종 내가 원하지 않는 경우에도 변환이 되는 경우가 있는데 이런 경우라면 [파일][옵션] [언어교정][자동 고침 옵션(A)…] 메뉴에서 [한/영 자동 고침(K)] 항목을 비활성화 해주면 된다

 

 

하.지.만

사실 위 기능은 구글에 ‘파워포인트 한영전환’ 9자만 검색하면 어떻게 바꾸는지 엄청 많이 나오므로 굳이 이렇게 포스팅할 필요가 없지만…

이런 어처구니 없는 동작을 하는 경우엔?

분명히 [한/영 자동 고침(K)] 항목을 비활성화 했음에도 제 멋대로 변경되는 것을 확인할 수 있다. “spark”의 경우는 아무런 문제가 없는 영단어인데 제 멋대로 자꾸 ‘rk ‘만 ‘가’로 치환하는데다 “repository”의 경우는 ‘sitory’ㅇ를 ‘냐새교’로 있지도 않은 단어로 자꾸 치환 해대니 미쳐버릴 노릇.

사실 이 문제는 파워포인트의 한영 전환 기능이 아니라 윈도우즈에 설치된 한글 입력기가 개입 하는 것으로 비단 파워포인트 뿐 아니라 다른 모든 어플리케이션에서 제 멋대로 문자를 치환해버리는 경우이다. 그러니까 파워포인트 문서를 작성하다가 문자가 변경된다고 옵션을 백번 바꿔봐야 소용이 없고, 엑셀에서도 제 멋대로 문자를 치환하고, 크롬의 경우는 제 멋대로 주소표시줄에서 자동완성을 시전하는 아주 전방위에서 사용자를 괴롭히는 그런 문제가 되겠다.

원인은 ‘한글과 컴퓨터 아래아한글’. 정확히 말하면 한컴 오피스를 설치 할 때 함께 설치되는 “한컴입력기”.

두 번째 동영상과 같은 증상이 나타나면 “한컴 입력기”를 제거함으로써 증상을 고칠 수 있다.
방법은 다음과 같다

  1. 윈도우즈 [설정] [시간 및 언어][언어] 메뉴 진입
  2. 기본 설정 언어“의 “한국어” 메뉴 선택
  3. 한국얼 아래 나타나는 [옵션]에서 “키보드” 항목 선택
  4. [한컴 입력기] 선택
  5. [제거] 버튼 클릭

렌즈필터의 품질에 따른 결과물의 차이 (필터가 사진의 품질에 주는 영향)

기본적으로 렌즈 필터라 함은 렌즈의 앞에 장착하여 부가적인 효과를 더해주는 도구를 말한다. 요즘에야 디지털 카메라로 촬영한 디지털 결과물을 포토샵 등의 프로그램으로 수정을 하니까 필터로 얻는 효과가 무엇이 있을까 싶기도 하지만 과거 필름을 주로 사용하던 시절은 촬영한 이후 결과물을 수정하는 것이 쉽지 않았기 때문에 필터를 장착함으로써 다양한 효과를 추가하였다.

필터의 종류와 세세한 역할은 이후에 포스팅 하기로 하고 이번 포스트에서는 몇 가지 종류와 개념만 소개한다.

  • PL 필터 또는 CPL 필터 : Polarizing Filter 또는 Circular Polarizing Filter. 빛을 굴절시켜서 유리면이나, 수면의 반사광을 제거하는 역할을 한다.
  • ND 필터 : Neutral-density filter. 아주 밝은 날 혹은 밝은 공간에서 빛이 너무 강해 아무리 조리개를 조이고 셔터스피드를 짧게 해도 밝게 나오는 경우 혹은, 밝은 렌즈에서 오는 배경 흐림 효과 등을 사용하고 싶은데 빛이 강한 경우 등에 사용한다. ND100, 200 등의 숫자를 붙여서 빛의 차단 정도를 표기한다.
  • 크로스 필터: Cross filter. 렌즈에 규칙적인 금이 가있는 필터로 금이간 모양대로 빛이 갈라지는 효과를 얻기 위한 필터이다. 광원이 십자가 모양 등으로 명확히 갈라지는 사진 등을 떠올리면 된다.
  • UV 필터 또는 MCUV 필터 등: Ultra-Violet Filter 또는 Multi-Coated Ultra-Violet Filter. 필터 유리면에 자외선 등의 특정 빛을 차단하는 코팅이 되어있는 필터를 말한다. 일반적으로는 자외선 차단의 효과보다는 렌즈 보호의 목적으로 사용한다.

이번 포스트에서는 렌즈의 보호를 위한 목적으로 필터를 사용하는 경우 (말그대로 렌즈 보호가 목적이므로 가격이 상대적으로 저렴한 필터를 사용하는 경우가 많다) 필터의 품질에 따라 사진이 어떻게 변하는가를 비교해보고자 한다.
어쩌면 당여한 얘기일 수 있지만 과거 초기의 디지털 카메라의 경우 센서의 부족한 성능으로 화질이 상대적으로 좋지 않았고 화소수도 적다보니 세밀한 차이는 도드라지지 않는 경우도 있었지만 근래 고화소 카메라의 경우는 필터의 품질에 따라 차이가 있을 수 있음을 이해하는 것이 그 목적이다.

실제 비교

실험에 사용한 장비는 다음과 같다.
– 바디 : 소니 a7M4 (모델명 :ILCE-7M4)
– 렌즈 : 소니 FE 200-600 F5.3-6.3 G OSS (모델명 : SEL200600G)
– 필터 : ALLDA UV 렌즈필터 95mm (온라인 가격비교 최저가 약 5000원)
SIGMA Protector 95mm (온라인 가격비교 최저가 약 11만원)
1상기 장비 선정 사유 : 200-600 렌즈 구입 후 부담되는 필터 가격에 (95mm 필터는 비싸다..) 1만원도 안하는 필터를 장착하고 촬영한 사진의 품질이 너무 좋지 않아 과연 이 품질 저하가 필터 탓인가 하는 의문에서 시작했기 때문이다.

리사이징 된 사진은 크게 차이가 나지 않는다.

sigma Protector : 특이사항은 없다.
자세히 보면 Allda UV filter #1.의 경우 품질이 떨어짐을 알 수 있고, (굵은 선의 경계을 자세히 보자)
Allda filter #2. 의 경우는 초점이 맞는 영역의 앞과 뒤 그러니까 0에서 멀어지는 선들이 두 개 씩 보이는 것을 확인할 수 있다.
(처음에는 핀이 안맞는 것이라 생각했다.)

해당 부분만 좀 더 확대 해보면

우측 사진은 +2, -2 부터 상이 이중으로 맺히는 것이 확연히 보인다.

2종의 필터임에도 세 장의 결과를 비교한 이유는
필터의 비교를 위해 필터를 교체해야 하니 필터를 헐겁게 체결하였는데 필터를 헐겁게 체결 했을 때와 그렇지 안을 때의 차이가 있었음을 발견했기 때문이었는데, 실제 동일한 필터임에도 약 90도 회전시켜 촬영을 해보니 상이 이중으로 촬영 되는 정도의 차이가 있음을 쉽게 확인할수 있었다.

여기서 왜 이와 같은 차이가 나는가에 대한 원인을 짐작해 볼 수 있었다. 2당연한 이야기지만 진짜 원인은 알 수 없다. 전문가도 아니고, 촬영을 통해 결과물의 비교 외에 다른 측정 (표면 굴곡 등)은 불가능 했기 때문이다.
증상이 난시와 비슷한 것으로 미루어 보아 첫 번째 의심 사유는 필터의 표면이 울퉁 불퉁 한것이 아닌가 하는 것. 불규칙적인 것은 아니고 아마도 물결처럼 일정한 방향의 패턴을 가지지 않을까 하는 것이다.
두 번째는 고른 연마가 되지 않았기에 연삭의 흔적이 있고 3필터를 뚫어져라 처다본다고 확인할 수 있는 정도로 보이는 흔적은 아니다. 4첫 번째 원인가 비슷한데 이 경우는 울퉁불퉁이 아니라 거친 사포로 표면을 문질렀을때 깎여 나가는 형태의 모양이다. 이 흔적에 따라 빛이 꺾이면서 상이 두개로 찍히는 것이 아닐까 한다.

결국 각도를 조절했을 때 결과물이 달라지는 것으로 보아 일정한 패턴의 굴절을 일으키는 무언가가 필터에 있다는 이야기가 아닐까 한다.

 

결론

필자의 경우 항상 비주류 카메라에 저가의 렌즈만 사용하는 데다 실력도 워낙에 개차반인지라 애진작에 결과물의 해상도도 낮고 품질 자체도 낮다 보니 렌즈 필터는 제조사 등에 따라 딱히 결과물에 영향을 주지 않는 다고 생각했었다.
하지만 이번 실험 결과 렌즈 보호 용으로 사용하는 필터라 할지라도 제조사 혹은 가격 등에 따라 엄연히 품질의 차이가 존재하며, 기준 이하의 필터는 결과물에 아주 많은 영향을 미친다는 것이다.

결론의 결론
필터 구매 시 너무 싼건 사지 말자.