HAProxy는 mode 설정을 통해 http 관련 패킷이 아닌 다양한 tcp 패킷도 로드밸런싱 구성이 가능합니다.
이번 포스팅에서는 mysql 2대 구성으로 로드밸런싱 구성을 해보도록 하겠습니다.
(클러스터 구성이 아니오니 참고 바랍니다.)
1. 설정
HAProxy 192.168.2.4
DB1 192.168.2.203
DB2 192.168.2.204
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
chroot /usr/share/haproxy
user haproxy
group haproxy
daemon
defaults
log global
option dontlognull
retries 3
redispatch
maxconn 2048
contimeout 5000
clitimeout 50000
srvtimeout 50000
stats enable
stats uri /haproxy_stats
stats refresh 10s
listen test-sql 0.0.0.0:3306
mode tcp
balance roundrobin
option tcpka
option mysql-check user haproxy
server sql1 192.168.2.203:3306 check port 3306 inter 2000 fall 3 rise 3
server sql2 192.168.2.204:3306 check port 3306 inter 2000 fall 3 rise 3
option mysql-check user haproxy 을 이용하면 mysql의 haproxy 계정을 통한 health check 가능 합니다.
이에 따라 두 대 모두 mysql에 haproxy 계정 생성이 필요
mysql) insert into user(Host,User,ssl_cipher,x509_issuer,x509_subject) values ('192.168.2.4','haproxy','','','');
2. 구성 확인
general_log_file이 hostname에 따라 생성된 다는 것에 착안하여 해당 값 조회하여 로드밸런싱 동작 여부 확인
#mysql -uroot -pxptmxm -h192.168.2.4 -e"show variables like 'general_log_file';"
- Query 테스트
php를 이용해 간단한 데이터 입력 테스트를 진행해 보았습니다.
DB서버를 직접 지정하는 대신 HAProxy IP를 설정하여 테스트 진행 하였습니다.
*로드밸런서 옵션은 라운드로빈
<?php
@$conn=mysql_connect("192.168.2.4","haproxy","") or die ("DB Connection Fail.\n");
mysql_select_db("haproxy", $conn);
mysql_query("INSERT INTO test(id,name,content) VALUES('123','query_test','test')");
mysql_close($conn);
?>
테스트 결과 각 DB 테이블에 순차적으로 데이터 입력 되는 것을 확인 가능 하였습니다.
- 간단한 select 문을 통한 DB 데이터 호출 테스트
<?php
$db = mysql_connect("192.168.2.4","haproxy","");
mysql_select_db("webtest",$db);
mysql_query("set names euckr");
$query = "SELECT * FROM webtest";
$result = mysql_query($query);
echo "<table border = 1px>";
while($arr = mysql_fetch_array($result)){
echo ("<tr>");
foreach($arr as $key =>$value){
if(!(is_int($key)||$key == "password"||$value == NULL))
echo ("<td> $value </td>");
}
echo ("</tr>");
}
echo "</table>"
?>
각 DB에는 서로 다른 값을 입력하여 호출 시 확인 가능토록 하였습니다.
호출 결과 정상적으로 호출 되는 것 확인.
3. failover Test
failover Test를 위해 DB1의 mysql 서비스를 중지.
웹콘솔에서 즉시 상태 확인이 가능 합니다.
DB1의 서비스 중지 후 haproxy IP 192.168.2.4에 호출 되는 모든 데이터는 DB2의 데이터만 출력 되는 것 확인.
서비스 감지 안되는 DB1로는 세션 분배가 되지 않는 것이 확인 됩니다.
'기술자료 > 기술운영자료' 카테고리의 다른 글
[Linux] Opensuse-graphic 설치메뉴얼 (0) | 2016.03.20 |
---|---|
HAProxy 소개와 설정 (1/2) (0) | 2016.03.20 |
HAProxy + apache + mod_rpaf 구성을 이용한 웹로그 설정 (0) | 2016.03.20 |
Linux 방화벽 TCP Wrapper (0) | 2016.03.20 |
iptables에 대해서 (0) | 2016.03.20 |