1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > mysql从 lvs_mysql主从之LVS+keepalived+双主MySQL 负载均衡

mysql从 lvs_mysql主从之LVS+keepalived+双主MySQL 负载均衡

时间:2023-10-23 18:17:45

相关推荐

mysql从 lvs_mysql主从之LVS+keepalived+双主MySQL 负载均衡

LVS(Linux Virtual Server)即Linux 虚拟服务器,是一个的开源负载均衡项目,目前LVS 已经被集成到Linux 内核模块中。LVS 是四层负载均衡,也就是说建立在OSI 模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS 支持TCP/UDP 的负载均衡。

一 环境

192.168.132.120 VIP

192.168.132.123 LVS01,keepalived

192.168.132.124 LVS02,keepalived

192.168.132.121 MySQL 主

192.168.132.122 MySQL 主

在192.168.132.123和192.168.132.124安装lvs的管理软件,以及安装keepalive(参考上篇)

[root@lvs01 ~]# yum install ‐y ipvsadm*

LVS 安装完成,查看当前LVS 集群

[root@lvs01 ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn

二 LVS介绍

2.1 LVS 工作模式

NAT 模式

TUN 模式

DR 模式

2.2 LVS 负载均衡调度算法

轮询调度(Round Robin 简称'RR')算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。

加权轮询(Weight Round Robin 简称'WRR')算法主要是对轮询算法的一种优化与补充,LVS 会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A 的权值为1,服务器B 的权值为2,则调度器调度到服务器B 的请求会是服务器A 的两倍。权值越高的服务器,处理的请求越多。

最小连接调度(Least Connections 简称'LC')算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。

加权最少连接(Weight Least Connections 简称'WLC')算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

基于局部性的最少连接调度算法lblc

复杂的基于局部性最少的连接算法lblc目标地址散列调度算法 dh

源地址散列调度算法 sh

固定调度算法:rr,wrr,dh,sh

动态调度算法:wlc,lc,lblc,lblcr

NAT 模式:网络地址转换

DR 模式:直接路由

2.3 配置

LVS01配置:

[root@lvs01 ~]# vim /etc/keepalived/keepalived.conf

! Configuration File forkeepalived

global_defs {

router_id lvs01

}

vrrp_instance VI_1 {

state BACKUP

interface ens33

virtual_router_id51priority100nopreempt

advert_int1authentication {

auth_type PASS

auth_pass1111}

virtual_ipaddress {192.168.132.120}

}

virtual_server192.168.132.120 3306{

delay_loop6protocol TCP

lb_algo rr

lb_kind DR

real_server192.168.132.121 3306{

TCP_CHECK {

connect_timeout3nb_get_retry3connect_port3306delay_before_retry3}

}

real_server192.168.132.122 3306{

TCP_CHECK {

connect_timeout3nb_get_retry3connect_port3306delay_before_retry3}

}

}

LVS02配置

[root@lvs02 ~]# vim /etc/keepalived/keepalived.conf

! Configuration File forkeepalived

global_defs {

router_id lvs02

}

vrrp_instance VI_1 {

state BACKUP

interface ens33

virtual_router_id51priority90nopreempt

advert_int1authentication {

auth_type PASS

auth_pass1111}

virtual_ipaddress {192.168.132.120}

}

virtual_server192.168.132.120 3306{

delay_loop6protocol TCP

lb_algo rr

lb_kind DR

real_server192.168.132.121 3306{

TCP_CHECK {

connect_timeout3nb_get_retry3connect_port3306delay_before_retry3}

}

real_server192.168.132.122 3306{

TCP_CHECK {

connect_timeout3nb_get_retry3connect_port3306delay_before_retry3}

}

}

数据库配置脚本

master1和master2都操作

[root@master1 ~]# vim /opt/realserver.sh

#!/bin/bash

#description: Config realserver

VIP=192.168.132.120

/etc/rc.d/init.d/functionscase "$1" instart)/sbin/ifconfig lo:0 $VIP netmask 255.255.255.255broadcast $VIP/sbin/route add -host $VIP dev lo:0

echo "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_announce

sysctl-p >/dev/null 2>&1

echo "RealServer Start OK";;

stop)/sbin/ifconfig lo:0down/sbin/route del $VIP >/dev/null 2>&1

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_announceecho "RealServer Stoped";;*)echo "Usage: $0 {start|stop}"exit1

esac

Realserver 配置:

arp_ignore

arp:请求包,响应包

0:响应任意网卡上接收到的对本机IP 地址的arp 请求(包括环回网卡上的地址),而不管该目的IP 是否在接收网卡上。

