LVS负载均衡安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| yum install ipvsadm -y
rpm -ql ipvsadm
/usr/sbin/ipvsadm /usr/lib/systemd/system/ipvsadm.service /etc/sysconfig/ipvsadm-config /usr/sbin/ipvsadm-restore /usr/sbin/ipvsadm-save
lsmod|grep ip_vs modprobe ip_vs uname -r ll /usr/src/kernels/ ln -s /usr/src/kernels/3.10.0-1160.31.1.el7.x86_64 /usr/src/linux
|
ipvsadm命令参数
集群服务相关
1
| ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask]
|
参数(短格式) |
参数(长格式) |
参数说明 |
-A |
–add-service |
添加集群服务 |
-E |
–edit-service |
编辑集群服务 |
-D |
–delete-service |
删除集群服务 |
-C |
–clear |
清除所有集群服务 |
-L/-l |
–list |
列出所有集群服务 |
-R |
–restore |
重新载入集群服务规则,配合下面的 -S 选项使用 |
-S |
–save |
保存集群服务规则,输出为 -R 选项可读的格式 |
|
|
|
-t |
–tcp-service service-address [vip:port] or [real-server-ip:port] |
指定LB服务器提供的是tcp 的服务 |
-u |
–udp-service service-address [vip:port] or [real-server-ip:port] |
指定LB服务器提供的是udp 的服务 |
-f |
–fwmark-service fwmark |
指定是经过iptables 标记过的服务类型 |
|
|
|
-s |
–scheduler scheduler |
定义使用的调度算法,默认的调度算法是: wlc |
-p |
–persistent [timeout] |
定义持久连接的时间 |
-M |
–netmask netmask |
定义子网掩码 |
|
|
|
-Z |
–zero |
虚拟服务表计数器清零(清空当前的连接数量等) |
|
|
|
– |
–set tcp tcpfin udp |
设置连接超时值 |
– |
–start-daemon state |
设置本机主备状态。后面可以跟master 或backup |
– |
–stop-daemon |
停止备服务器 |
– |
–mcast-interface interface |
指定使用备服务器时的广播接口 |
– |
–syncid syncid |
指定syncid, 用于主备服务器的同步。 |
服务器节点相关
1
| ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
|
参数(短格式) |
参数(长格式) |
参数说明 |
-a |
–add-server |
在一个集群服务中添加一台真实服务器规则 |
-e |
–edit-server |
编辑一个集群服务中的某条真实服务器规则 |
-d |
–delete-server |
删除一个集群服务中的某条真实服务器规则 |
-t|u|f |
– |
指定tcp/udp/fireewall模式 |
-r |
–real-server server-address |
指定服务器节点的 IP 和端口号 |
-g |
–gatewaying |
指定工作模式为DR模式(默认的模式) |
-i |
–ipip |
指定工作模式为隧道模式 |
-m |
–masquerading |
指定工作模式为NAT 模式 |
-w |
–weight weight |
指定服务器节点的权值 |
显示信息相关
1
| ipvsadm -L -c|–timeout|–daemon
|
参数(短格式) |
参数(长格式) |
参数说明 |
-c |
–connection |
显示LVS 当前的连接 |
– |
–timeout |
显示tcp tcpfin udp 的timeout 值 |
– |
–daemon |
显示同步守护进程状态 |
– |
–stats |
显示统计信息 |
– |
–rate |
显示速率信息 |
– |
–thresholds |
列出阈值 |
– |
–persistent-conn |
持久连接 |
– |
–sort |
把列表排序 |
– |
–nosort |
不排序 |
–n |
–numeric |
不对ip地址进行dns查询 |
– |
–exact |
单位 |
LVS配置MySQL数据库负载均衡
配置LVS虚拟IP(VIP)
1 2 3 4
| ip addr add 192.168.110.130/24 dev eth0 label eth0:3 route add -host 192.168.110.130 dev eth0 ip link set up eth0 ifconfig eth1:0
|
配置集群服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ipvsadm -C ipvsadm --set 30 5 60 ipvsadm -A -t 192.168.110.130:3306 -s wrr -p 20 ipvsadm -a -t 192.168.110.130:3306 -r 192.168.110.137:3306 -g -w 1 ipvsadm -a -t 192.168.110.130:3306 -r 192.168.110.143:3306 -g -w 1 ipvsadm -Ln
|
在RS端绑定lo网卡及抑制ARP
1 2 3 4 5 6 7 8
| ip addr add 192.168.110.130/32 dev lo label lo:2 route add -host 192.168.110.130 dev lo
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
|
其他说明
配置lo网卡绑定VIP持久化
1 2 3 4 5 6 7 8 9 10 11 12
| vim /etc/sysconfig/network-scripts/ifcfg-lo:2
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="none" DEFROUTE="yes" NAME="lo:2" DEVICE="lo:2" ONBOOT="yes" IPADDR="192.168.110.130" PREFIX="32"
|
配置arp抑制持久化
1 2 3 4 5 6 7 8
| echo ' net.ipv4.conf.ens33.arp_ignore=1 net.ipv4.conf.ens33.arp_announce=2 net.ipv4.conf.all.arp_ignore=1 net.ipv4.conf.all.arp_announce=2' >> /etc/sysctl.conf
sysctl -p
|
LVS配置持久化
实现LVS+Keepalived集群高可用
lb4_01配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| global_defs { router_id lb4_02 } vrrp_instance VI_2 { state MASTER interface eth0 virtual_router_id 130 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.110.130/24 dev eth0 label eth0:3 } }
virtual_server 192.168.110.130 3306 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 20 protocol TCP real_server 192.168.110.137 3306 { weight 1 TCP_CHECK { connect_timeout 5 delay_before_retry 3 connect_port 3306 } } real_server 192.168.110.143 3306 { weight 1 TCP_CHECK { connect_timeout 5 delay_before_retry 3 connect_port 3306 } } }
|
lb4_02配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| global_defs { router_id lb4_01 } vrrp_instance VI_2 { state BACKUP interface eth0 virtual_router_id 130 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.110.130/24 dev eth0 label eth0:3 } }
virtual_server 192.168.110.130 3306 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 20 protocol TCP real_server 192.168.110.137 3306 { weight 1 TCP_CHECK { connect_timeout 5 delay_before_retry 3 connect_port 3306 } }
real_server 192.168.110.143 3306 { weight 1 TCP_CHECK { connect_timeout 5 delay_before_retry 3 connect_port 3306 } } }
|
LVS四层+Nginx七层负载web服务
环境准备
主机 |
IP |
角色 |
备注 |
lb4_01 |
192.168.110.144 |
负载均衡服务器 |
LVS四层负载(主) |
lb4_02 |
192.168.110.145 |
负载均衡服务器 |
LVS四层负载(备) |
lb_01 |
192.168.110.135 |
负载均衡服务器 |
Nginx七层负载1 |
lb_02 |
192.168.110.136 |
负载均衡服务器 |
Nginx七层负载2 |
web01 |
192.168.110.137 |
web服务器 |
默认web服务器 |
web02 |
192.168.110.138 |
web服务器 |
动态web服务器 |
sweb01 |
192.168.110.139 |
web服务器 |
静态web服务器1 |
sweb02 |
192.168.110.140 |
web服务器 |
静态web服务器2 |
lb401的Keepalived配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| global_defs { router_id lb4_01 } vrrp_instance VI_2 { state BACKUP interface eth0 virtual_router_id 130 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.110.130/24 dev eth0 label eth0:3 } }
virtual_server 192.168.110.130 80 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 20 protocol TCP
real_server 192.168.110.135 80 { weight 1 TCP_CHECK { connect_timeout 5 delay_before_retry 3 connect_port 80 } }
real_server 192.168.110.136 80 { weight 1 TCP_CHECK { connect_timeout 5 delay_before_retry 3 connect_port 80 } } }
|
lb402的Keepalived配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| vrrp_instance VI_2 { state MASTER interface eth0 virtual_router_id 130 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.110.130/24 label eth0:3 } }
virtual_server 192.168.110.130 80 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 20 protocol TCP
real_server 192.168.110.135 80 { weight 1 TCP_CHECK { connect_timeout 5 delay_before_retry 3 connect_port 80 } }
real_server 192.168.110.136 80 { weight 1 TCP_CHECK { connect_timeout 5 delay_before_retry 3 connect_port 80 } } }
|
lb01/lb02的lo网卡需要绑定VIP且抑制ARP
编辑并执行此脚本即可:vim /server/scripts/lvs.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #!/bin/bash
VIP=( 192.168.110.130 ) . /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/ifconfig $interface ${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" ;; stop) for ((i=0; i<`echo ${#VIP[*]}`; i++)) do interface="lo:`echo ${VIP[$i]}|awk -F . '{print $4}'`" /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" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac
|
lb01/lb02的Nginx配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| upstream static{ server sweb01 weight=1 server sweb02 weight=1 } upstream default{ server web01 weight=1 } upstream dynamic{ server web02 weight=1 }
server{ listen 80 server_name blog set_real_ip_from 192.168.110.0/24 location /{ proxy_pass http://default proxy_set_header Host $http_host } location /static/{ proxy_pass http://static proxy_set_header Host $http_host } location /dynamic/{ proxy_pass http://dynamic proxy_set_header Host $http_host proxy_set_header X-Forwarded-For $remote_addr } }
|