1. 하이퍼바이저(ex. ESXi 등)
- 가상화계층을 구현해주는 소프트웨어
- HW에 VM 생성, VM자원 할당 등 처리해준다.
- 윈도우/리눅스 등의 OS없이 VM을 운영관리 할 수 있는 것

2. ESXi
- VMware에서 개발한 하이퍼바이저

3. vCenter
- 다수의 ESXi 및 VM들을 중앙관리 및 모니터링 하는 것이 vCenter

4. vSphere HA
- 특정 ESXi서버에서 장애가 발생할 경우, VM클러스터 내 다른 ESXi서버로 자동 failover되는 기능(=고가용성 유지 가능)

 

5. vMotion란?
- VM이 상주하는 호스트의 위치 및 데이터스토어 위치를 무중단으로 이동할 수 있다.
- Host vMotion : VM이 상주하는 호스트 서버를 변경
- Storage vMotion : VM이 저장된 스토리지(데이터스토어)를 변경
- Host & Storage vMotion : 가상시스템이 상주하는 호스트 서버 및 스토리지(데이터스토어)를 변경

※ 마이그래이션 관련
- Hot 마이그래이션 : VM 전원ON 상태에서 마이그래이션
- Cold 마이그래이션 : VM 전원OFF 상태에서 마이그래이션

6. Template & Clone
- Template : 사용자가 원하는 구성의 VM을 템플릿으로 만들수 있다.
- Clone : 템플릿VM이나 사용중인 구성의 VM을 복제할 수 있다.

 

참고URL

https://smallrich.tistory.com/5

https://dora-guide.com/%ED%95%98%EC%9D%B4%ED%8D%BC%EB%B0%94%EC%9D%B4%EC%A0%80/

https://worlf.tistory.com/142

[목차]

1. Zabbix Agent 구성 (RHEL7)

2. 브라우저에서 작업-Agent를 모니터링 대상으로 등록하기

 

[사전 준비사항]

- SELINUX 비활성화

- Firewalld 비활성화

 

Zabbix Server 구성

https://jparkk.tistory.com/47


1. Zabbix Agent 구성 (RHEL7)

1) Zabbix 레포지토리 구성

(RHEL8)
rpm -ivh http://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-agent-5.0.10-1.el8.x86_64.rpm

(RHEL7)
rpm -ivh http://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.10-1.el7.x86_64.rpm

 

2) Zabbix Agent 설정 파일 구성 & 재기동

vi /etc/zabbix/zabbix_agentd.conf

(중략)

Server=192.168.0.181		 # Zabbix Server의 IP를 입력한다!
ServerActive=192.168.0.181	 # Zabbix Server의 IP를 입력한다!
StartAgents=1
Hostname=192.168.0.171		 # Zabbix Agent의 IP를 입력

(중략)

systemctl restart zabbix-agent

 

2. 브라우저에서 작업 : Agent를 모니터링 대상으로 등록하기

- 설정 → 호스트  → 호스트작성 버튼 클릭(우측상단) → 내용입력  → '추가' 클릭

- 템플릿 → 원하는 템플릿 '연결'  → '추가' 버튼 클릭

- 모니터링 → 호스트  서버 list를 볼 수 있고, 해당 서버의 그래프를 눌러서 볼 수 있다.

 

 

※ 참고URL
https://hkjeon2.tistory.com/26
https://hkjeon2.tistory.com/27
https://tg360.tistory.com/entry/%EC%86%8D%EC%A0%84%EC%86%8D%EA%B2%B0-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0

[목차]

1. Zabbix Server 구성 (RHEL8)

2. 브라우저에서 설정

 

[사전 준비사항]

- SELINUX 비활성화

- Firewalld 비활성화

 

Zabbix Agent 구성

https://jparkk.tistory.com/48


1. Zabbix Server 구성 (RHEL8)

1) 필요한 패키지 다운로드(php, httpd, mysql)

dnf install -y httpd mariadb-server php php-cli php-common php-mbstring php-mysqlnd php-xml php-bcmath php-devel php-pear php-gd

systemctl start mariadb httpd

 

2) mysql 보안 설정

mysql_secure_installation