1:只响应目的IP 地址为接收网卡上的本地地址的arp 请求。

当arp_ignore 参数配置为0 时,eth1 网卡上收到目的IP 为环回网卡IP 的arp 请求,但是eth1 也会返回arp 响应,把自己的mac 地址告诉对端。

当arp_ignore 参数配置为1 时,eth1 网卡上收到目的IP 为环回网卡IP 的arp 请求,发现请求的IP 不是自己网卡上的IP,不会回arp 响应。

当arp_announce 参数配置为0 时,系统要发送的IP 包源地址为eth1 的地址,IP 包目的地址根据路由表查询判断需要从eth2 网卡发出,这时会先从eth2 网卡发起一个arp 请求,用于获取目的IP 地址的MAC 地址。该arp 请求的源MAC 自然是eth2 网卡的MAC 地址,但是源IP 地址会选择eth1 网卡的地址。当arp_announce 参数配置为2 时,eth2 网卡发起arp 请求时,源IP 地址会选择eth2 网卡自身的IP 地址。

arp_announce

0:允许使用任意网卡上的IP 地址作为arp 请求的源IP,通常就是使用数据包的源IP。

1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp 请求的源IP 地址。

2:忽略IP 数据包的源IP 地址,选择该发送网卡上最合适的本地地址作为arp 请求的源IP 地址。源IP,源MAC,目的IP,目的MAC

arp_ignore 和arp_announce 参数在DR 模式下的作用

1. arp_ignore

因为DR 模式下,每个真实服务器节点都要在环回网卡上绑定虚拟服务IP。这时候,如果客户端对于虚拟服务IP 的arp请求广播到了各个真实服务器节点,如果arp_ignore 参数配置为0,则各个真实服务器节点都会响应该arp 请求,此时客户端就无法正确获取LVS 节点上正确的虚拟服务IP 所在网卡的MAC 地址。所以DR 模式下要求arp_ignore 参数要求配置为1。

2. arp_announce

每个机器或者交换机中都有一张arp 表,该表用于存储对端通信节点IP 地址和MAC 地址的对应关系。当收到一个未知IP 地址的arp 请求,就会再本机的arp 表中新增对端的IP 和MAC 记录;当收到一个已知IP 地址(arp 表中已有记录的地址)的arp 请求,则会根据arp 请求中的源MAC 刷新自己的arp 表。

如果arp_announce 参数配置为0,则网卡在发送arp 请求时,可能选择的源IP 地址并不是该网卡自身的IP 地址,这时候收到该arp 请求的其他节点或者交换机上的arp 表中记录的该网卡IP 和MAC 的对应关系就不正确,可能会引发一些未知的网络问题,存在安全隐患。所以DR 模式下要求arp_announce 参数要求配置为2。

[root@master1 ~]# chmod +x /opt/realserver.sh

[root@master1 ~]# chmod +x /opt/realserver.sh

[root@master1 ~]# /opt/realserver.sh start

[root@master1 ~]# chmod +x /etc/rc.d/init.d/functions

[root@master1 ~]# /opt/realserver.sh start

