千家信息网

MySQL5.7+keepalived+LVS从库负载均衡搭建

发表于:2024-12-12 作者:千家信息网编辑
千家信息网最后更新 2024年12月12日,数据库架构:一主三从master:192.168.8.57slave1:192.168.8.58slave2:192.168.8.59slave3:192.168.8.61manager:192.16
千家信息网最后更新 2024年12月12日MySQL5.7+keepalived+LVS从库负载均衡搭建

数据库架构:一主三从

master:192.168.8.57

slave1:192.168.8.58

slave2:192.168.8.59

slave3:192.168.8.61

manager:192.168.8.60

工具包:

mha4mysql-manager-0.58.tar.gz

mha4mysql-node-0.58.tar.gz

keepalived-1.4.5.tar.gz

此项目数据库架构中,master和slave1利用MHA和keepalived实现故障自动切换,slave2和slave3利用 keepalived和LVS实现负载均衡,本文着重讲解负载均衡的搭建过程。

一、安装ipvsadm

在slave2和slave3安装

mount /dev/cdrom /mediayum install -y ipvsadm

二、安装keepalived

tar zxvf keepalived-1.4.5.tar.gzcd keepalived-1.4.5./configure --prefix=/usr/local/keepalived/make && make install

设置开机自动启动

systemctl enable keepalived

三、更改keepalived日志位置

keepalived日志默认位置为/var/log/messages

把日志单独存放

修改 vi /usr/local/keepalived/etc/sysconfig/keepalived

把 KEEPALIVED_OPTIONS="-D" 修改为:KEEPALIVED_OPTIONS="-D -d -S 0"

vi /usr/local/keepalived/etc/sysconfig/keepalived# Options for keepalived. See `keepalived --help' output and keepalived(8) and# keepalived.conf(5) man pages for a list of all options. Here are the most# common ones :## --vrrp               -P    Only run with VRRP subsystem.# --check              -C    Only run with Health-checker subsystem.# --dont-release-vrrp  -V    Dont remove VRRP VIPs & VROUTEs on daemon stop.# --dont-release-ipvs  -I    Dont remove IPVS topology on daemon stop.# --dump-conf          -d    Dump the configuration data.# --log-detail         -D    Detailed log messages.# --log-facility       -S    0-7 Set local syslog facility (default=LOG_DAEMON)#KEEPALIVED_OPTIONS="-D -d -S 0"

重启服务

systemctl restart rsyslog

四、修改keepalived配置文件

192.168.8.59

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalivedglobal_defs {router_id 859notification_email {zdd5503@163.com}notification_email_from zdd5503@163.comsmtp_server stmp.163.comsmtp_connect_timeout 30}vrrp_instance v_mysql_slave_wgpt1 {state MASTERinterface enp0s3virtual_router_id 98priority 100advert_int 1nopreemptauthentication {auth_type PASSauth_pass steven}virtual_ipaddress {192.168.8.98/24}}virtual_server 192.168.8.98 3306 {delay_loop 2lb_algo rrlb_kind DRpersistence_timeout 0protocol TCPreal_server 192.168.8.59 3306 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3connect_port 3306}}real_server 192.168.8.61 3306 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3connect_port 3306}}}

192.168.8.61

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalivedglobal_defs {router_id 861notification_email {zdd5503@163.com}notification_email_from zdd5503@163.comsmtp_server stmp.163.comsmtp_connect_timeout 30}vrrp_instance v_mysql_slave_wgpt1 {state BACKUPinterface enp0s3virtual_router_id 98priority 80advert_int 1nopreemptauthentication {auth_type PASSauth_pass steven}virtual_ipaddress {192.168.8.98/24}}virtual_server 192.168.8.98 3306 {delay_loop 2lb_algo rrlb_kind DRpersistence_timeout 0protocol TCPreal_server 192.168.8.59 3306 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3connect_port 3306}}real_server 192.168.8.61 3306 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3connect_port 3306}}}

systemctl daemon-reload

systemctl start keepalived

systemctl enable keepalived

ps -ef |grep keepalived

ip a

五、lo:0绑定VIP地址、抑制ARP广播

192.168.8.59

vi /etc/rc.d/init.d/lvsmysql.sh

#!/bin/bash#. /etc/rc.d/init.d/functionsVIP1=$1case "$2" instart)echo " Start LVS of MySQL Slave REALServer"/sbin/ifconfig lo:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up/sbin/route add -host $VIP1 dev lo:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announcesysctl -p >/dev/null 2>&1;;stop)/sbin/ifconfig lo:0 down/sbin/route del $VIP1 >/dev/null 2>&1echo "Stoped LVS of MySQL Slave Directorserver"echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "0" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/all/arp_announce;;status)isLoOn=`/sbin/ifconfig lo:0 | grep "$VIP"`isRoOn=`/bin/netstat -rn | grep "$VIP"`if [ "$isLoON" == "" -a "$isRoOn" == "" ]; thenecho "LVS-DR real server has run yet."elseecho "LVS-DR real server is running."fiexit 3;;*)echo "Usage: $0 {start|stop|status}"exit 1esacexit 0

192.168.8.61

vi /etc/rc.d/init.d/lvsmysql.sh

#!/bin/bash#. /etc/rc.d/init.d/functionsVIP1=$1case "$2" instart)echo " Start LVS of MySQL Slave REALServer"/sbin/ifconfig lo:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up/sbin/route add -host $VIP1 dev lo:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announcesysctl -p >/dev/null 2>&1;;stop)/sbin/ifconfig lo:0 down/sbin/route del $VIP1 >/dev/null 2>&1echo "Stoped LVS of MySQL Slave Directorserver"echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "0" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/all/arp_announce;;status)isLoOn=`/sbin/ifconfig lo:0 | grep "$VIP"`isRoOn=`/bin/netstat -rn | grep "$VIP"`if [ "$isLoON" == "" -a "$isRoOn" == "" ]; thenecho "LVS-DR real server has run yet."elseecho "LVS-DR real server is running."fiexit 3;;*)echo "Usage: $0 {start|stop|status}"exit 1esacexit 0

六、测试负载均衡

/etc/rc.d/init.d/lvsmysql.sh 192.168.8.59 start

/etc/rc.d/init.d/lvsmysql.sh 192.168.8.59 stop

/etc/rc.d/init.d/lvsmysql.sh 192.168.8.61 start

/etc/rc.d/init.d/lvsmysql.sh 192.168.8.61 stop

echo "/etc/rc.d/init.d/lvsmysql.sh 192.168.1.65 start" >>

/etc/rc.d/rc.local

echo "ipvsadm --set 15 5 15" >> /etc/rc.d/rc.local

ifconfig

ipvsadm -L

mysql -uroot -pmysql -h292.168.8.59 -e "select @@hostname;"

mysql -uroot -pmysql -h292.168.8.61 -e "select @@hostname;



0