(중략)
Enter current password for root (enter for none): (엔터 입력)
OK, successfully used password, moving on...

(중략)

Set root password? [Y/n] y
New password: (root 입력)
Re-enter new password: (root 입력)
Password updated successfully!
Reloading privilege tables..
 ... Success!
 
(중략)

Remove anonymous users? [Y/n] y
 ... Success!

(중략)

Disallow root login remotely? [Y/n] y
 ... Success!

(중략)

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

(중략)

Reload privilege tables now? [Y/n] y
 ... Success!
(중략)

 

3) Zabbix DB, User 생성

mysql -u root -p

Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.3.32-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE zabbix_db CHARACTER SET utf8 collate utf8_bin;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> GRANT ALL ON zabbix_db.* TO 'zabbix_user'@'localhost' IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> exit
Bye

 

4) Zabbix 레포지토리 구성

rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm

https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm(을)를 복구합니다
경고: /var/tmp/rpm-tmp.DmXnus: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Verifying...                          ################################# [100%]
준비 중...                         ################################# [100%]
Updating / installing...
   1:zabbix-release-5.0-1.el8         ################################# [100%]

 

5) Zabbix Server 패키지 설치

dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-apache-conf

systemctl start zabbix-server zabbix-agent php-fpm

 

6) Zabbix DB 관련 설정

cd /usr/share/doc/zabbix-server-mysql/

zcat create.sql.gz | mysql -u zabbix_user -p zabbix_db
Enter password: (root 입력)

 

7) Zabbix Server DB 설정

vi /etc/zabbix/zabbix_server.conf

DBHost=localhost
DBName=zabbix_db
DBUser=zabbix_user
DBPassword=root

 

8) Zabbix Server 시간대 설정 & 프로세스 재기동

vi /etc/php-fpm.d/zabbix.conf

# 맨 아래 줄에 추가
php_value[date.timezone] = Asia/Seoul

systemctl restart zabbix-server zabbix-agent php-fpm httpd

 

 

 

2. 브라우저에서 설정

- http://(Zabbix Server IP)/zabbix 로 접근하여 아래 내용 입력

- 그 외, 전부 'Next Step'버튼 누른다.

- 로그인은 Admin/zabbix 아래와 같이 넣어 접속한다.

 

※ 언어 설정은 아래와 같이 변경 가능하다

- 서버에서 'language pack'을 설치하여야 언어 변경이 가능

- 참고URL : https://hkjeon2.tistory.com/27

 

※ 참고URL
https://hkjeon2.tistory.com/26
https://hkjeon2.tistory.com/27
https://tg360.tistory.com/entry/%EC%86%8D%EC%A0%84%EC%86%8D%EA%B2%B0-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0

https://easypeashenglish.tistory.com/39

 

MTBF, MTTF, MTTF, 가용도 개념

오늘은 제조 활동 시에 설비의 주어진 사용 조건 아래에서 의도하는 기간 동안 정해진 기능을 성공적으로 수행하는 능력인 신뢰성 (MTBF, MTTF, MTTR) 및 요구기능을 요구시간 동안 수행할 수 있는

easypeashenglish.tistory.com

 

1. IP, 서브넷 관련

https://inpa.tistory.com/entry/WEB-IP-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%84%9C%EB%B8%8C%EB%84%B7-%EB%A7%88%EC%8A%A4%ED%81%AC-%EC%84%9C%EB%B8%8C%EB%84%B7%ED%8C%85-%EC%B4%9D%EC%A0%95%EB%A6%AC

 

🌐 IP 클래스 · 서브넷 마스크 · 서브넷팅 계산법 💯 총정리

아이피(IP) 정리 IP(Internet Protocol) 란 인터넷에 연결되어 있는 모든 장치들(컴퓨터, 서버 장비, 스마트폰 등)을 식별할 수 있도록 각각의 장비에게 부여되는 고유 주소이다. 아이피(ip)는 일반적으

inpa.tistory.com

2. CIDR

https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-CIDR-%EC%9D%B4-%EB%AC%B4%EC%96%BC-%EB%A7%90%ED%95%98%EB%8A%94%EA%B1%B0%EC%95%BC-%E2%87%9B-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC-%EA%B3%84%EC%82%B0%EB%B2%95#cidr_classless_inter-domain_routing

 