/etc/rc.d/init.d/functions: line 690: return: can only `return'from a function or sourced script

SIOCADDRT: File exists

RealServer Start OK

把这个脚本加入开机自启动

[root@master1 ~]# vim /etc/rc.d/rc.local

/opt/realserver.sh start

[root@master1 ~]# chmod +x /etc/rc.d/rc.local

master2相同配置方法

lvs启动keepalived

[root@lvs01 ~]# systemctl start keepalived

[root@lvs01 ~]# systemctl status keepalived

keepalived.service -LVS and VRRP High Availability Monitor

Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled)

Active: active (running) since Thu-07-11 10:05:21 EDT; 12s ago

四 验证

4.1 查看虚拟IP

[root@lvs02 ~]# ip addr

1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet127.0.0.1/8scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128scope host

valid_lft forever preferred_lft forever2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:f0:04:c9 brd ff:ff:ff:ff:ff:ff

inet192.168.132.123/24 brd 192.168.132.255scope global ens33

valid_lft forever preferred_lft forever

inet6 fe80::a6b5:aa2c:b3c7:3415/64scope link

valid_lft forever preferred_lft forever3: ens34: mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:f0:04:d3 brd ff:ff:ff:ff:ff:ff

inet192.168.254.123/24 brd 192.168.254.255scope global ens34

valid_lft forever preferred_lft forever

inet6 fe80::c37e:949c:9d3:d204/64scope link

valid_lft forever preferred_lft forever

[root@lvs01 ~]# ip addr

1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet127.0.0.1/8scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128scope host

valid_lft forever preferred_lft forever2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:ac:6a:38brd ff:ff:ff:ff:ff:ff

inet192.168.132.124/24 brd 192.168.132.255scope global ens33

valid_lft forever preferred_lft forever

inet192.168.132.120/32scope global ens33 #虚拟IP

valid_lft forever preferred_lft forever

inet6 fe80::2333:c431:914d:1a31/64scope link

valid_lft forever preferred_lft forever3: ens34: mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:ac:6a:42brd ff:ff:ff:ff:ff:ff

inet192.168.254.124/24 brd 192.168.254.255scope global ens34

valid_lft forever preferred_lft forever

inet6 fe80::d4b5:199b:3d5a:ff0f/64scope link

valid_lft forever preferred_lft forever

4.2 使用192.168.132.125连接数据库

[root@localhost ~]# mysql -uroot -h192.168.132.120 -p1234567

MySQL [(none)]>show databases;+--------------------+

| Database |

+--------------------+

| information_schema |

| master1 |

| master2 |

| mysql |

| performance_schema |

| sys |

+--------------------+

4.3 查看192.168.132.120所在服务器

[root@lvs02 ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags->RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP192.168.132.120:3306rr-> 192.168.132.121:3306 Route 1 0 1

-> 192.168.132.122:3306 Route 1 1 0

则keepalived+lvs实现负载均衡高可用配置完成

4.4 负载均衡验证

LVS负载均衡,在发现如果后端的mysql不能连接,就不会把数据发送给服务器

[root@master1 ~]# systemctl stop mysqld

[root@lvs02 ~]# tail -f /var/log/messages

Jul 11 10:25:46 lvs02 Keepalived_healthcheckers[1386]: Removing service [192.168.132.121]:tcp:3306 to VS [192.168.132.120]:tcp:3306

Jul 11 10:25:52 lvs02 Keepalived_healthcheckers[1386]: Received EPOLLHUP for fd 8 #同时一直看状态

[root@master1 ~]# systemctl start mysqld

[root@lvs02 ~]# tail -f /var/log/messages

Jul 11 10:27:52 lvs02 Keepalived_healthcheckers[1386]: TCP connection to [192.168.132.121]:tcp:3306success.

Jul11 10:27:52 lvs02 Keepalived_healthcheckers[1386]: Adding service [192.168.132.121]:tcp:3306 to VS [192.168.132.120]:tcp:3306

4.5 高可用验证

当lVS的其中一台宕机,虚拟盘就会跳到另一台上去

[root@lvs02 ~]# systemctl stop keepalived

[root@lvs02 ~]# ip addr

1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet127.0.0.1/8scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128scope host

valid_lft forever preferred_lft forever2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:ac:6a:38brd ff:ff:ff:ff:ff:ff

inet192.168.132.124/24 brd 192.168.132.255scope global ens33

valid_lft forever preferred_lft forever

inet6 fe80::2333:c431:914d:1a31/64scope link

valid_lft forever preferred_lft forever3: ens34: mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:ac:6a:42brd ff:ff:ff:ff:ff:ff

inet192.168.254.124/24 brd 192.168.254.255scope global ens34

valid_lft forever preferred_lft forever

inet6 fe80::d4b5:199b:3d5a:ff0f/64scope link

valid_lft forever preferred_lft forever

[root@lvs01 ~]# ip addr

1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet127.0.0.1/8scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128scope host

valid_lft forever preferred_lft forever2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:f0:04:c9 brd ff:ff:ff:ff:ff:ff

inet192.168.132.123/24 brd 192.168.132.255scope global ens33

valid_lft forever preferred_lft forever

inet192.168.132.120/32scope global ens33

valid_lft forever preferred_lft forever

inet6 fe80::a6b5:aa2c:b3c7:3415/64scope link

valid_lft forever preferred_lft forever3: ens34: mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:f0:04:d3 brd ff:ff:ff:ff:ff:ff

inet192.168.254.123/24 brd 192.168.254.255scope global ens34

valid_lft forever preferred_lft forever

inet6 fe80::c37e:949c:9d3:d204/64scope link

valid_lft forever preferred_lft forever

继续连接数据库

[root@localhost ~]# mysql -uroot -h192.168.132.120 -p1234567

MySQL [(none)]>show databases;+--------------------+

| Database |

+--------------------+

| information_schema |

| master1 |

| master2 |

| mysql |

| performance_schema |

| sys |

+--------------------+

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。