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을 복제할 수 있다.
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
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로 넣는다.
- 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으로 보이는 것을 확인 할 수 있다.
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가 찍히는 것을 볼 수 있다.