负载均衡lvs+keepalived高可用

lvs手册网址:http://zh.linuxvirtualserver.org/node/28(DR工作模式)
本次实验适合DR模式,因为所有虚拟机都在一个网段里

实验环境:
server1 调度器
server2 后台web服务器
server3 后台web服务器

步骤:
安装ipvsadm软件包:
列出软件
在这里插入图片描述
安装,此工具是用户端专门写lvs策略用的

[root@server1 ~]# yum install ipvsadm -y

server2 和server3安装apache做测试

[root@server2 ~]# yum install httpd  安装
[root@server2 ~]# systemctl start httpd  启动服务
[root@server2 ~]# cd /var/www/html/
[root@server2 html]# ls
[root@server2 html]# echo server2 > index.html  创建首页
[root@server2 html]# curl localhost  检测一下
server2

[root@server3 ~]# yum install httpd -y 安装
[root@server3 ~]# systemctl start httpd 启动服务
[root@server3 ~]# cd /var/www/html/
[root@server3 html]# ls
[root@server3 html]# echo server3 > index.html  创建首页
[root@server3 html]# curl localhost
server3

可以用dns做负载均衡,但是缺点很多
在这里插入图片描述

创建一个虚拟ip,用户可以通过访问虚拟ip,然后通过虚拟服务器把外部请求调度到各个web服务器
在这里插入图片描述
在这里插入图片描述

[root@server1 ~]# ipvsadm -A -t 172.25.50.100:80 -s rr    
-A 表示添加  -t 表示tcp协议  -s调度 ,rr表示轮较,最均衡的
[root@server1 ~]#ipvsadm -a -t 172.25.50.100:80 -r 172.25.50.2:80 -g  往虚拟服务器上添加web服务器ip  -g表示直连
[root@server1 ~]# ipvsadm -a -t 172.25.50.100:80 -r 172.25.50.3:80 -g
[root@server1 ~]# ipvsadm -ln   列出
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.50.100:80 rr    虚拟服务可以创建多个可以调度不同主机
  -> 172.25.50.2:80               Route   1      0          0         
  -> 172.25.50.3:80               Route   1      0          0  
[root@server1 ~]# ip addr add 172.25.50.100/24 dev eth0  在调度器上手工添加虚拟ip

添加ip成功 ,172.25.50.100就是我们的虚拟vip
在这里插入图片描述
此时去调度时发现卡住了
在这里插入图片描述
但是请求已经到达server端,为何是卡住不动了??
在这里插入图片描述
因为客户端上的ip是不会变得,客户端由172.25.50.100通过调度器转成172.25.50.2 客户端ip还是100
但是现在server端没有100,所以也需要在server端添加100-

[root@server2 html]# ip addr add 172.25.50.100/32 dev eth0
[root@server3 html]# ip addr add 172.25.50.100/32 dev eth0

再次调度就成功了
在这里插入图片描述
三台虚拟机在一个网段同一ip,ip会有冲突,谁先响应就找谁,如下:

在这里插入图片描述
server3先响应,找server3,这样就达不到负载均衡的效果,该如何解决???

方法:

[root@server2 ~]# yum install arptables_jf -y  安装arotables防火墙
[root@server3 ~]# yum install arptables_jf -y  安装arotables防火墙
ot@server2 ~]# arptables -A INPUT -d 172.25.50.100 -j DROP 表示将目标地址丢弃掉, -A附加的意识   drop表示丢弃
[root@server2 ~]# arptables -A OUTPUT -s 172.25.50.100 -j mangle --mangle-ip-s 172.25.50.2  出去也不能从100出去,要转换成自己的合法ip地址[root@server2 ~]# arptables-save > /etc/sysconfig/arptables  保存策略,不然重启会失效
[root@server2 ~]# cat /etc/sysconfig/arptables 
*filter
:INPUT ACCEPT
:OUTPUT ACCEPT
:FORWARD ACCEPT
-A INPUT -j DROP -d 172.25.50.100 
-A OUTPUT -j mangle -s 172.25.50.100 --mangle-ip-s 172.25.0.2 
[root@server2 ~]# arptables -F   -F 表示刷掉策略
[root@server2 ~]# arptables -L
Chain INPUT (policy ACCEPT)

Chain OUTPUT (policy ACCEPT)

Chain FORWARD (policy ACCEPT)
[root@server2 ~]# systemctl  restart arptables.service  重启服务
[root@server2 ~]# arptables -nL
Chain INPUT (policy ACCEPT)
-j DROP -d 172.25.50.100 