🌐 CIDR 개념 쉽게 이해해보자 & 계산법

CIDR (Classless Inter-Domain Routing) 네트워크 설계를 하면서 가장 많이 접하게 될 개념이 CIDR(사이더) 이다. CIDR의 full name은 (Classless Inter-Domain Routing) 으로 클래스 없는 도메인간 라우팅 기법이라는 뜻을

inpa.tistory.com

 

 

아래 링크 내용에 이어지는 내용이다.

https://jparkk.tistory.com/20

 

Haproxy, Keepalived 란?

※ 사전내용 ※ 1. 로드 밸런싱 - 서버가 처리해야 할 요청이 많을 경우, 요청을 여러 서버에 분배해주는 것 2. 로드 밸런서가 필요한 이유와 방법 - 요청이 많아짐에 따라, 서버에는 더 많은 부하

jparkk.tistory.com

 

만들어 볼 구성도

 

 

Haproxy+Keepalived 서버 (active/standby) 구성하기

실행환경 : CentOS Linux release 7.9.2009 (Web1~2, Haproxy active, Haproxy standby)

 

1. 패키지 설치

yum 명령어로 설치한다.

[01:03:16][root@haproxy_active_svr ~]
$ yum install haproxy keepalived

패키지 설치 확인 및 버전 확인

[01:08:27][root@haproxy_active_svr /]
$ haproxy -version
HA-Proxy version 1.5.18 2016/05/10
Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>

[01:08:31][root@haproxy_active_svr /]
$ keepalived  -version
Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
Copyright(C) 2001-2017 Alexandre Cassen, <acassen@gmail.com>

 

 

2. Keepalived 설정하기

1) keepalived.conf 설정하기(master)

global_defs {
   router_id haproxy_active	# id 지정
}

vrrp_instance VI_1 {
    state MASTER		# master 역할이니, master로 지정
    interface eth0		# VIP를 추가할 인터페이스명을 지정
    virtual_router_id 10	# id 지정
    priority 200		# priority값을 지정, 값이 높으면 master
    advert_int 1
    authentication {
        auth_type PASS		# Master-Standby 서버 동일하게 적용
        auth_pass 1111		# Master-Standby 서버 동일하게 적용
    }
    virtual_ipaddress {
        192.168.0.104		#VIP를 지정
    }
}

 

2) Active 서버에서 VIP가 적용되었는지 확인

$ ip ad
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:39:48:f5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.102/24 brd 192.168.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 192.168.0.104/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe39:48f5/64 scope link
       valid_lft forever preferred_lft forever

 

3) keepalived.conf 설정하기(standby)

global_defs {
   router_id haproxy_standby    # id 지정
}

vrrp_instance VI_1 {
    state BACKUP                # BACKUP 역할이니, BACKUP로 지정
    interface eth0              # VIP를 추가할 인터페이스명을 지정
    virtual_router_id 10        # id 지정
    priority 100                # priority값을 지정, 값이 높으면 master
    advert_int 1
    authentication {
        auth_type PASS          # Master-Standby 서버 동일하게 적용
        auth_pass 1111          # Master-Standby 서버 동일하게 적용
    }
    virtual_ipaddress {
        192.168.0.104           #VIP를 지정
    }
}

 

4) Standby 서버에서 VIP 적용 확인

→ Standby 서버이므로, VIP가 뜨지 않는게 정상.

→ 단, Master서버의 keepalived를 stop하고 VIP가 뜨면 정상

$ ip ad
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:2b:e8:84 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.103/24 brd 192.168.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe2b:e884/64 scope link
       valid_lft forever preferred_lft forever

 

3. Haproxy 구성하기

→ Haproxy 설정은 /etc/haproxy/haproxy.cfg에서 한다.

→ Active - Standby 모두 동일하게 설정을 적용하면 된다. 단, Listen 부분의 IP는 각 서버의 IP로 넣는다.

→ 각 버전에 맞는 매뉴얼은 이 URL을 참고하면 설명이 되어 있다.

 

