HAProxy 설치하기 



Haproxy 는 소프트웨어 방식으로 TCP 기반의 HA 구성을 가능하게 해주는 오픈소스로


L4와 L7의 기능을 제공하고 설치 및 설정이 간편하기 때문에 빠른 이중화 구성이 가능하다.


게다가 버전이 올라가면서 SSL까지 정식으로 지원하게되면서 활용도가 많이 높아졌다.


기본설치부터 SSL설정까지 알아보자.



OS : CentOS 6.3 x64



1. 설치


1.5버전 부터 정식으로 ssl을 지원하므로 이후 버전을 사용하는게 좋다.


현재 최신 안정화버전은 1.6이지만 쭉 사용하던 1.5버전 기준으로 작성한다.



기본패키지 설치


yum install gcc gcc-c++ pcre-devel openssl-devel 


다운로드


wget http://www.haproxy.org/download/1.5/src/haproxy-1.5.17.tar.gz


압축풀고


tar xvfz haproxy-1.5.17.tar.gz

cd haproxy-1.5.17



컴파일설치


make USE_OPENSSL=1 TARGET=linux2628 ARCH=x86_64

make install



실행파일작업

cp -a examples/haproxy.init /etc/rc.d/init.d/haproxy

chmod 700 /etc/rc.d/init.d/haproxy 

ln -s /usr/local/sbin/haproxy /usr/sbin/



설치끝. 엄청간단하다!




2. 설정파일


설정파일 경로만들고


mkdir -p /etc/haproxy



설정입력


vi /etc/haproxy/haproxy.cfg


# 서버관련된 사항들. 딱!! 보면 아는 옵션들...;


global

        log 127.0.0.1 local0 

        maxconn 4096

        user nobody

        group nobody

        daemon

        tune.ssl.default-dh-param 2048

 

# frontend 나 backend 에 지정된 설정이 없으면 defaults 설정을 따름

defaults

        log global

        mode http

        timeout connect 5000ms

        timeout client 50000ms

        timeout server 50000ms

        option dontlognull

        option http-server-close

        option tcplog

        option httplog

        option httpclose

        option forwardfor

        option accept-invalid-http-request


# 상태확인 페이지 설정. http://www.system.co.kr:8888 이런식으로 접근가능

listen admin *:8888

        stats enable

        stats uri /admin

        stats auth admin:password

        stats refresh 5s


# 각 웹서버들 앞단에 위치한 haproxy 자체에 대한 설정

frontend systemv_web_front

        bind 10.0.0.1:80

        bind 10.0.0.1:443 ssl crt /etc/haproxy/www.systemv.co.kr.pem

        reqadd X-Forwarded-Proto:\ https

        default_backend systemv_web_back


# haproxy 뒷단에 있는 real 웹서버들에 대한 설정

backend systemv_web_back

        errorfile 503 /etc/haproxy/index.html

        balance source

        cookie SERVERID insert indirect nocache

        option httpchk HEAD /index.jsp HTTP/1.0

        server web1 10.0.0.10:80 cookie s1 check inter 2000 rise 2 fall 2

        server web2 10.0.0.11:80 cookie s2 check inter 2000 rise 2 fall 2



설정중 몇가지만 정리해보자


errorfile 

모든 웹서버가 죽었을때 보여줄 페이지다. 임의로 html 형식으로 작성하면 된다. 

<img src 같은 태그는 안먹는것같다. 텍스트 위주로 쓰자.


balance

haproxy 는 여러 기준으로 로드밸런싱을 구현하는데 balance에 사용할수 있는 옵션은 아래와 같다.

roundrobin : 순차적 분배

static-rr : 각서버별로 설정한 가중치값에 따라 분배

leastconn : 접속수에 따라 분배

source : 전체 웹서버별수를 기준으로 접속자 IP를 해싱해서 분배

그외 uri, url_param, hdr,rdp-cookie 등이 더 있는데.. 일반적이지 않으므로 생략.


server

server 뒤에오는 web1, web2등의 이름은 임의로 부여가능하다. 

cookie s1 은 각 서버로 접속시에 SERVERID 라는 이름으로 s1 이라는 쿠키를 굽겠다는거고

inter 2000 은 헬스체크하는 시간 간격이다(밀리세컨).

fall 2 는 헬스체크시 2번 연속 다운이면 연결을 끊겠다는거고

rise 2 는 연결 끊긴상태에서 헬스체크시 연속 2번 살았다면 HA에 다시 포함시키겠다는 거다.



fall 과 rise 설정을 통해서 failover 와 failback 이 자동으로 실행되는데 간혹 failback은 하고 싶지 않을때가 있다.


