■ PDNS ?
PowerDNS사에서 만든 오픈소스 DNS 데몬 입니다. 데이터베이스에 데이터를 저장하여 신뢰성 있는 DNS 기능을 제공합니다. Poweradmin 이라는 Web interface와 연동하여 사용 가능합니다.
■ 서버 구성도
PDNS 서버를 이중화 구성하여 보다 더 안전한 서비스가 가능하도록 구성.
1. Master, Slave 두 서버에 PDNS 데몬 구동 후 DB에 VIP로 연결할 수 있도록 설정합니다. 2. Pacemaker를 이용하여 Master 서버에 장애가 발생 시 DB, Apache, DRBD 서비스를 Slave 서버에서 서비스 하도록 합니다. 3. DRBD 파티션에는 DB, Web Data를 저장합니다. |
■ 구축환경
■ OS - Centos Linux release 7.9.2009 (Core) - APM 버전은 최신 버전으로 설치했으며, PDNS 데몬은 4.6.x로 설치했습니다. ■ 테스트에 사용한 IP - 실제 테스트 당시에는 Public IP를 사용하였으니 참고 바랍니다. |
■ DRBD 구성
0. 호스트 등록
# /etc/hosts 192.168.0.100 pdnsm.hktest.shop pdnsm 192.168.0.101 pdnss.hktest.shop pdnss |
1. DRBD 설치 ( Master & Slave )
# yum -y install https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm # yum -y install kmod-drbd84 drbd84-utils # drbd 모듈 확인 (확인이 되지 않을 경우 모듈로드) # lsmod |grep drbd # modprobe drbd |
2. DRBD 설정 ( Master & Slave )
global { usage-count yes; } common { syncer { } } resource "r0" { protocol C; startup { wfc-timeout 0; degr-wfc-timeout 120; } disk { on-io-error detach; } net { timeout 60; connect-int 10; ping-int 10; max-buffers 2048; max-epoch-size 2048; } on pdnsm.hktest.shop { device /dev/drbd0; disk /dev/xvdb1; address 192.168.0.100:7787; meta-disk internal; } on pdnss.hktest.shop { device /dev/drbd0; disk /dev/xvdb1; address 192.168.0.101:7787; meta-disk internal; } } |
3. DRBD Meta data 생성 ( Master & Slave )
# drbdadm create-md r0 # systemctl start drbd |
4. Primary 지정 및 파일시스템 생성 ( Master )
# drbdadm primary --force r0 # primary 지정 후, drbd sync가 진행되고 있는지 확인. # cat /proc/drbd # sync 완료 후, 파일 시스템 생성 # mkfs.ext4 /dev/drbd0 # mount /dev/drbd0 /home |
■ Pacemaker 구성
1. pacemaker 설치 ( Master & Slave )
# yum install -y pacemaker corosync pcs psmisc policycoreutils-python # systemctl enable pcsd # systemctl enable corosync # systemctl enable pacemaker # systemctl start pcsd # echo 'testpdnS' | passwd --stdin hacluster |
2. cluster node 인증 ( Master )
# pcs cluster auth pdnsm pdnss Username: hacluster Password: pdnss: Authorized pdnsm: Authorized |
3. cluster 구성 ( Master )
# pcs cluster setup --name pdns_cluster pdnsm pdnss # pcs cluster start --all # pcs cluster enable --all # pcs property set stonith-enabled=false |
4. Resource 등록 ( Master )
# pcs cluster cib pdns_cfg # pcs -f pdns_cfg resource create Data ocf:linbit:drbd drbd_resource=r0 op monitor timeout="30" interval="20" role="Master" op monitor timeout="30" interval="10" role="Slave" → “drbd r0” 리소스의 대한 설정으로 Primary/Secondary가 변경이 된다. # pcs -f pdns_cfg resource master DataSync Data master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true → Data 리소스의 Master / Slave 구성 제약조건. # pcs -f pdns_cfg resource create storage ocf:heartbeat:Filesystem device="/dev/drbd0" directory="/home" fstype="ext4" → drbd 파티션과 파일시스템을 지정하여 mount 시키는 리소스. # pcs -f pdns_cfg resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.0.200 cidr_netmask=32 nic=eth0:0 op monitor timeout="30" interval="20" role="Master" op monitor timeout="30" interval="10" role="Slave" → VIP에 대한 Resource 설정. # pcs -f pdns_cfg resource create Apache lsb:apache op monitor timeout="30s" interval="20s" role="Master" op monitor timeout="30s" interval="10s" role="Slave" # pcs -f pdns_cfg resource create Mysql lsb:mysql.server op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=30s # pcs -f pdns_cfg resource group add HA-GROUP VirtualIP storage Mysql Apache → HA-GROUP에 VIP, DRBD mount, Apache, Mysql 순서대로 구동되도록 그룹화. # pcs -f pdns_cfg constraint colocation add HA-GROUP DataSync INFINITY with-rsc-role=Master → HA-GROUP & DataSync 리소스의 Master 가 공통된 Master 에서 실행되도록 설정. # pcs -f pdns_cfg constraint order promote DataSync then start storage → DataSync 리소스가 실행된 후 storge 리소스 (/dev/drbd0 mount) 실행 # pcs cluster cib-push pdns_cfg |
■ PDNS 구성
1. PDNS 설치
# yum install epel-release yum-plugin-priorities # curl -o /etc/yum.repos.d/powerdns-auth-46.repo https://repo.powerdns.com/repo-files/el-auth-46.repo # yum install -y pdns pdns-backend-mysql.x86_64 |
2. pdns DB 및 Table 생성 ( Master )
# DB 데이터 디렉토리를 DRBD 파티션으로 이동 및 심볼릭 링크 # mv /usr/local/mysql/var /home/MYSQL_DATA # ln -s /home/MYSQL_DATA /usr/local/mysql/var # DB 접속 후 pdns DB 및 계정생성 → Master, Slave 서버 모두 PDNS 데몬 구동하니 3개 IP에 대한 접근을 모두 허용해준다. mysql ((none))>create database pdns; mysql (mysql)>GRANT ALL PRIVILEGES ON pdns.* to 'pdns'@'localhost' IDENTIFIED BY 'pdnsTest@DB@'; mysql (mysql)>GRANT ALL PRIVILEGES ON pdns.* to 'pdns'@'192.168.0.100' IDENTIFIED BY 'pdnsTest@DB@'; mysql (mysql)>GRANT ALL PRIVILEGES ON pdns.* to 'pdns'@'192.168.0.101' IDENTIFIED BY 'pdnsTest@DB@'; mysql (mysql)>GRANT ALL PRIVILEGES ON pdns.* to 'pdns'@'192.168.0.102' IDENTIFIED BY 'pdnsTest@DB@'; mysql ((none))>flush privileges; # pdns schema 생성 # cd /usr/share/doc/pdns-backend-mysql-4.6.0 # cp -pv schema.mysql.sql /usr/local/src/ ; sed -i "s/latin1/utf8/g" /usr/local/src/schema.mysql.sql # mysql -uroot -p pdns < /usr/local/src/schema.mysql.sql # systemctl enable pdns # systemctl start pdns |
3. pdns.conf 파일 수정
# cp -pv /etc/pdns/pdns.conf /etc/pdns/pdns.conf_org # chmod 644 /etc/pdns/pdns.conf # cat /etc/pdns/pdns.conf any-to-tcp=yes default-soa-edit=webdns.hktest.shop daemon=yes guardian=yes setgid=pdns setuid=pdns local-address=0.0.0.0 local-address-nonexist-fail=no local-port=53 launch=gmysql gmysql-dnssec gmysql-host=192.168.0.200 gmysql-port=3306 gmysql-user=pdns gmysql-password=pdnsTest@DB@ gmysql-dbname=pdns version-string=powerdns |
4. 조회 테스트
# dig webdns.hktest.shop @pdnsm.hktest.shop mysql ((none))>show processlist; +----+------+-----------------------+------+---------+------+-------+------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +----+------+-----------------------+------+---------+------+-------+------------------+----------+ | 10 | pdns | 192.168.0.200:42690 | pdns | Sleep | 15 | | NULL | 0.000 | | 11 | root | localhost | NULL | Query | 0 | init | show processlist | 0.000 | +----+------+-----------------------+------+---------+------+-------+------------------+----------+ # dig webdns.hktest.shop @pdnss.hktest.shop mysql ((none))>show processlist; +----+------+-----------------------+------+---------+------+-------+------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +----+------+-----------------------+------+---------+------+-------+------------------+----------+ | 11 | root | localhost | NULL | Query | 0 | init | show processlist | 0.000 | | 12 | pdns | 192.168.0.101:42834 | pdns | Sleep | 0 | | NULL | 0.000 | +----+------+-----------------------+------+---------+------+-------+------------------+----------+ |
■ PDNS 구성
아래와 같이 압축해제 및 웹 접속을 할수 있도록 설정 후, webdns.hktest.shop로 접속하여 추가 설정을 진행해주면 됩니다.
# cd /home # wget https://sourceforge.net/projects/poweradmin/files/poweradmin-2.2.0.tar.gz/download # mv download poweradmin.tar.gz # tar zxvf poweradmin.tar.gz # mv /home/poweradmin-2.2.0 /home/WebDNS # Apache에 연결 # mv /usr/local/httpd2/conf /DATA/APACHE_CONF # ln -s /home/APACHE_CONF /usr/local/httpd2/conf # vhosts.conf에 등록 → webdns.hktest.shop에는 VIP를 넣어주면 됩니다. <VirtualHost *:80> ServerAdmin webmaster@hktest.shop ServerName webdns.hktest.shop DocumentRoot /home/WebDNS CustomLog logs/pdns.hktest.shop-access.log common </VirtualHost> |
'Linux > HA' 카테고리의 다른 글
Pacemaker + DRBD 를 이용한 이중화 구성 (0) | 2022.03.24 |
---|---|
Pacemaker + ldirectord 를 이용한 LVS 구성 (0) | 2022.03.24 |