1) haproxy.cfg 파일 설정 적용하기

- global : 전체 영역에 걸쳐서 적용되는 설정

- defaults : 다음 파트들(frontend, backend, listen)에 대한 변수를 설정한다.

- frontend : 클라이언트의 요청이 연결될 ip 및 port를 설정

- backend : frontend에서 들어온 트래픽을 전달할 프록시 서버들에 대한 설정, healthcheck 설정

- listen : 모니터링 및 통계 페이지 설정

#===========================================
# global 영역
# 전체 영역에 걸쳐서 적용되는 설정
#===========================================
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

#===========================================
# default 영역
# 다음 파트들(frontend, backend, listen)에 대한 변수를 설정한다.
#===========================================
defaults
	mode	http			# 인스턴스의 실행 모드 또는 프로토콜 설정
	log	global			# 로깅 활성화
	option	httplog			# HTTP 요청, 세션 상태 및 타이머 로깅 사용
	option	dontlognull		# null 연결 로깅 사용 또는 사용 안 함
	option	http-server-close		# 서버 측에서 http 커넥션 종료를 사용
	retries	3			# 연결 실패 후, 재시도 횟수
	timeout	http-request	10s	# 완전한 HTTP 요청을 대기할 수 있는 최대 허용 시간
	timeout	queue	1m		# 커넥션 슬롯이 비워질 때까지 대기열에서 대기할 최대 시간 설정
	timeout	connect	10s		# 서버에 대한 연결 시도가 성공할 때까지 대기할 최대 시간을 설정
	timeout	client	1m		# 클라이언트 측에서 최대 비활성 시간을 설정합니다.
	timeout	server	1m		# 특정 시간 이상 활동이 없으면 서버가 연결을 끊는다.
	timeout	http-keep-alive	10s	# 새로운 http 연결이 나타날 때까지 기다리는 최대 시간 설정
	timeout	check	10s		# 이미 연결된 이후에만, 추가적인 check timeout 시간을 설정한다.
	maxconn	3000			# 프로세스당 최대 동시 연결 수 지정

#===========================================
# frontend 영역
# 클라이언트의 요청이 연결될 ip 및 port를 설정
#===========================================
frontend		www
	bind	*:80			# 접속 port 지정
	default_backend	www.test.com	# backend 지정

#===========================================
# backend 영역
# frontend에서 들어온 트래픽을 전달할 프록시 서버들에 대한 설정
# healthcheck 설정
#===========================================
backend		www.test.com
	mode	http				# 인스턴스의 실행 모드 또는 프로토콜 설정
	balance	roundrobin			# 로드밸런싱 타입 지정
	option	httpchk /index.html		# index.html 파일의 유무로 healthcheck
	option	forwardfor			# 서버로 전송된 요청에 X-Forwarded-For 헤더 삽입 사용
	option	http-server-close			# 서버 측에서 http 커넥션 종료를 사용
	server	www1	192.168.0.100:80 check	# backend 서버를 선언 "server (name) (ip주소:포트)
	server	www2	192.168.0.101:80 check	# backend 서버를 선언


#===========================================
# Listen 영역
# 모니터링 및 통계 페이지 설정
#===========================================
listen	stats
	bind	192.168.0.102:8000 	# 접속 포트 지정
	stats	enable			# 상태 페이지 활성화
	stats	uri /status		# 접근할 uri 경로
	stats	refresh	3s		# 새로고침 주기 설정
	stats	auth admin:admin		# 상태페이지 접근 인증 추가

 

2) haproxy 설정파일 검사

$ haproxy -f /etc/haproxy/haproxy.cfg  -c
Configuration file is valid

 

3) haproxy 시작하기

$ systemctl start haproxy

 

4) haproxy 모니터링 페이지에서 웹서버들의 status 확인하기

- 브라우저를 띄워서 Listen 부분에서 설정한 모니터링 페이지에 접속한다.

- 화면 중간에 www1, www2의 status가 UP으로 보이는 것을 확인 할 수 있다.

haproxy 모니터링 페이지

 

4. 웹서버 로그를 통해서 haproxy를 통한 로드밸런싱이 잘 되는지 확인해보기

