/etc/haproxy/haproxy.cfg 설정 파일 수정 (환경에 따라 도메인 및 routing 또는 loadbalancing으로 써있는 부분을 바꿔서 맞춰주면 됩니다.)
defaults
log global
log 127.0.0.1 local2
mode http
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 20
timeout queue 86400
timeout connect 86400
timeout client 86400
timeout server 86400
timeout http-keep-alive 30
timeout check 20
maxconn 50000
frontend http
bind *:80
acl routing hdr(host) -i routing.nirsa.com
acl loadbalancing hdr(host) -i loadbalancing.nirsa.com
use_backend routing if routing
use_backend loadbalancing if loadbalancing
# 1. URL Based Routing
backend routing
option httpclose
option forwardfor
server routing 10.10.10.10:80
# 2. URL Based LoadBalancing
backend loadbalancing
mode http
stats enable
stats hide-version
stats uri /stats
stats realm Haproxy\ Statistics
# monitoring:monitoring은 loadbalancing.nirsa.com/stats (세션 등 모니터링 페이지)
## 도메인에 입력될 ID/PW 이므로 변경 후 사용 해야 합니다.
stats auth monitoring:monitoring
# 로드밸런싱 방식은 roundrobin으로 사용 했습니다.
balance roundrobin
option httpclose
option forwardfor
cookie LB insert
server test-01 10.10.10.20:80 check
server test-02 10.20.10.30:80 check
위와 같이 설정이 끝났다면 서비스 재시작 하고 DNS서버에 웹서버의 A레코드를 HAProxy IP로 변경 후 재대로 라우팅 및 로드밸런싱이 되는지 확인 하시면 됩니다. 참고로, haproxy의 로그는 /var/log/haproxy.log에 남겨지니 참고 하시길 바랍니다.
DNS 관리툴 fmDNS 설치 시 에러 "Database setup failed. Please try again"
해당 에러는 /var/www/html/dnsadmin/config.inc.php 설정 파일에서 입력한 Databases Name 부분을 잘못 입력할 경우 발생할 수 있습니다.
Databases Name 부분($__FM_CONFIG['db']['name]="~~")은 MySQL에 생성한 데이터베이스의 이름이어야 합니다. fmDNS 설치하며 MySQL에 생성했던 데이터 베이스의 이름으로 변경 후 systemctl restart httpd 하여 적용하고 재시도 하면 해결 가능 합니다.
fmDNS는 DNS를 좀 더 관리하기 편하게 webUI를 이용하여 사용하는 오픈소스 툴 입니다.
fmDNS의 장점
버튼 클릭만으로 DNS SEC을 설정하거나 도메인&존파일 설정 등 webUI가 편하다 생각하시는 분들은 사용하시는걸 추천 드립니다. 그럴일은 많이 없겠지만 리눅스 환경이 낯설고 DNS를 잘 다뤄보지 못한 외부 인원 등이 DNS를 직접 사용해야할 경우에 fmDNS를 도입하는걸 추천 드립니다.
fmDNS의 단점
변경 사항을 적용하기까지 약 2~3분 가량 걸린다는 점과 비교적 복잡한 설치 과정 입니다.
또한 이미 CLI 환경에서 DNS를 다루어 보셨고 그것이 익숙하신분이라면 오히려 불편하실 겁니다. 익숙하신분들은 DNS 관리툴에서 얻을 수 있는 이점이 없기에 (오히려 관리 차원에서 단점이 더 커질 수 있습니다) 사용하지 마시고 정 궁금하기면 구축 정도만 해보는걸 추천 드립니다.
DNS 관리툴 fmDNS 설치 및 구축-1 (APM, bind 설치 및 셋팅)
fmDNS를 설치하기 위해서는 APM을 셋팅해야 하고, PHP의 버전은 5.5 이상으로 사용하셔야 합니다. 이번 포스팅에서는 APM 설치까지 포함하여 작성 하겠습니다.
참고로 php 5.5 버전의 경우 php55w 라는 패키지도 많이 설치 하시는걸로 보이는데, php55w으로 설치하면 재대로 연동이 되지 않아서 권한 에러가 발생하니 아래와 같이 설치 진행 해주세요
# apache. dns 설치
yum -y install bind httpd
# php 5.5 설치
yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum --enablerepo=remi-php55 -y install php php-process php-mysql
# mysql 설치
yum -y install http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum -y install mysql-community-server
# ServerName을 설정하여 httpd start 시 에러가 발생하지 않도록 아래 내용 설정
vi /etc/httpd/conf/httpd.conf
/ServerName
ServerName=localhost
# 서비스 시작/등록
systemctl start httpd
systemctl start mysqld
systemctl start named
systemctl enable httpd
systemctl enable mysqld
systemctl enable named
이후 아래와 같이 mysql 설정을 진행 합니다. 이후 fmDNS 설정할 때 다시 설명 하겠지만, 저의 경우 로컬 윈도우의 브라우저에서 fmDNS 설치를 마저 끝낼 예정이므로 외부에서 접속하기 위해 192.168.0.% 으로 열어 두었습니다.
아래를 참고하여 자신의 환경에 맞게 IP 접근 권한을 설정 해주세요.
cat /var/log/mysqld.log | grep 'temporary password'
mysql -u root -p
[초기 패스워드 입력]
# 대소문자,숫자,특수문자를 포함하여 8자 이상만 사용 가능
alter user 'root'@'localhost' identified by '사용할패스워드';
CREATE DATABASE dns;
CREATE USER 'dnsadmin'@'localhost' IDENTIFIED BY '사용할패스워드';
GRANT ALL PRIVILEGES ON dns.* TO 'dnsadmin'@'localhost';
CREATE USER 'dnsadmin'@'192.168.0.%' IDENTIFIED BY '사용할패스워드';
GRANT ALL PRIVILEGES ON dns.* TO 'dnsadmin'@'192.168.0.%';
flush privileges;
commit;
quit
참고로, 위에서의 초기 패스워드는 아래 이미지에 빨간 박스가 있는 부분 입니다.
DNS 관리툴 fmDNS 설치 및 구축-2 (fmDNS 설치)
이제 APM 셋팅은 완료 되었으니 fmDNS 설치를 진행 합니다. 2020년 04월 28일을 기준으로 아래 코드를 사용하여 다운로드할 수 있습니다.
cd /opt
wget http://www.facilemanager.com/download/facilemanager-complete-3.5.7.tar.gz
tar -zxvf facilemanager-complete-3.5.7.tar.gz
cp -r /opt/facileManager/server/ /var/www/html/dnsadmin
참고로 버전이 바뀔 경우 위대로 따라하면 wget이 안될 수 있습니다. fmDNS 홈페이지에 접속 후 아래 이미지와 같이 다운로드 부분에 마우스로 우클릭하여 "링크 주소 복사"를 클릭하여 링크 주소를 가져올 수 있으니 참고 해주세요.
이후 아래와 같이 진행하여 conf 파일을 설치 합니다. 참고로 현재 yum 설치하면 기본 Apache 2.4 버전이 설치되므로 아래 코드는 참고해서 진행 해주시면 됩니다.
vim /etc/httpd/conf.d/dnsadmin.conf
Alias /dnsadmin /var/www/html/dnsadmin
<Directory /var/www/html/dnsadmin/>
Options FollowSymLinks
AllowOverride All
# For Apache = 2.3:
# Order allow,deny
# allow from all
# For Apache = 2.4
Require all granted
</Directory>
systemctl restart httpd
이제 브라우저를 실행시키고 (저같은 경우 로컬 윈도우) https://서버ip/dnsadmin 을 입력하면 아래와 같은 창이 나옵니다.
Database Host는 localhost로 되어 있을텐데 APM, bind, fmDNS를 설치한 리눅스의 IP를 적어주시고 아래의 ID/PW는 위에서 mysqld 설정 시 생성했던 mysql ID/PW를 적어주셔야 합니다.
그리고 Database Name은 위에서 생성했던 dns 가 될겁니다. 저와 같은 설정을 했다면 아래 코드블럭 위아래 순서대로 적으시면 됩니다.
192.168.0.10 (APM, bind, fmDNS 설치한 리눅스 IP)
dns
dnsadmin
mysql 계정 생성 시 입력한 패스워드
ID와 PW를 입력하면 아래와 같은 창이 나옵니다.
이상태로 그대로 두고, 잠시 리눅스로 돌아와 /var/www/html/dnsadmin/config.inc.php 을 vi 편집기로 열어서 위 이미지에 나왔던 내용들을 모두 붙여넣어줍니다. 저같은 경우 아래 코드들과 같이 될겁니다.
참고로 샘플 파일인 /var/www/html/dnsadmin/config.sample.inc.php 도 있으니 혼동하지 마시기 바랍니다.