Chain OUTPUT (policy ACCEPT)
-j mangle -s 172.25.50.100 --mangle-ip-s 172.25.0.2   策略又回来了

Chain FORWARD (policy ACCEPT)
[root@server2 ~]# scp /etc/sysconfig/arptables  server3:/etc/sysconfig/  将策略文件拷贝到server3上

[root@server3 sysconfig]# vim /etc/sysconfig/arptables 将ip地址转换成server3的ip合法地址
在这里插入图片描述

[root@server2 ~]# systemctl restart arptables.service  重启服务
[root@server3 sysconfig]# systemctl restart arptables.service 重启服务

原理图解

在这里插入图片描述
客户端发送数据包到调度器 原ip地址 访问 目标地址vip,ip地址是不会变的,经过DR调度器后,他会将原mac地址转换成Rs上的mac地址,通过二层链路把数据包转发到RS,然后在2层往上解包,就可以看到vip了,然后RS上也设定了vip,因此认为这个数据包就是访问客户端的,然后rs通过原地址响应客户端,后续再回来也需要经过调度器

iptables 和 ipvs谁的优先级高??
iptables先把包放行进来,然后策略匹配才能转换到ipvs上工作

[root@server2 ~]# systemctl stop httpd.service server2出问题,停掉了
在这里插入图片描述
可以看出调度器依然正常工作,但是他不关心后端是否正常运行,因此lvs对后端没有健康检查,如何让lvs进行后端健康检查??
可以安装keepalived 软件,实现健康检查,他用的是vrr协议
vrrp 协议工作机制:一台MASTER会发出心跳包,多台backup主机负责接收心跳包,当backup收不到心跳包的时后,就认为MASTER出现了问题,接着backup之间会进行选举,谁的优先级高,谁就会成为master,当之前MASTER又恢复了,再次会把master状态接管回来

[root@server1 ~]# yum install  -y keepalived  下载keepalived软件,用keepalived实现高可用

[root@server1 ~]# cd /etc/keepalived/
[root@server1 keepalived]# ls
keepalived.conf   主配置文件
[root@server1 keepalived]# vim keepalived.conf   编辑配置文件
global_defs {
   notification_email {      通知邮件
        root@localhost  通知本地
}
   notification_email_from keepalived@localhost   邮件从那发过来
   smtp_server 127.0.0.1   邮件服务器,没有服务器,可用本机邮件profix
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict   禁掉此参数,不然会给iptables加上一个drop all的策略,会导致所有策略失效
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {      高可用阶段
    state MASTER    
    interface eth0   心跳包发送接口。可以eth0,或者eth1
    virtual_router_id 51  虚拟路由id ,确认那些主机是一组的
    priority 100   优先级 ,vrp里通过优先级来确认谁是master,数字越高优先级越高
    advert_int 1  心跳的频率 ,表示每隔1秒发一次
    authentication {
        auth_type PASS    心跳认证
        auth_pass 1111
    }
    virtual_ipaddress {      vip地址
        172.25.50.100
    }
}
virtual_server 172.25.50.100 80{      虚拟服务
    delay_loop 3   表示3秒对后端进行一次健康检查
    lb_algo rr   rr表示调度算法
    lb_kind DR  工作模式,我们是DR工作模式
    # persistence_timeout 50  持续调度到一个后端的时间,50秒后连接另一个后端,80端口不需要注释掉
    protocol TCP

    real_server 172.25.50.2 80 {     后端    可以定义多组后端服务
        weight 1   权重为1
        TCP_CHECK {    tcp检查
            connect_timeout 3
            nb_get_retry 3
           delay_before_retry 3
        }
    }
real_server 172.25.50.3 80 {    后端
        weight 1   权重为1
        TCP_CHECK {     tcp检查
            connect_timeout 3
            nb_get_retry 3
           delay_before_retry 3
        }
    }    
}   
后面的全部删除
[root@server1 keepalived]# ip addr del 172.25.50.100/32 dev eth0  删除vip,因为在keepalived已经设定好了
[root@server1 keepalived]# ipvsadm -C   -C表示刷掉全部策略
[root@server1 keepalived]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@server1 keepalived]# systemctl start keepalived.service  启动keepalived

启动keepalived之后策略已经全部自动加上了
在这里插入图片描述

[root@server3 ~]# systemctl stop httpd.service  如果现在停掉server3

当serve3挂掉后,server3就会从调度列表里自动取掉不会在去调度,从而实现对后台的健康检查,
还会有一份邮件
在这里插入图片描述

[root@server1 keepalived]# yun install mailx -y  安装邮件包
[root@server1 keepalived]# mail 查看邮件