이와 관련해서는 아래 링크에서 자세히 알수있는데 약간의 꼼수를 이용해 훨씬 간단히 구현할수 있다.

( http://blog.haproxy.com/2014/01/17/emulating-activepassing-application-clustering-with-haproxy/ ) 


rise 값을 99999999999 처럼 어이없이 늘려놓으면 된다. 예를 들어 inter 값이 1000 이라면 3000년 이후에 failback 이 될것이다.




3. SSL 


haproxy 를 사용할때는 각 웹서버에 인증서를 설치할 필요가 없다.


인증서는 haproxy 서버에만 설치하면 되며 모든 인증파일을 합쳐 하나의 파일로 만들어 


bind 의 crt 옵션을 사용해 파일명을 지정해 주면된다.



SSL인증서를 발급받으면 총 4개의 파일이 딸려온다.


- 도메인인증서 : 보통 신청한 도메인명을 포함한 파일이고 crt등의 확장자가 붙어있다.


- 상위인증서 : 상위기관 인증파일이며 CA인증서라고도 한다.


- 체인인증서 : 번들인증서, 중간인증서, intermediate 인증서라고 불린다.


- 키파일 : 내가 csr 생성시 사용한 키파일이다.



haproxy 에서 사용할 단일 인증파일을 만들기는 아주 간단하다. 


그냥 각 파일들을 텍스트 형식으로 오픈해 합치기만 하면 된다.


파일 합치기는 도메인인증서 -> 체인인증서 -> 상위인증서 -> 키파일 순이다.


cat 도메인 체인 상위 키파일 > crt.pem 이렇게 하면 pem 파일에 캐리지리턴값(^M) 이 들어갈 수 


있기때문에 하나씩 열어서 붙여주는게 좋다.


-----BEGIN MY CERTIFICATE-----

-----END MY CERTIFICATE-----

-----BEGIN INTERMEDIATE CERTIFICATE-----

-----END INTERMEDIATE CERTIFICATE-----

-----BEGIN INTERMEDIATE CERTIFICATE-----

-----END INTERMEDIATE CERTIFICATE-----

-----BEGIN ROOT CERTIFICATE-----

-----END ROOT CERTIFICATE-----

-----BEGIN RSA PRIVATE KEY-----

-----END RSA PRIVATE KEY-----



4. 로그설정


로그 설정은 좀 더 살펴봐야 할것같은데 기본적으로 syslog 를 통해서 남기고 로그로테이트를 통해서 로그를 순환하는 방법까지만 남긴다.


vi /etc/rsyslog.d/haproxy.conf


$ModLoad imudp

$UDPServerRun 514 

$template Haproxy,"%msg%\n"

local0.=info -/var/log/haproxy/haproxy-info.log;Haproxy

local0.notice -/var/log/haproxy/haproxy-notice.log;Haproxy

local0.* ~ 




vi /etc/logrotate.d/haproxy


/var/log/haproxy/*.log {

    size 1k

    missingok

    rotate 14

    compress

    ifempty

    delaycompress

    sharedscripts

    postrotate

        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

    endscript

}














'리눅스ETC' 카테고리의 다른 글

리눅스 컴파일 속도 향상시키기 make -j  (0) 2016.04.27
iscsi 구성하기  (0) 2016.04.06
php configure 에러  (0) 2016.04.06
리눅스 CentOS / netatalk 로 타임캡슐 만들기  (0) 2016.04.06
mysql 설치 에러  (0) 2016.04.05

리눅스 컴파일 속도 향상시키기 make -j



개발자든 관리자든 리눅스를 사용하다보면 make를 사용할 일이 은근히 많다.


서버 스펙이 좋든 나쁘든 별다른 옵션없이 make 를 쓰는 경우가 많은데... 성능낭비다.


좋은 스펙이라면 job을 병렬로 실행해 훨씬 빠른 속도로 컴파일을 마칠수 있다.



make -j INT



1. 테스트서버


테스트서버 : Xeon E5-2630, 96G RAM, 6ea 15000k SAS


6core CPU가 2개이므로 12core. 하이퍼스레딩을 포함하면 총 24core 이다.



2. 테스트


테스트 대상은 mariadb 소스컴파일 설치시 진행하는 make를 기준으로 진행하며


동일한 cmake 옵션으로 configure 하고 -j 옵션의 인자값만 바꿔가며 테스트해보기로 한다.


테스트 서버가 아주 노는 서버는 아니므로 4가지로 인자를 바꾸며 테스트 하는 과정을 1세트로 총 3세트를 진행해 오차를 줄였다. 



2.1 make 


처음 테스트는 아무옵션 없이 그냥 make 를 실행했다.


병렬처리가 안되기 때문에 아래 그림에서 보는것처럼 core별 사용량이 특별한게 없다.




make 총 시간 : 18분



2.2 make -j 5


5개로 분할해서 처리 해보니 몇몇 core가 튀는게 사용량이 좀되는듯하다.



make 총시간 : 4분



2.3 make -j 10 


10개로 분할하니 거의 모든 core가 사용되는듯하다.



make 총시간 : 2분



2.4 make -j 20


20개로 분할했을때 결과가 조금 의아했는데... 


모든 core를 사용하고 있었는데 시간은 10개에 비해 고작 20초가 줄었을 뿐이다.



make 총시간 : 1분 40초 



3. 결론


테스트 결과 core가 많은 장비라면 -j 옵션을 사용할 이유가 너무도 명확해졌다.


물론 10개와 20개로 분할했을때의 차이가 거의 나지않는건 좀 이상했지만...


core사용량 스샷이나 총시간을 감안했을때 하이퍼스레딩은 이번 테스트에서 영향이 없는게 아닐까...


실제 12core 만큼의 성능만 보여주는듯하다. 30개로 한번 더해봤다면 좋았을텐데.. 이놈의 귀차니즘...ㅠ



추가로.... 3세트로 진행해 평균으로 총시간을 기록했지만 사실 3세트 모두 결과가 같았다는.....음...;




'리눅스ETC' 카테고리의 다른 글

HAProxy 설치하기  (0) 2016.05.04
iscsi 구성하기  (0) 2016.04.06
php configure 에러  (0) 2016.04.06
리눅스 CentOS / netatalk 로 타임캡슐 만들기  (0) 2016.04.06
mysql 설치 에러  (0) 2016.04.05

iscsi 구성하기

iscsi 구성하기


스토리지로 이용할서버 (타겟)


  타겟설치

yum install scsi-target-utils


  타겟실행

/etc/rc.d/init.d/tgtd start

  ntsysv에서 tgtd 등록


  타겟이름지정

tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.data.systemv.co.kr:storage.disk1   

 

  타겟이름확인

tgtadm --lld iscsi --op show --mode target


  타겟볼륨등록

tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/cciss/c0d1p1


  타겟볼륨확인

tgtadm --lld iscsi --op show --mode target


  타겟바인딩

tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL


  타겟설정등록

mv /etc/tgt/targets.conf /etc/tgt/targets.conf_ori

tgt-admin --dump > /etc/tgt/targets.conf





스토리지를 로컬처럼 쓰기위한 서버(이니시에이터)


  설치

yum install iscsi-initiator-utils


  실행 

/etc/rc.d/init.d/iscsi start

  ntsysv에서 iscsi 등록


  타겟찾기

iscsiadm --mode discovery --type sendtargets --portal IP(타켓아이피)


  타겟에 로긴

iscsiadm --mode node --targetname iqn.systemv.co.kr:storage.disk1 --portal IP(타켓아이피) --login  


  확인

fdisk -l




타겟으로 부터 로그아웃

모두 로그아웃 : iscsiadm --mode node -u

선택 로그아웃 : iscsiadm --mode node -u -T iqn.systemv.co.kr:storage.disk1 -p IP(타켓아이피)


할당된 LUN 삭제

tgtadm --lld iscsi --mode target --op delete --tid 1



'리눅스ETC' 카테고리의 다른 글

HAProxy 설치하기  (0) 2016.05.04
리눅스 컴파일 속도 향상시키기 make -j  (0) 2016.04.27
php configure 에러  (0) 2016.04.06
리눅스 CentOS / netatalk 로 타임캡슐 만들기  (0) 2016.04.06
mysql 설치 에러  (0) 2016.04.05

오류 메세지 : configure: error: xml2-config not found. Please check your libxml2 installation 

해결 방법 : yum install libxml2 libxml2-devel -y 


오류 메세지 : configure: error: Please reinstall the BZip2 distribution 

해결 방법 : yum -y install bzip2-devel 


오류 메세지 : configure: error: libjpeg.(a|so) not found. 

해결 방법 : yum -y install libjpeg-devel 


오류 메세지 : configure: error: libpng.(a|so) not found. 

해결 방법 : yum -y install libpng-devel 


오류 메세지 : configure: error: freetype.h not found. 

해결 방법 : yum -y install freetype-devel 


오류 메세지 : configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information. 

해결 방법 : yum -y install libc-client-devel 


오류 메세지 : configure: error: Kerberos libraries not found. 

해결 방법 : yum -y install krb5-devel 



오류 메세지 : configure: error:Cannot find OpenSSL's <evp.h> 

해결 방법 : yum -y install openssl-devel 


configure: error: XML-RPC support requires libexpat. Use --with-expat-dir=<DIR> 

yum install expat-devel 

'리눅스ETC' 카테고리의 다른 글

리눅스 컴파일 속도 향상시키기 make -j  (0) 2016.04.27
iscsi 구성하기  (0) 2016.04.06
리눅스 CentOS / netatalk 로 타임캡슐 만들기  (0) 2016.04.06
mysql 설치 에러  (0) 2016.04.05
오라클 sys로 exp/imp  (0) 2016.03.30

CentOS 6.3 x64


/home 파티션 미리 넉넉하게...

 


# 필수 설치

yum -y install netatalk avahi  dbus nss-mdns



# 계정 생성

useradd systemv

passwd systemv

mkdir /home/systemv/TM

chown systemv. /home/systemv/TM



# 설정 변경

/etc/netatalk/afpd.conf 가장 아래줄에 추가

- -transall -uamlist uams_randnum.so,uams_dhx.so,uams_dhx2.so -nosavepassword -advertise_ssh


/etc/netatalk/AppleVolumes.default 가장 아래줄에 추가

/home/systemv/TM allow:systemv options:usedots,upriv,tm dperm:0775 fperm:0660 cnidscheme:dbd


/etc/nsswitch.conf 가장 아래줄에 추가

hosts:      files mdns4_minimal dns mdns mdns4


/etc/avahi/services/afpd.service 새로 생성

<?xml version="1.0" standalone='no'?>

<!DOCTYPE service-group SYSTEM "avahi-service.dtd">

<service-group>

<name replace-wildcards="yes">%h</name>

<service>

<type>_afpovertcp._tcp</type>

<port>548</port>

</service>

<service>

<type>_device-info._tcp</type>

<port>0</port>

<txt-record>model=TimeCapsule</txt-record>

</service>

</service-group>



# 기존 서비스 중지

mv /etc/avahi/services/ssh.service /etc/avahi/services/ssh.service.disabled



# 서비스 시작

/etc/rc.d/init.d/messagebus start

/etc/rc.d/init.d/avahi-daemon start

/etc/rc.d/init.d/netatalk start


# 방화벽 오픈

-A INPUT -p tcp -m state --state NEW -m tcp --dport 548 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 5353 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 5354 -j ACCEPT

-A INPUT -p udp -m udp --dport 548 -j ACCEPT

-A INPUT -p udp -m udp --dport 5353 -j ACCEPT

-A INPUT -p udp -m udp --dport 5354 -j ACCEPT


# /etc/rc.local 에 추가 (서버구동시 실행)

/etc/rc.d/init.d/messagebus start

/etc/rc.d/init.d/avahi-daemon start

/etc/rc.d/init.d/netatalk start



# 에러 


dbus_bus_get_private(): Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory


messagebus 를 안올리고 avahi-daemon 을 실행했기때문이다. messagebus 먼저 실행하면 문제 없다.



SO_REUSEPORT failed: Protocol not available

Failed to create server: No suitable network protocol available


/etc/avahi/avahi-daemon.conf

#disallow-other-stacks=no  찾아서 

disallow-other-stacks=yes  이렇게 바꿔준다



# 연결

동일한 대역에 있는 맥에서 타임머신 실행해서 리눅스타임캡슐 보이면 성공~





'리눅스ETC' 카테고리의 다른 글

iscsi 구성하기  (0) 2016.04.06
php configure 에러  (0) 2016.04.06
mysql 설치 에러  (0) 2016.04.05
오라클 sys로 exp/imp  (0) 2016.03.30
vim 설치중 행.. 멍때림  (0) 2016.03.30

mysql 설치 에러

------------------------------------------------- 

configure: error: No curses/termcap library found 

------------------------------------------------- 


yum install libtermcap-devel


'리눅스ETC' 카테고리의 다른 글

php configure 에러  (0) 2016.04.06
리눅스 CentOS / netatalk 로 타임캡슐 만들기  (0) 2016.04.06
오라클 sys로 exp/imp  (0) 2016.03.30
vim 설치중 행.. 멍때림  (0) 2016.03.30
yum 속도 개선  (0) 2016.03.30


imp \'sys/패스워드 as sysdba\’

'리눅스ETC' 카테고리의 다른 글

리눅스 CentOS / netatalk 로 타임캡슐 만들기  (0) 2016.04.06
mysql 설치 에러  (0) 2016.04.05
vim 설치중 행.. 멍때림  (0) 2016.03.30
yum 속도 개선  (0) 2016.03.30
rsync 에러  (0) 2016.03.30

vim 설치중에 make 잘하고 make install 할시에


...

......

/bin/sh ./mkinstalldirs /usr/local/share/vim/vim73/keymap

mkdir /usr/local/share/vim/vim73/keymap

chmod 755 /usr/local/share/vim/vim73/keymap

/bin/sh ./installman.sh install /usr/local/share/man/fr/man1 "-fr" /usr/local/share/vim /usr/local/share/vim/vim73 /usr/local/share/vim ../runtime/doc 644 vim vimdiff evim

installing /usr/local/share/man/fr/man1/vim.1


여기서 멈추는 경우가 있다.


간단하게


LANG=C 하고 다시 make install 해보자.

'리눅스ETC' 카테고리의 다른 글

mysql 설치 에러  (0) 2016.04.05
오라클 sys로 exp/imp  (0) 2016.03.30
yum 속도 개선  (0) 2016.03.30
rsync 에러  (0) 2016.03.30
drbd 설치  (0) 2016.03.30

yum 속도 개선

yum 속도 개선



yum 실행시 해외 미러사이트를 바라보는 경우가 있는데 써보면 알겠지만 굉장히 느리다.


속도 개선을 위해 국내 미러를 바라보게끔 직접 수정해 사용하자.


개인적인 기준으로 경험상 시디네트웍스가 가장 빠르더라.



vi /etc/yum.repos.d/CentOS-Base.repo


[base]

name=CentOS-$releasever - Base

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os

baseurl=http://centos.mirror.cdnetworks.com/$releasever/os/$basearch

gpgcheck=1

enabled=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6


[updates]

name=CentOS-$releasever - Updates

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates

baseurl=http://centos.mirror.cdnetworks.com/$releasever/updates/$basearch

gpgcheck=1

enabled=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6


[extras]

name=CentOS-$releasever - Extras

baseurl=http://centos.mirror.cdnetworks.com/$releasever/extras/$basearch

gpgcheck=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6


[centosplus]

name=CentOS-$releasever - Plus

baseurl=http://centos.mirror.cdnetworks.com/$releasever/centosplus/$basearch

gpgcheck=1

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6


[contrib]

name=CentOS-$releasever - Contrib

baseurl=http://centos.mirror.cdnetworks.com/$releasever/contrib/$basearch

gpgcheck=1

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6



vi /etc/yum/pluginconf.d/fastestmirror.conf


enable=0


'리눅스ETC' 카테고리의 다른 글

오라클 sys로 exp/imp  (0) 2016.03.30
vim 설치중 행.. 멍때림  (0) 2016.03.30
rsync 에러  (0) 2016.03.30
drbd 설치  (0) 2016.03.30
오라클 redo/archive 이중화  (0) 2016.03.30

rsync 에러

write failed on BackUpData/carpr2_public_html3/Dealer/image/program/pcanywhere10.zip : Success


rsync error: error in file IO (code 11) at receiver.c(243)                                    


rsync: connection unexpectedly closed (2034656 bytes read so far)                            


rsync error: error in rsync protocol data stream (code 12) at io.c(150)      


------------------> 용량이 다 차서 더이상 백업을 받지 못함.                



[root@CarPR root]# rsync -avz 211.224.128.142::photo /home1/photo/photo/


rsync: server sent "" rather than greeting


rsync error: error starting client-server protocol (code 5) at main.c(924)


------------------> 방화벽 점검... xinit에서 실행하므로 /etc/hosts.allow  /etc/hosts.deny 점검..



[root@CarPR root]# rsync -avz 211.224.128.142::photo /home1/photo/photo/


rsync: failed to connect to 211.224.128.142: Connection refused


rsync error: error in socket IO (code 10) at clientserver.c(97)


------------------> 방화벽에 설정확인



rsync: read error: Connection reset by peer (104)


rsync error: error in rsync protocol data stream (code 12) at io.c(515)


------------------>  데몬이 돌아가는지 또는 방화벽에 설정확인(hosts.allow)



@ERROR: chroot failed


rsync: connection unexpectedly closed (0 bytes received so far) [receiver]


rsync error: error in rsync protocol data stream (code 12) at io.c(420)


------------------>  해당디렉토리에 접근권한 확인,또는 경로가 잘못된 경우




'리눅스ETC' 카테고리의 다른 글

vim 설치중 행.. 멍때림  (0) 2016.03.30
yum 속도 개선  (0) 2016.03.30
drbd 설치  (0) 2016.03.30
오라클 redo/archive 이중화  (0) 2016.03.30
오라클 커넥션 에러  (0) 2016.03.30

to Top