lvs简介及特点
使用情况:
一般情况下nginx已经够处理多并发的情况了,若nginx依旧不能满足某些并发的情况,则可以使用lvs(四层基于ip的服务)
lvs:linux virtual server(linux虚拟服务)
使用集群技术和Linux操作系统实现一个高性能、高可用的服务器.
很好的可伸缩性(Scalability)
很好的可靠性(Reliability)
很好的可管理性(Manageability)
原理:
lvs处于INPUT链,它不接受请求,只是起到调度的作用,将请求发送给kernel space,判断ip是否为本机ip,若是,则使用ipvsadm来修改ip源地址与目的ip
lvs由ipvs(本身就具有)和ipvsadm(编写策略的工具)组成
特点:
可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。我们先分析实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的。在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。
DR工作模式
vip与服务机必须在同一个局域网内
实验时有两台的主机名都为server1,其中一台为vip,一台为服务机(server2)
vip的配置
yum install ipvsadm.x86_64 -y #安装ipvsadm
systemctl start ipvsadm.service#开启服务
重启服务失败
日志查看报错结果
日志报错“/bin/bash: /etc/sysconfig/ipvsadm: No such file or directory
”说明没有该文件
创建文件后再次启动服务
touch /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
vim /etc/sysconfig/ipvsadm-config #修改配置文件
使得ipvs每次重启时保存设置
ipvsadm -A -t 172.25.42.100:80 -s rr ##编写调度方式
ipvsadm -a -t 172.25.42.100:80 -r 172.25.42.2:80 -g
ipvsadm -a -t 172.25.42.100:80 -r 172.25.42.3:80 -g
systemctl restart ipvsadm.service
cat /etc/sysconfig/ipvsadm
重启服务并查看调度是否写入文件
ipvsadm -ln ##查看其调度情况
ip addr add 172.25.42.100/24 dev eth0 ##添加ip
server2的配置
ip addr add 172.25.42.100/24 dev eth0##给server2服务器添加ip
server2頁面
server3的配置
ip addr add 172.25.42.100/24 dev eth0 ##给server3服务器添加ip
server3頁面
客户机访问
curl 172.25.42.100##访问ip
我們使用的明明时轮询调度,给我们返回的却一直是只有server2的页面,这是为什么呢?
上图为客户机访问server2的结果,可以看到只有一个物理地址(server2的物理地址)
这是因为访问时先找的是server2,所以调度器直接返回server2的结果,再次访问时因为lvs已经记录了server2的mac地址,不会在去寻找别的ip,所以每次都会去访问server2,所以每次的返回结果都为server2的结果。
那么如何避免这个问题呢?
只需要不接受和输入100主机的值即可
server2配置
yum install arptables.x86_64 -y##给两台服务器安装arptables
arptables -A INPUT -d 172.25.42.100 -j DROP
arptables -A OUTPUT -s 172.25.42.100 -j mangle --mangle-ip-s 172.25.42.2
arptables-save > /etc/sysconfig/arptables
systemctl start arptables
server3配置
yum install arptables.x86_64 -y##给两台服务器安装arptables
arptables -A INPUT -d 172.25.42.100 -j DROP
arptables -A OUTPUT -s 172.25.42.100 -j mangle --mangle-ip-s 172.25.42.3
arptables-save > /etc/sysconfig/arptables
systemctl start arptables
清理缓存后客户机访问172.25.42.100
隧道模式
vip与服务器可以不再同一个局域网内
ipvsadm -C # 清除以有策略
modprobe ipip##给vip和两台服务机server2和server3导入隧道模块
vip配置
ip addr del 172.25.42.100/24 dev eth0 #删除之前给eth0的配置
ip addr add 172.25.42.100/24 dev tunl0 #添加ip至tunl0
ip link set up tunl0 ##唤醒tunl0
ipvsadm -A -t 172.25.42.100:80 -s rr ##编写策略
ipvsadm -a -t 172.25.42.100:80 -r 172.25.42.2:80 -i
ipvsadm -a -t 172.25.42.100:80 -r 172.25.42.3:80 -i
server2配置
ip addr del 172.25.42.100/24 dev eth0 #删除之前给eth0的配置
ip addr add 172.25.42.100/24 dev tunl0 #添加ip至tunl0
ip link set up tunl0 ##唤醒tunl0
sysctl -a | grep rp_filter ##消除反向过滤的影响
sysctl -p #让配置生效
server3配置
ip addr del 172.25.42.100/24 dev eth0 #删除之前给eth0的配置
ip addr add 172.25.42.100/24 dev tunl0 #添加ip至tunl0
ip link set up tunl0 ##唤醒tunl0
sysctl -a | grep rp_filter #消除反向过滤的影响
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.arp_filter = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.eth0.arp_filter = 0
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.tunl0.arp_filter = 0
net.ipv4.conf.tunl0.rp_filter = 1
sysctl -p##让配置生效
客户机访问结果
当两台服务机出问题时的解决方案
先配置好DR工作模式并删除ipip模块
我们关闭server2的http时会发生如下错误。
那么怎么来解决这个问题呢?
首先我们下载一个安装包
ldirectord-3.9.5-3.1.x86_64.rpm
安装该包时会报错,需要用到yum的高可用性
添加新的yum高可用性源
[high]
name=high
baseurl=http://172.25.42.254/cn1/addons/HighAvailability/
gpgcheck=0
安装后执行该命令
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d
vim /etc/ha.d/ldirectord.cf##修改配置文件
systemctl stop httpd##关闭两台服务器的httpd
修改vip的http发布文件如下
keepalive实现高可用性
在安装一台虚拟机server4作为备份主机,ip为172.25.42.4
server1和server4获取keepalived-2.0.17.tar 包
拆包后得到keepalived-2.0.17目录
进入该目录后执行脚本编译
./configure --prefix=/usr/local/keepalived --with-init=systemd
编译结束后没有错误即可进行安装
先make
然后make install
建立软链接
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
vim /etc/keepalived/keepalived.conf #修改server1配置文件
注释vrrp_strict
修改virtual_router_id为本机同一组数据(数字必须相同)
修改 virtual_ipaddress为vip地址
vip及其服务主机配置如下所示,其余不需要的删除即可:
scp root@172.25.42.4:/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf ##上传该文件至server4
server4对配置文件修改优先级和权重即可
关闭server1的httpd然后服务机查看
服务机查看