MySQL MHA + LVS + KEEPALIVED 高可用讀寫分離,讀負載均衡環境部署

MySQL MHA + LVS + KEEPALIVED 高可用讀寫分離,讀負載均衡環境部署

一.MHA介紹

MHA是一款MySQL高可用開源軟件,實現MySQL一主多從架構下,主備的failover自動切換、手動切換、狀態監控等功能,是比較常用的高可用解決方案之一。

LVS是linux下的一款虛擬服務器軟件,內部實現了虛擬路由協議,實現多節點服務器之間負載均衡。

Keepalived高可用軟件,支持LVS算法,從而結合LVS實現負載均衡服務器的高可用。

二.部署

安裝數據庫

在各數據庫節點上安裝Mysql,安裝方法略。

配置主從複製

數據庫配置爲1主2從,2個從庫中,1個用於主從切換,1個恆從庫用於同步relay-log。

初始mysql-master的配置

[server]
server_id=11
log_bin=master-log
relay-log=relay-bin
skip_name_resolve=ON
innodb_file_per_table=ON
max_connections=65536

所有mysql-slave的配置

[server]
server_id=1[x]
log-bin=master-bin
relay-log=relay-bin
skip_name_resolve=ON
innodb_file_per_table=ON
max_connections=65536
relay_log_purge=0    #關閉中繼日誌自動修剪
read_only=1    #將從節點設置爲只讀

從庫定時刪除relay-log

mkdir /opt/mha/log
crontab -e

加入以下定時任務:

0 2 * * * /usr/bin/purge_relay_logs --user=root --disable_relay_log_purge >> /opt/mha/log/purge_relay_logs.log 2>&1

從庫開啓綁定VIP的服務

編輯腳本/etc/init.d/realserver

#./etc/rc.d/init.d/functions
LVS_VIP=10.10.10.200
case "$1" in
start)
ifconfig lo:0 $LVS_VIP netmask 255.255.255.255 broadcast $LVS_VIP
/sbin/route add -host $LVS_VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "Server Started"
;;
stop)
ifconfig lo:0 down
route del $LVS_VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "Server Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0

保存並開啓服務

chmod +x realserver

service realserver start

部署mha

首先,安裝基礎環境

1.安裝mha4mysql-node

tar -zxvf mha4mysql-node-0.57.tar.gz

cd mha4mysql-node-0.57

perl Makefile.PL

make && make install

2.安裝mha4mysql-manager

tar -zxvf mha4mysql-manager-0.57.tar.gz

cd mha4mysql-manager-0.57

perl Makefile.PL

make && make install

配置mha4mysql-manager

將源碼包中的默認配置文件複製到/etc/mha,包含masterha_default.cnf和app1.cnf兩個配置文件,然後編輯/etc/mha/app1.cnf,在該配置文件中,涉及到的目錄或賬號請自行創建。

[server default]
manager_workdir=/opt/mha/app1
manager_log=/opt/mha/app1/manager.log
#user=mysql
#password=mysqltellu
#ssh_user=mysql
repl_user=repl
repl_password=repltellu
ping_interval=1
#shutdown_script="/opt/mha/scripts/power_manager"
#master_ip_failover_script="/opt/mha/scripts/master_ip_failover"
#master_ip_online_change_script="/opt/mha/scripts/master_ip_online_change"
#report_script="/opt/mha/scripts/send_report"

[server1]
hostname=10.10.10.11
master_binlog_dir="/data/mysql/master-log"
candidate_master=1

[server2]
hostname=10.10.10.12
master_binlog_dir="/data/mysql/master-log"
candidate_master=1

[server3]
hostname=10.10.10.13
no_master=1

操作mha4myql-manager

#啓動

masterha_manager --conf=/etc/mha/app1.cnf 2>&1 &

#停止

masterha_stop --conf=/etc/mha/app1.cnf

部署mha4mysql-node

1、各數據庫節點安裝mha4mysql-node。

rpm -ivh mha4mysql-node-0.57-0.el7.noarch.rpm

2、MHA管理端與各數據庫節點、各數據庫節點之間需要實現免密登錄。

ssh-keygen -t rsa -P ‘’

cat .ssh/id_rsa.pub >> .ssh/authorized_keys
chmod go= .ssh/authorized_keys
for i in 7 8 9;do scp -p /root/.ssh/id_rsa /root/.ssh/authorized_keys [email protected].$i:/root/.ssh/ ;done

3、在各數據庫上創建用於mha的複製賬號

grant all privileges on . to ‘repl’@‘10.10.10.%’ identified by ‘repltellu’;

flush privileges;

4、測試配置結果

masterha_check_ssh --conf=/etc/mha/app1.cnf
masterha_check_repl --conf=/etc/mha/app1.cnf

部署LVS+keepalived

安裝ipvsadm+Keepalived

yum -y install ipvsadm keepalived

配置LVS

開啓路由轉發功能

sed -i ‘s/ip_forward = 0/ip_forward = 1/p’ /etc/sysctl.conf
sysctl -p

配置Keepalived

分離keepalived日誌

sed -i ‘s/KEEPALIVED_OPTIONS="-D"/KEEPALIVED_OPTIONS="-D -d -S 0"/g’ /etc/sysconfig/keepalived

編輯keepalived.conf

global_defs {
    router_id LVS
}

#如果配置了mha通過lvs高可用,本人的mha是單機,所以不需要
#vrrp_script check_masterha_manager {
#    script "/opt/scripts/check_mha4mysql_manager.sh"
#    interval 3
#}

vrrp_instance MYSQL_SLAVE {

    state MASTER    #從lvs上把 MASTER 改爲 BACKUP
    interface eno16777736
    virtual_router_id 200
    priority 100    #從lvs上把 100 改爲 90
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.10.10.200
    }

    nopreempt
    #smtp_alter

    #如果配置了mha通過lvs高可用,本人的mha是單機,所以不需要
    #notify_master "/opt/scripts/notify_master.sh"
    #notify_backup "/opt/scripts/notify_stop.sh"
    #notify_stop "/opt/scripts/notify_stop.sh"
}

virtual_server_group MysqlRead { 
    10.10.10.200 3306
} 

virtual_server 10.10.10.200 3306 {
    delay_loop 6
    lb_algo wlc
    lb_kind DR
    nat_mask 255.255.255.0 
    #persistence_timeout 
    protocol TCP

    #如果想加設一臺專用故障轉移的備機
    #sorry_server 10.10.10.10 3306
    real_server 10.10.10.12 3306 {
        weight 6
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }
    }

    real_server 10.10.10.13 3306{
    weight 0
    TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 3306
        }
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章