1) 브라우저에서 www.test.com으로 접속해보기

- www1과 www2가 번갈아 출력되면 정상적으로 로드밸런싱 되는것으로 보면 된다.

 

2) 웹서버의 access_log 확인해보기

- 로그를 보면 User-agent 값이 없는 로그가 계속 찍히는데, 이것은 Haproxy가 웹서버로 healthcheck를 하고 있는 것이다.

- User-agent 값이 있는 로그는 브라우저에서 test.com를 호출하여 찍힌 로그이며, 소스 IP가 haproxy IP이다.

- 이것은 웹서버의 로그설정에서 x-forward-for 부분을 추가해주면 정상적으로 소스 IP가 보이게 할 수 있다.

 

3) 웹서버의 로그설정에서 실제 client의 IP를 찍히도록 설정을 변경한다.

- httpd.conf에서 아래와 같이 변경하고 access_log를 확인하면 그림과 같이 소스 IP가 찍히는 것을 볼 수 있다.

- Haproxy 서버의 IP는 안 찍힌다..;;

참고 URL

https://zetawiki.com/wiki/%EC%95%84%ED%8C%8C%EC%B9%98_X-Forwarded-For_%EB%A1%9C%EA%B7%B8_%EC%84%A4%EC%A0%95

(before)
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

(after)
    LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

 

5. Active 서버를 keepalived를 stop하여도 URL 호출이 잘 되는지 확인하기(failover 테스트)

→ Active 서버의 Keepalived와 Haproxy를 stop 시킨 후, VIP로 호출시 www1, www2 가 잘 나오면 정상

→ www1, www2의 access_log를 보면, healthcheck와 브라우저 호출 로그가 잘 찍히면 정상이다.

 

 

※ 주의사항

haproxy 설정파일에서 Listen부분은 반드시 VIP를 넣으면 안되고, 각 서버의 IP를 넣어야 한다.

(삽질함..ㅡㅡ)

'Infra > 기타(가상화 등)' 카테고리의 다른 글

Zabbix 구성-2 (Zabbix Agent)(RHEL7)  (0) 2023.10.26
Zabbix 구성-1 (Zabbix Server)(RHEL8)  (0) 2023.10.26
서비스 가동률(MTTR, 가용도 등 관련)  (0) 2023.08.31
Network 기본 내용  (0) 2023.08.13
Haproxy, Keepalived 란?  (0) 2023.07.24

※ 사전내용 ※

1. 로드 밸런싱

- 서버가 처리해야 할 요청이 많을 경우, 요청을 여러 서버에 분배해주는 것

 

2. 로드 밸런서가 필요한 이유와 방법

- 요청이 많아짐에 따라, 서버에는 더 많은 부하가 걸리게 된다. 이를 해소하기 위해 로드밸런서를 사용한다.

- 서버측에서는 서버의 사양을 업그레이드하는 방식(Scale-up)과 서버의 수량을 늘리는 방식(Scale-out)방식으로 서버

 

→ HAproxy는 SW 로드밸런서이며, Scale-out 방식을 선택할 때 고려해 볼 수 있다.

 

참고 URL1 https://dev-youngjun.tistory.com/97

참고 URL2 https://leffept.tistory.com/309

 

 

1. Haproxy란?

- L4, L7 HW 로드밸런서를 대체하기 위해 만들어진 오픈소스 SW로드밸런서이다.

- HAproxy 뒤에 있는 Web 서버에 대해 Health check 기능을 지원하며, Down 상태의 인스턴스에는 트래픽을 보내지 않는다.

- Keepalived와 같이 사용한다.

 

2. Keepalived란?

- 가상의 IP(=VIP)를 기반으로 Active 노드에 장애가 발생했을때 자동으로 Standby 노드로 failover 해주는 기능을 지원한다.

참고 URL

https://navercloudplatform.medium.com/keepalived%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%98%EC%97%AC-%EA%B0%84%EB%8B%A8%ED%95%98%EA%B2%8C-ha-%EA%B5%AC%EC%84%B1%ED%95%B4%EB%B3%B4%EA%B8%B0-c840b90149a5

+ Recent posts