lvs

LVS负载均衡实践

如果一台服务器承受过多的压力,服务器就会崩溃,所以应该让一台服务器承受的压力应该在合理的范围内,如果要压力大一些,一台服务器可能就无法满足需求,所以可以用多台服务器分摊压力,当一定数量的服务器作为一个整体对外提供服务,并且分担压力时,这些服务器称为“负载均衡集群”。
使用lvs可以实现“负载均衡集群”。lvs是linux虚拟服务器。
调度器根据自己的调度算法决定将该请求发送给后端的某台Web服务器,lvs有多种模式,在不同模式下lvs实现负载均衡的方式也不同。
比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。
最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户。

NAT
“网络地址转换”

DR模式
真机 ip 172.25.254.1 客户端
server1 172.25.1.66 作为lvs服务器
server2 172.25.1.67 服务器
server3 172.25.1.68 服务器

在server1上

yum install ipvsadm ##安装ipvsadm软件
ipvsadm -A -t 172.25.1.100:80 -s rr  ##-A添加 -t 添加vip虚拟ip和端口 -s算法 rr轮询
ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.67:80 -g ## -a 添加节点-r 后面添加真实ip rip 
ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.68:80 -g
可以使用如下命令查看添加的命令
ipvsadm -ln
在网卡上添加一个vip
ip addr add 172.25.1.100/24 dev ens3

在server2和3上下载httpd服务(实验观察方便)
在两台机子上都添加一个ip为100的虚拟ip

ip addr add 172.25.1.100/32 dev ens3 ##32代表广播地址  ens3是网卡名(按实际情况填写)

直接在真机使用curl 172.25.1.100进行寻址,进行查看httpd服务中写的标记,有可能直接进行轮询,有可能只能找到一个地址
比如:

[root@foundation1 images]# curl 172.25.1.100
server3
[root@foundation1 images]# curl 172.25.1.100
server2
[root@foundation1 images]# curl 172.25.1.100
server3
[root@foundation1 images]# curl 172.25.1.100
server2
[root@foundation1 images]# curl 172.25.1.100
server3
[root@foundation1 images]# curl 172.25.1.100
server2
[root@foundation1 images]# curl 172.25.1.100
server3

[root@foundation1 images]# curl 172.25.1.100
server3
[root@foundation1 images]# curl 172.25.1.100
server3
[root@foundation1 images]# curl 172.25.1.100
server3
[root@foundation1 images]# curl 172.25.1.100
server3
[root@foundation1 images]# curl 172.25.1.100
server3
[root@foundation1 images]# curl 172.25.1.100
server3
[root@foundation1 images]# curl 172.25.1.100
server3

这两种情况,如果做到这一步就可以进行轮询那有可能是因为寻址的时候直接访问到server1中,但是如果将一开始的地址删除掉,

arp -d 172.25.1.100

那么有很大概率出现第二种情况,如何进行进一步的改进

在server2和3中下载
yum install arptables服务
在server2中设置

arptables -A INPUT -d 172.25.1.100 -j DROP ##在input表中听到广播地址的时候不响应。
arptables -A OUTPUT -s 172.25.1.100 -j mangle --mangle-ip-s 172.25.1.67 ##如果响应的时候将地址转到67

当一个后端不工作了以后还是会使用轮询方式工作,这就让有时候打不开网页。如何使坏掉的后端不轮询,需要安装一个软件ldirectord-3.9.5-3.1.x86_64.rpm ,这个软件直接安装不了,需要在yum源中加入HighAvailability模块,这个模块在安装包中,在yum源中这样添加。

[HighAvailability]
name=HighAvailability
baseurl=file:///mnt/addons/HighAvailability
gpgcheck=0

再安装,再将/usr/share/doc/ldirectord-3.9.5/ldirectord.cf文件复制到/etc/ha.d/下进行修改。

 cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/

文件中

checktimeout=3 
checkinterval=1 ##刷新时间
autoreload=yes ##自动剔除
quiescent=no ##将后端服务自动卸载
 ##上面这些都是写好的一般不用动,修改下面这些