在这里插入图片描述
做高可用:
实验环境再加一台虚拟机vm4

[root@server4 ~]# yum install -y ipvsadm keepalived  在server4上安装keepalived高可用套件
[root@server1 ~]# cd /etc/keepalived/   进入server1的keepalived配置文件
[root@server1 keepalived]# ls
keepalived.conf
[root@server1 keepalived]# scp keepalived.conf server4:/etc/keepalived/  将keepalived配置文件拷贝到server4上
[root@server4 ~]# cd /etc/keepalived/
[root@server4 keepalived]# ls
keepalived.conf
[root@server4 keepalived]# vim keepalived.conf    编辑配置文件

在这里插入图片描述

[root@server1 keepalived]# systemctl restart keepalived.service  重启服务
[root@server4 keepalived]# systemctl restart keepalived.service  重启服务
[root@server4 keepalived]# cat /var/log/messages  可以产看日志,是否启动有报错
[root@server1 keepalived]# systemctl stop keepalived.service  将server1上keepalived停掉
[root@server4 keepalived]# cat /var/log/messages  查看日志

在这里插入图片描述
在这里插入图片描述

[root@server1 keepalived]# systemctl start keepalived.service  sever1重新启动,
[root@server1 keepalived]# cat /var/log/messages  查看日志发现,server1又回重新接管,变成master

在这里插入图片描述
其他模式介绍:
NAT模式:NAT模式到达后端后,是原路返回到客户端的,而不是之间到达客户端
在这里插入图片描述
隧道模式:到达后端后直接返回客户端,不需要原路返回
在这里插入图片描述
内核模块:ip_vs
[root@server1 keepalived]# lsmod
在这里插入图片描述
自动添加上lvs内核模块,实现了负载均衡

keepalived 架构图:
在这里插入图片描述
watchDog 可以监控两个子进程,一旦那个进程挂了,可以重新启动,确保正常运行

虚拟服务可以添加多个,如下操作??

[root@server2 ~]# yum install -y vsftpd    server2 安装vsftpd
[root@server2 ~]# systemctl start vsftpd 启动
[root@server3 ~]# systemctl start vsftpd  server3 安装vsftpd
[root@server3 ~]# systemctl start vsftpd  启动
[root@server1 keepalived]# ipvsadm -A -t 172.25.50.100:21 -s rr
[root@server1 keepalived]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.50.100:21 rr
TCP  172.25.50.100:80 rr
  -> 172.25.50.2:80               Route   1      0          0         
  -> 172.25.50.3:80               Route   1      0          0         
[root@server1 keepalived]# ipvsadm -a -t 172.25.50.100:21 -r 172.25.50.2 -g
[root@server1 keepalived]# ipvsadm -a -t 172.25.50.100:21 -r 172.25.50.3 -g
[root@server1 keepalived]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.50.100:21 rr
  -> 172.25.50.2:21               Route   1      0          0         
  -> 172.25.50.3:21               Route   1      0          0         
TCP  172.25.50.100:80 rr
  -> 172.25.50.2:80               Route   1      0          0         
  -> 172.25.50.3:80               Route   1      0          0 

[root@server1 keepalived]# vim keepalived.conf 编辑配置文件,添加虚拟服务
vsftpd服务端口为21
在这里插入图片描述

[root@server1 keepalived]# systemctl reload keepalived.service  
[root@server1 keepalived]# systemctl restart keepalived.service  重启服务
[root@server1 keepalived]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.50.100:21 rr persistent 50  参数生效
  -> 172.25.50.2:21               Route   1      0          0         
  -> 172.25.50.3:21               Route   1      0          0         
TCP  172.25.50.100:80 rr
  -> 172.25.50.2:80               Route   1      0          0         
  -> 172.25.50.3:80               Route   1      0          0  

[root@server3 ~]# cd /var/ftp/pub/ 
[root@server3 pub]# touch server3   在server3 pub目录建立一个server3
[root@foundation50 ~]# lftp 172.25.50.100  客户端访问,始终调度在server3上,在50s内
lftp 172.25.50.100:~> ls                          
drwxr-xr-x    2 0        0               6 Jun 21  2018 pub
lftp 172.25.50.100:/> ls
drwxr-xr-x    2 0        0               6 Jun 21  2018 pub
lftp 172.25.50.100:/> cd pub/
lftp 172.25.50.100:/pub> ls
-rw-r--r--    1 0        0               0 Dec 04 14:56 server3  

FULLNAT模式:企业最常用模式
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小莫细说linux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值