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 하게 됨