virtual=172.25.1.100:80  ##vip地址
        real=172.25.1.67:80 gate ##rip
        real=172.25.1.68:80 gate
####将下面两个注释掉,不然轮询可能会出问题
 #receive="Test Page"
 #virtualhost=www.x.y.z

全部修改完成后

ipvsadm -C ##将原来写入的规则全部清除
systemctl start ldirectord ##全部完成后启动ldirectord服务,

接着可以在server1中下载httpd服务写入一些文件做标记,当后端两台服务器挂掉后lvs服务器还可以顶替一段时间。
两台后端服务器中设置和最开始的一样,

下面就可以进行测试了
“”"

[root@foundation1 images]# curl 172.25.1.100
server3
[root@foundation1 images]# curl 172.25.1.100
server2
[root@foundation1 images]# curl 172.25.1.100
server3
[root@foundation1 images]# curl 172.25.1.100
server2
[root@foundation1 images]# curl 172.25.1.100
server3

“”" ##这样还是可以进行轮询

如果一个服务器宕机

[root@foundation1 images]# curl 172.25.1.100
server2
[root@foundation1 images]# curl 172.25.1.100
server2
[root@foundation1 images]# curl 172.25.1.100
server2
[root@foundation1 images]# curl 172.25.1.100
server2
[root@foundation1 images]# curl 172.25.1.100
server2

##只会找到可以使用的服务器

如果两个都宕机

[root@foundation1 images]# curl 172.25.1.100
server1
[root@foundation1 images]# curl 172.25.1.100
server1
[root@foundation1 images]# curl 172.25.1.100
server1
[root@foundation1 images]# curl 172.25.1.100
server1

##lvs服务器会进行顶替

KeepAlived高可用性集群
server1为主lvs服务器server4为副lvs服务器
在server1和4上下载KeepAlived软件。
tar zxf keepalived-2.0.19.tar.gz ##解压文件
进入文件夹内部,
./configure --prefix=/usr/local/keepalived --with-init=systemd ##使用这个命令解决依赖性。
根据提示一步步走。
应该要安装gcc和 openssl-devel。
yum install gcc openssl-devel -y
make &&make install进行编译并安装
设置软连接方便使用

ln -s /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
n -s /usr/local/keepalived/sbin/keepalived /sbin/

更改主配置文件
vim /etc/keepalived/keepalived.conf

server1和4的主配置文件内部参数有些不同

global_defs {
   notification_email {
     root@localhost					##节点宕机给谁发送邮件 ,localhost指代本地用户,到企业中也可以填写企业邮箱
   }
   notification_email_from keepalived@localhost		##发送人名称
   smtp_server 127.0.0.1				##发送服务器(本机)
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict						##注释掉,不然会有问题
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER			##主节点
    interface ens3
    virtual_router_id 51		##每个人的都不能一样,不然会出问题
    priority 100                        ##两台机器的数字不能一样要不然两台机器会抢主位置,指的是先后性,100最大
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.1.100			##VIP
    }
}

virtual_server 172.25.1.100 80 {
    delay_loop 3			##当rs报错时,尝试多少次之后才邮件告知
    lb_algo rr
    lb_kind DR				##DR模式
    #persistence_timeout 50             ##会话保持时间 将这个注释掉,不然不轮询
    protocol TCP

real_server 172.25.1.68 80 {
        TCP_CHECK {
        weight 1
            connect_timeout 3
            connect_port 80
        }
    }
    real_server 172.25.1.67 80 {
        TCP_CHECK {
        weight 1
            connect_timeout 3
            connect_port 80
        }
    }
}

两台机器的主配置文件更改完成后启动keepalived软件。在主lvs服务器中查看
ip addr show
ipvsadm -ln
ip加上去了,规则也加上去了,但是在副lvs服务器中都不会出现,如果将主lvs服务器的keepalived软件停止后,副lvs服务器的ip和规则都会出现,这样服务依然生效,如果主lvs服务器重新开机那ip将重新回到主lvs服务器上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值