首页
Linux教程
Linux实战教程
Shell教程
Mysql教程
Keepalived教程
Linux基础教程
Linux进阶教程
运维题库
运维干货
视频教程
运维资讯
资源下载
关于我们
首页 LVS教程场景1:实现MySQL负载

LVS环境准备与安装

场景2:实现MySQL高可用

1.8.4 场景1:实现MySQL负载均衡

1.配置LVS虚拟IP(VIP)

ifconfig eth1:18 172.16.1.18/24 up     #==>简便写法
#route add -host 172.16.1.18 dev eth1  #==添加主机路由,也可不加此行。

③配置后的检查结果:
ifconfig eth1:0

C:\Users\oldboy>ping 172.16.1.18
正在 Ping 172.16.1.18 具有 32 字节的数据:
来自 172.16.1.18 的回复: 字节=32 时间<1ms TTL=64
#提示:到这里说明VIP地址已经配好,并可以使用了。

2.手工执行配置添加LVS服务并增加两台RS ipvsadm

ipvsadm -C                         #<==    -C        clear the whole table
ipvsadm --set 30 5 60              #<== --set tcp tcpfin udp        set connection timeout values
ipvsadm -A -t 172.16.1.18:3306 -s wrr   #--add-service   -A   add virtual service with options
#ipvsadm -A -t 172.16.1.18:3306 -s wrr -p 20
ipvsadm -a -t 172.16.1.18:3306 -r 172.16.1.51:3306 -g -w 1 #dr模式
ipvsadm -a -t 172.16.1.18:3306 -r 172.16.1.7:3306 -g -w 1

# ipvsadm -a|e -t|u|f service-address -r server-address [options]

