OpenShift 안정성 테스트를 위해 Broker Host를 이중화하는 작업을 진행했다. 실제로 서비스되는 서버를 구성해 본 적이 없는 까닭에 이것 저것 찾아보고 관련된 책을 읽어보면서 진행했다. 역시 최대의 장벽은 영어... 여담으로 이 프로젝트를 하면서 새로이 배우는 것들이 참 많다. 학교에서 이론 수업으로 배웠던 것들도 되새기는 것들도 많고, 다만 그때 열심히 하지 않았던 게 후회되긴 한다.
OpenShift 설치를 위해서는 매뉴얼 설치, oo-installer, VM 이미지, Puppet으로 배포하는 방법이 있고, 여기에서는 매뉴얼 설치(OpenShift Comprehensive Deployment Guide)를 참고하여 설치했다.
기존에 하나의 OpenShift 클러스터가 있으므로, 여기에서는 하나의 Broker를 추가적으로 구성하고, 로드 밸런서로는 HAProxy를 사용한다.
VM 구성
VM 환경 정보
OpenShift 구성은 OpenStack 환경에서 진행되었다. 작업 내용에 포함된 HAProxy 서버와 Broker 서버의 구성을 적어두었다.
HAProxy
Ubuntu 14.04 LTS, HAProxy 1.5.5
Broker
CentOS 5.4, BIND9.8
Broker 1(기존 브로커, DNS Server(BIND) 설치) / Private IP : 30.30.0.1
Broker 2(새로 설치할 브로커) / Private IP : 30.30.0.2
DNS 설정
Key 파일 복사
rsync 키 복사
편의를 위해서 Broker 1에서 생성한 rsync용 대칭키를 Broker 2로 복사한다. 파일 복사를 위해 따로 툴은 사용하지 않고 cat 명령을 통해 출력되는 파일의 내용을 Copy & Paste 했다.
Broker 1에서 아래와 같이 실행하면 Private Key 파일인 rsync_id_rsa와 Public Key 파일인 rsync_id_rsa.pub 를 출력한다.
# cat ~/.ssh/rsync_id_rsa*
-----BEGIN RSA PRIVATE KEY-----
블라블라
-----END RSA PRIVATE KEY-----
Public Key 파일 내용
Broker 2에서 아래와 같이 Broker 1의 키 파일 내용을 복사하여 붙여넣은 후 파일을 생성한다.
# cat <<EOF > ~/.ssh/rsync_id_rsa
Private Key 파일 내용 붙여넣기
EOF
# cat <<EOF > ~/.ssh/rsync_id_rsa.pub
Public Key 파일 내용 붙여넣기
EOF
# cat ~/.ssh/rsync_id_rsa.pub >> ~/.ssh/authorized_keys
authorized_keys 파일에 Public Key를 추가한 이유는 Broker 1에서 Broker 2로 추가적으로 복사할 파일이 있기 때문에 scp를 사용하기 위해서다.
DNS 키 복사
Broker 1의 DNS 서버를 설정할 때 사용한 키파일을 Broker 2로 복사한다. OpenShift는 애플리케이션을 생성하면 애플리케이션에 접근하기 위한 도메인을 추가하며, app_name-domain.example.com과 같은 형식이다. Broker 1의 DNS 업데이트를 위해서 동일한 키가 필요하므로 키를 복사해야한다.
Broker 2에는 BIND를 설치하지 않았으므로 /var/named 디렉토리를 먼저 생성한 후 파일을 복사한다.
# mkdir /var/named
Broker 1에서 scp로 키 파일을 복사한다. example.com은 도메인으로 설정한 주소이므로 자신의 설정에 맞는 알맞은 주소를 넣어준다. 가이드를 따라 변경없이 진행했다면 example.com 일 것이다.
# scp -i ~/.ssh/rsync_id_rsa /var/named/*example.com* 30.30.0.2:/var/named
추가적으로 Broker 2 /etc/resolv.conf 의 nameserver 값은 Broker 1의 IP로 수정하고, DHCP 설정 과정에서의 DNS 값 역시 Broker 1의 IP로 값을 설정한다.
ruby193-mcollective-client 설정 파일 복사
Node와의 통신을 위해 사용하는 Mcollective Client를 설치한 후에 이어 진행할 Comprehensive Deployment Guide의 5.2.절 Configuration에서 Mcollective client 설정 파일은 Broker 1의 설정 파일을 그대로 복사한다.
Broker 1에서 아래의 명령을 수행한다.
# scp -i ~/.ssh/rsync_id_rsa /opt/rh/ruby193/root/etc/mcollective/client.cfg 30.30.0.2:/opt/rh/ruby193/root/etc/mcollective/client.cfg
Access Keys, 브로커 설정파일 복사
설치 가이드의 6.3.절 Generate Access Keys는 수행하지 않고 Broker 1의 파일을 복사하면 된다. Broker 1에서 아래의 명령을 수행
# scp -i ~/.ssh/rsync_id_rsa /etc/openshift/server* /etc/openshift/rsync_id_rsa* /etc/openshift/broker.conf 30.30.0.2:/etc/openshift/
DNS 플러그인 설정
7.2.절 Configure the DNS plugin의 과정이다. 브로커 내부에서 nsupdate 명령을 사용하여 DNS를 업데이트할 때 /etc/openshift/plugins.d/openshift-origin-dns-nsupdate.conf 파일의 설정을 읽어와서 사용하게 된다. Broker 1과 설정 값을 동일하게 설정하고, BIND_SERVER의 값을 Broker 1의 IP로 설정한다.
OpenShift Console 설치 후 SSL 설정 없애기
HAProxy 설치 후 HAProxy에서 SSL 설정 시 Broker의 SSL 설정과 충돌하여 접속할 수 없으므로 HAProxy에만 SSL을 적용하고, Broker에서는 80포트로 서비스를 제공하도록 한다.
Broker 1과 2모두 /etc/httpd/conf.d/000002_openshift_origin_broker_proxy.conf 파일을 아래와 같이 수정한다.
#
# This configuration is to proxy to an OpenShift broker
# (and optional developer console) running in a separate
# httpd instance.
#
# If the broker and node are installed on the same host,
# typically node configuration will provide vhosts prior
# to the ones defined here, so these will not be used.
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<VirtualHost *:80>
# ServerName we will inherit from other config;
# ServerAlias is to make sure "localhost" traffic goes here regardless.
ServerAlias localhost
ServerAdmin root@localhost
DocumentRoot /var/www/html
ProxyPass /console http://127.0.0.1:8118/console
ProxyPassReverse /console http://127.0.0.1:8118/console
ProxyPass /broker http://127.0.0.1:8080/broker
ProxyPassReverse / http://127.0.0.1:8080/
ProxyPass /assets http://127.0.0.1:8118/console/assets
ProxyPassReverse /assets http://127.0.0.1:8118/console/assets
ProxyTimeout 300
</VirtualHost>
ProxyPreserveHost On
TraceEnable off
# Required for the remote-user plugin
RequestHeader unset X-Remote-User
HA Proxy 설치 및 설정
HAProxy에 SSL을 적용하려면 패키지로 설치하지 않고 소스를 빌드해야한다. (1.4 버전에서는 그랬다고 하는데, 1.5 버전부터는 어떠한지 모르겠으나, 이 글에서는 동일하게 1.5.5 버전을 사용하여 소스 빌드를 했다.)
-- 작성 중..
참고 도서
1. 카츠마 료 외 웹 서비스 개발 철저공략 (BJ Public)
2. 이토 나오야 외 저 서버/인프라를 지탱하는 기술 (제이펍)
참고 자료
1. OpenShift Comprehensive Deployment Guide
2. HAProxy Configuration Manual
3. HAProxy TCP Port Forwarding
5. HAProxy URL Pattern Forwarding
6. How can I make haproxy route requests based on URL substrings?
7. L4/L7 스위치의 대안, 오픈소스 로드밸런서 HAProxy
8. BIND9로 업그레이드 하기: 알아야 할 9가지 특성
9. [BIND] master,slave nameserver 구축
10. DNS Sample BIND Configurations
'밤을 지새다 > OpenShift Origin' 카테고리의 다른 글
oo-accept-node Trouble Shooting (0) | 2014.10.28 |
---|---|
OpenShift Origin 설치 트러블 슈팅: Node (0) | 2014.09.22 |
OpenShift Node Host 설치 [1] - 작성 중 (0) | 2014.08.18 |
OpenShift Origin V3 (2) | 2014.08.14 |
ApplicationsController- create (0) | 2014.08.05 |