Print
카테고리: [ MariaDB ]
조회수: 7133

MHA 의 단점으로 slave db에 할당할 read-vip 는 failover가 되지 않는다는 점이 있습니다.

때문에 read 용 vip 가 따로 필요한 시스템은 pacemaker 등을 적용했었는데 ha-proxy 를 사용하면 MHA에서도 read-only vip를 활용하는 것과 같은 효과를 낼 수 있습니다.

 

 

-.0 원리 

MHA 에서 DB failover 진행 시 새로운 master 에 맞는 ha-proxy 설정 파일을 매번 변경해줌

$ cat change_server1.sh

cp /engn001/haproxy-1.8.4/cfg/server_1.cfg /engn001/haproxy-1.8.4/db-haproxy.cfg
service haproxy restart
 
$ cat server_1.cfg
frontend mysql-t
        bind *:3326
        default_backend select
backend select
        balance roundrobin
        server mysql_slave1 33.333.333.333:3311  check
        server mysql_slave2 22.222.222.222:3310  check
frontend mysql-dml
        bind *:3336
        default_backend dml
backend dml
        balance roundrobin
        server mysql-master 11.111.111.111:3311  check
 
 

 

-.1 HA-proxy 서비스 등록

$vi /etc/init.d/haproxy

#!/bin/bash
case $1 in
        start)
        /bin/bash /engn001/haproxy-1.8.4/scripts/haproxy_start.sh
        ;;
        stop)
        /bin/bash /engn001/haproxy-1.8.4/scripts/haproxy_stop.sh
        ;;
        restart)
        /bin/bash /engn001/haproxy-1.8.4/scripts/haproxy_stop.sh&echo "stop.."
        /bin/bash /engn001/haproxy-1.8.4/scripts/haproxy_start.sh&echo "start.."
        ;;
esac
exit
=> ha-proxy를 yum 으로 설치했으면 위와 같은 설정이 따로 필요없으나 
이전 글에서 압축 해제 & make 컴파일 방식으로 설치했기 때문에 수동으로 서비스 등록함
* https://sarc.io/index.php/mariadb/1402-ha-proxy-mariadb-load-balancing 참고

 

-2. MHA 수정

 
master_ip_online_change_script  / master_ip_faliover 스크립트 수정
* https://sarc.io/index.php/mariadb/731-mha-1 참고
 
if ($new_master_ip eq "11.111.111.111") {
system("sh /engn001/haproxy-1.8.4/scripts/change_server1.sh");
}
elsif ($new_master_ip eq "22.222.222.222") {
system("sh /engn001/haproxy-1.8.4/scripts/change_server2.sh");
}
elsif ($new_master_ip eq "33.333.333.333") {
system("sh /engn001/haproxy-1.8.4/scripts/change_server2.sh");
}
else{}
=>  failover 진행하면서 ha-proxy 설정파일을 교체함 => dml 은 new master로 LB / select 는 old master로 LB 하게 됨