[root@lb4-01 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.1.18:3306 wrr
  -> 172.16.1.7:3306              Route   1      0          0         
  -> 172.16.1.51:3306             Route   1      0          0 

[root@lb4-01 ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  172.16.1.18:3306                    0        0        0        0        0
  -> 172.16.1.7:3306                     0        0        0        0        0
  -> 172.16.1.51:3306                    0        0        0        0        0

[删除方法]

#ipvsadm -D -t 172.16.1.18:3306 -s wrr
#ipvsadm -D -t 172.16.1.18:3306
#ipvsadm -d -t 172.16.1.18:3306 -r 172.16.1.18:3306 <==正确
#ipvsadm -d -t 172.16.1.18:3306 -r 172.16.1.18:3306 -g -w 1 <==不好用

[相关参数说明]

[root@oldboy ~]# ipvsadm -help
# --clear           -C        clear the whole table
# --add-service     -A        add virtual service with options
# --tcp-service     -t service-address   service-address is host[:port]
# --scheduler       -s scheduler         one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
# --add-server    -a                   add real server with options
# --real-server   -r server-address    server-addres s is host (and port)
# --masquerading  -m                   masquerading (NAT)
# --gatewaying    -g                   gatewaying (direct routing) (default)
# --delete-server -d         delete real server
# --persistent    -p [timeout]         persistent service(会话保持功能)
# --set tcp tcpfin udp        set connection timeout values
# --weight       -w weight            capacity of real server
# --ipip         -i                   ipip encapsulation (tunneling)

#提示:更多参数请ipvsadm -help自行查看
#⑤命令执行过程及检查配置的执行结果
ipvsadm -C 
ipvsadm --set 30 5 60  
ipvsadm -A -t 172.16.1.18:3306 -s wrr -p 20
ipvsadm -a -t 172.16.1.18:3306 -r 172.16.1.51:3306 -g -w 1
ipvsadm -a -t 172.16.1.18:3306 -r 172.16.1.7:3306 -g -w 1   
ipvsadm -L -n --sort

ipvsadm -d -t 172.16.1.18:3306 -r 172.16.1.51:80 #==>删除测试
ipvsadm -L -n --sort

ipvsadm -a -t 172.16.1.18:3306 -r 172.16.1.51:80 
ipvsadm -L -n --sort

#此时,可以打开浏览器访问http://172.16.1.18体验结果,如果没意外,是无法访问的。

3.手工在RS端绑定lo网卡及抑制ARP

⑥每台real server端执行
命令:
ifconfig lo:18 172.16.1.18/32 up
#route add -host 172.16.1.18 dev lo

#工作中写到配置文件见后文

#centos7
ip addr add 172.16.1.18/32 dev lo label lo:50
#route add -host 172.16.1.18 dev lo

每个集群节点上的环回接口(lo)设备上被绑定VIP地址(其广播地址是其本身,子网掩码是255.255.255.255,采取可变长掩码方式把网段划分成只含一个主机地址的目的是避免ip地址冲突)允许LVS-DR集群中的集群节点接受发向该VIP地址的数据包,这会有一个非常严重的问题发生,集群内部的真实服务器将尝试回复来自正在请求VIP客户端的ARP广播,这样所有的真实服务器都将声称自己拥有该VIP地址,这时客户端将有可能直接发送请求数据包到某台真实服务器上,从而破坏了DR集群的负载均衡策略。因此,必须要抑制所有真实服务器响应目标地址为VIP的ARP广播,而把客户端ARP广播响应交给负载均衡器。

4.手工在RS端抑制ARP响应

⑦抑制ARP响应方法如下:
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

以RS1为例演示执行过程如下:
ifconfig lo:18 172.16.1.18 netmask 255.255.255.255 up
#route add -host 172.16.1.18 dev lo
cat /proc/sys/net/ipv4/conf/lo/arp_ignore
cat /proc/sys/net/ipv4/conf/all/arp_ignore  
cat /proc/sys/net/ipv4/conf/all/arp_announce 
cat /proc/sys/net/ipv4/conf/lo/arp_announce    
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


#测试最终LVS对数据库负载是否成功:
#采用web02测试:
#  phpmyadmin
#  mysql 测试成功

windows:navicat...需要vmware 映射

实际教学使用mysql客户端测试,在web02上
yum install mariadb -y
mysql -ublog -poldboy123 -h172.16.1.18 #18是VIP,用户密码为前面课程提前设置。

####停掉了51,发现连不了
lvs没有健康检查功能,51停掉了,仍然请求发给51,需要手工清理51
[root@lb4-01 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.1.18:3306 wrr persistent 20
  -> 172.16.1.7:3306              Route   1      0          0         
  -> 172.16.1.51:3306             Route   1      0          4         
[root@lb4-01 ~]# ipvsadm -d -t 172.16.1.18:3306 -r 172.16.1.51:3306
[root@lb4-01 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.1.18:3306 wrr persistent 20
  -> 172.16.1.7:3306              Route   1      0          0   
重连成功,LVS的健康检查要靠keepalved配合实现,后文讲

5.抑制ARP脚本实现

开发脚本配置LVS RS真实服务器端
#!/bin/bash
# Written by oldboy (31333741@qq.com)
# QQ:31333741
# description: Config realserver lo and apply noarp 
VIP=(
        172.16.1.18
     )
. /etc/rc.d/init.d/functions
case "1" in
start)
        for ((i=0; i<`echo{#VIP[*]}`; i++))
        do
           interface="lo:`echo {VIP[i]}|awk -F . '{print 4}'`"
           /sbin/ifconfiginterface {VIP[i]} broadcast {VIP[i]} netmask 255.255.255.255 up
        done
        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
       action "Start LVS of RearServer.by old1boy"
        ;;
stop)
        for ((i=0; i<`echo {#VIP[*]}`; i++))
        do
            interface="lo:`echo{VIP[i]}|awk -F . '{print4}'`"
            /sbin/ifconfig interface{VIP[i]} broadcast{VIP[i]} netmask 255.255.255.255 down
        done
        echo "close LVS Directorserver"
        if [{#VIP[*]} -eq 1];then
          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
        fi
       action "Close LVS of RearServer.by old2boy"
        ;;
*)
        echo "Usage: $0 {start|stop}"
        exit 1
esac

#工作中可以将lo网卡绑定写到配置文件:
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-lo:18
[root@db01 network-scripts]# cat ifcfg-lo:18
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
NAME="lo:18"
DEVICE="lo:18"
ONBOOT="yes"
IPADDR="172.16.1.18"
PREFIX="32

6.arp抑制技术参数说明

arp_ignore- INTEGER
定义对目标地址为本地IP的ARP询问不同的应答模式
0 -(默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求。
1 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求。
2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内。
3 -不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应。
4-7 -保留未使用。
8 -不回应所有(本地地址)的arp查询。
arp_announce - INTEGER
对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制:  
确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口
0 -(默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址
1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一。如果该来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.
2 -对查询目标使用最适当的本地地址,在此模式下将忽略这个IP数据包的源地址并尝试选择能与该地址通信的本地地址,首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.限制了使用本地的vip地址作为优先的网络接口

本文链接:https://www.yunweibase.com/archives/138

LVS环境准备与安装

场景2:实现MySQL高可用

网友评论comments

发表评论

邮箱地址不会被公开。 必填项已用*标注

暂无评论

Copyright © 运维基地 保留所有权
扫二维码
扫二维码
返回顶部