目录
1、LVS-DR模式调度器
1-1、IP 命令介绍
1-2、LVS-DR环境
1-2-1、当客户端与集群之间有网关
1-2-2、如果集群使用私有地址,网关的作用是nat
2、haproxy
3、高可用之keepalived
ip a ==ip addr-------------------类似于ifconfig命令
ip addr ls dev eth0-----------查看eth0的IP相关信息
[root@rs1 ~]# ip addr add dev eth0 192.168.5.11/24-------添加ip地址
[root@rs1 ~]# ip addr del dev eth0 192.168.5.11/24-----------删除ip地址
查看链路层的信息:
[root@rs1 ~]# ip link
添加一个虚拟网卡:
[root@rs1 ~]# ip link add veth-a type veth peer veth-b--------添加虚拟网卡
给虚拟网卡设置ip地址:
[root@rs1 ~]# ip a a dev veth-a 192.168.4.101/24
让eth0网卡不对arp请求做应答:
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
删除arp缓存表条目:
[root@ds ~]# arp -d 192.168.4.101
client:201.1.1.200(eth2)
director: (eth2)
dip: 201.1.1.100
vip: 201.1.1.101
real server:(eth2)
201.1.1.102
201.1.1.103
Director的配置
1. 配置vip
[root@ds ~]# ip a a dev eth2 201.1.1.101/24
2. 添加虚拟服务器
[root@ds ~]# ipvsadm -C------清除所有lvs规则
[root@ds ~]# ipvsadm -A -t 201.1.1.101:80 -s rr
3. 添加真实服务器
[root@ds ~]# ipvsadm -a -t 201.1.1.101:80 -r 201.1.1.102 -g
[root@ds ~]# ipvsadm -a -t 201.1.1.101:80 -r 201.1.1.103 -g
Real Server的配置:
1.在lo设备上配置vip
[root@rs1 ~]# ip a a dev lo 201.1.1.101/32
2. 不对arp请求做应答,选择arp请求数据包的源IP地址。
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应。
0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。
1:只响应目的IP地址为接收网卡上的本地地址的arp请求。
arp_announce的作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。
arp_announce参数常用的取值有0,1,2。
0:允许使用任意网卡上的IP地址作为arp请求的源IP。
1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。
2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。
客户端测试:
curl 201.1.1.101
集群是公有地址,网关的作用是转发:
client ---201.1.2.254(router)201.1.1.254
real server修改网关:
[root@rs2 ~]# nmcli connection modify eth2 ipv4.method manual ipv4.gateway 201.1.1.254 connection.autoconnect yes
[root@rs2 ~]# nmcli connection up eth2
[root@rs2 ~]# route -n
删除client网关:
[root@client ~]# route del default
在路由器上添加规则:
[root@room9pc01 ~]# iptables -t nat -F
[root@room9pc01 ~]# iptables -t nat -A PREROUTING -d 201.1.2.254 -p tcp --dport 80 -j DNAT --to 201.1.1.101
[root@room9pc01 ~]# iptables -t nat -A POSTROUTING -s 201.1.1.0/24 -j SNAT --to 201.1.2.254
[root@client ~]# curl 201.1.2.254
环境:
1台haproxy
201.1.1.100
2台应用服务器
201.1.1.102
201.1.1.103
安装软件:
[root@ds ~]# yum install haproxy
修改配在文件
vim /etc/haproxy/haproxy.cfg
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
listen stats
bind 0.0.0.0:1080
stats refresh 30s---------30s刷新一次页面状态
stats uri /mystats-------uri是mystats
stats realm Haproxy manager-----状态页面标题
stats auth admin:admin------登陆状态页面的用户名和密码
listen websrv 0.0.0.0:80
cookie SERVERID rewrite
balance roundrobin----------负载均衡调度算法为轮询
server web1 201.1.1.102:80 cookie app1inst1 check inter 2000 rise 2 fall 5-----轮询的服务器IP和端口,每2s检查一次健康状态,服务从down状态到up状态需检查两次才会确认,服务从up状态到down需检查5次才会确认
server web2 201.1.1.103:80 cookie app1inst2 check inter 2000 rise 2 fall 5
为了配置haproxy的日志,需要修改/etc/rsyslog.conf
支持远端日志功能:
$ModLoad imudp
$UDPServerRun 514
local2.* /var/log/haproxy.log
类型.级别
重启rsyslog和haproxy
systemctl restart rsyslog
systemctl restart haproxy
后端服务器的日志里显示客户端的ip
vim /etc/httpd/conf/httpd.conf
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
systemctl restart httpd
tail -f /var/log/httpd/access_log
客户端测试:
curl 201.1.1.100
总结:haproxy相对于LVS-NAT,不仅实现了负载均衡,而且还有可视化状态页面,并且配置起来更简单。
keepalived + lvs
rs1:201.1.1.102
rs2:201.1.1.103
ds1:201.1.1.100
ds2:201.1.1.99
vip:201.1.1.101
client:201.1.1.254
在2台调度器上安装软件:
[root@ds1 yum.repos.d]# yum install keepalived
[root@ds2 yum.repos.d]# yum install keepalived
健康检测测试:
停掉其中一个real server的httpd服务
HA的测试:
停掉主服务的keepalived服务,vip地址就会飘到另一台服务器上
state BACKUP
nopreempt
curl http://201.1.1.101
debug:
1. ping 201.1.1.101
2. 在ds服务器,ipvsadm -ln,如果看不到规则,则:
1) 检查keepalived配置文件
2)检查real server的httpd服务是否启动
3. 检查real server是否绑定了vip,以及是否调整了内核参数
keepalived + haproxy
2台haproxy实现HA
2台应用服务器---httpd
1台client
haproxy1(ds1) -- 201.1.1.100
haproxy2(ds2) -- 201.1.1.99
vip: 201.1.1.101
rs1:201.1.1.102
rs2:201.1.1.103
通过脚本对haproyx做健康检查:
cat check_haproxy_status.sh
#!/bin/bash
curl -I localhost &> /dev/null
if [ $? -ne 0 ];then
systemctl stop keepalived
fi
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id ds1
}
vrrp_script check_haproxy {
script "/etc/keepalived/check_haproxy_status.sh"
inerval 5
}
vrrp_instance VI_1 {
state BACKUP
.........
.........
track_script {
check_haproxy
}
}
客户端测试:
curl 201.1.1.101