天天看点

lvs

负载均衡 LVS

三种(应该是四种)负载均衡技术:不具备抗攻击能力

lvs
lvs

 VS/NAT (通过NAT实现虚拟服务器) 压力都在调度器上 调度器输入内网的数据包会源路返回到外网  对后端的realserver 没有要求只要提供服务就行了

 VS/TUN(隧道模式 在原有的模式下继续做封装缺点:数据包过大)(通过IP隧道实现虚拟服务器)成本高 可支持广域网

 VS/DR(后端可以挂一百个服务器速度快)(通过直接路由实现虚拟服务器) 必须在内网(在同一个物理网络)

生产环境中主要用第四种:FullNAT(跨WELN)

redhat6:自带10种内核连接调度算法

lvs

VS/DR: (核心 更改mac地址 不支持回包)

调度机器:

首先安装一服务:确认一下

ipvsadm -l

ip addr add 172.25.42.130 (vip)

lvs

ipvsadm -A -t 172.25.42.130:80 -s rr (rr:论寻算法)

ipvsadm -a -t 172.25.42.130:80 -r 172.25.42.17:80 -g

ipvsadm -a -t 172.25.42.130:80-r 172.25.42.18:80 –g

lvs

/etc/init.d/ipvsadm save

realserver1(dd8.example.com) 用apache测试  //对外不响应

yum install httpd -y

/etc/init.d/httpd start

cd /var/www/html

vim index.html

<h1>dd8.example.com</h1>

ipaddr add 172.25.42.130/32 dev eth0

realserver2(dd9.example.com)

<h1>dd9.example.com</h1>

ip addr add 172.25.42.130/32 dev eth0

如果只做上述操作,发现调度机不起作用

在物理机上:arp -an 172.25.42.130

            arp -d 172.25.42.130

            ping 172.25.42.130

            arp -an 172.25.42.130

会发现,两次IP的mac地址不一样,因为调度机,两台realyserver 上面都有172.25.42.130 这个IP 也就是说这三个相同的IP有三个不同的mac地址 此时ping 这个IP 只会随机选择一个

在 real server上:arptable(arp 防火墙)//此实验中 主要是为了屏蔽real server 上面的vip的mac

yum install arptables_jf.x86_64 -y

arptables -A IN -d 172.25.42.130 -j DROP (对外不发布172.25.42.130)

arptables -A OUT -s 172.25.42.130 -j mangle --mangle-ip-s 172.25.42.17 (谁用 172.25.42.130 访问我 我所回应的都是 172.25.42.17)//一个mac可以对应多个ip,在real server 里面不让vip用这个mac

lvs

arptables -A IN -d 172.25.42.130 -j DROP

arptables -A OUT -s 172.25.42.130 -j mangle --mangle-ip-s 172.25.42.17

lvs
lvs
lvs

对后台服务器不具备健康检查:

其中一台real server 的httpd服务关闭

在调度服务器中,发现调度器依然会正常调度:

此时,在物理机上测试:curl:172.25.42.130

优化:(加上健康检查)

调度机:ipvsadm –C

lvs

在heartbeat 的前提下(找一个已经安装过的软件包)

cd /etc/ha.d

rpm -qd ldirectord

cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf .

lvs

vim ldirectord.cf

lvs

# Sample for an http virtual service

virtual=172.25.42.130:80

        real=172.25.42.17:80 gate  //real server ip

        real=172.25.42.18:80 gate  //real server ip

        fallback=127.0.0.1:80 gate //realserver 全部挂掉 调度机器(本机)去顶替

        service=http

        scheduler=rr

        #persistent=600       //与存储或数据库等长久需要保持连接的设置有关 

        #netmask=255.255.255.255

        protocol=tcp

        checktype=negotiate

        checkport=80

        request="index.html"

#       receive="TestPage"   

#       virtualhost=www.x.y.z

/etc/init.d/ldirectord start

lvs

测试:

lvs

关掉real server 的httpd

lvs
lvs
lvs
lvs
lvs
lvs
lvs

heartbeat+ldirectord+lvs:(两台已经做好 heartbeat的虚拟机)

调度机器1:/etc/init.d/ldirectord stop

ipvsadm -C

/etc/init.d/httpd stop

ip addr del 172.25.42.130/24 dev eth0 //因为交给集群来做 不需要手动开启和人为干预

vim haresources

dd6.example.com IPaddr::172.25.42.130/24/eth0 ldirectord httpd

lvs

scp ldirectord.cf haresources [email protected]:/etc/ha.d/

/etc/init.d/heartbeat start (两台都做此操作)

real server (手动开启httpd服务)

两台调度机互相切换:

dd6.example.com:/etc/init.d/heartbeat stop

lvs
lvs
lvs
lvs
lvs

服务健康切换:

lvs
lvs

keepalived+lvs:(/etc/init.d/heartbeat stop)

1.安装keepalived (keepalived 自带健康检查)

./configure --prefix=/usr/local/keepalived  //源码编译

make && make install

2.(两台调度机都做)

/etc/init.d/heartbeat stop

ln-s/usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

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

ln-s /usr/local/keepalived/etc/keepalived /etc

cd /usr/local/keepalived

cd sbin

ln -s /usr/local/keepalived/sbin/keepalived /sbin

chmod+x /usr/local/keepalived/etc/rc.d/init.d/keepalived

cd /usr/local

scp -r * [email protected]:/usr/local

cd /etc/keepalived

vim keepalived

yum install mailx -y

/etc/init.d/keepalived start

增加服务 vsftpd

/etc/init.d/keepalived stop

real server :yum install vsftpd -y

vim /etc/keepalived/keepalived

! Configuration File for keepalived

global_defs {

   notification_email {

     root@localhost

   }

   [email protected]

   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 eth0

    virtual_router_id 142

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        172.25.42.150

        172.25.42.160

virtual_server 172.25.42.150 80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

   # persistence_timeout 50

    protocol TCP

    real_server 172.25.42.12 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    real_server 172.25.42.13 80 {

            connect_timeout 3

virtual_server 172.25.42.160 21 {

    persistence_timeout 50

    real_server 172.25.42.12 21 {

            nb_get_retry 3

    real_server 172.25.42.13 21 {

增加虚拟ip:

real server :

ip addr add 172.25.42.140

arptables -A IN -d 172.25.42.140 -j DROP

arptables -A OUT -s 172.25.42.140 -j mangle --mangle-ip-s 172.25.42.140

keepalived 与 heartbeat 相比takeover速度非常快 几乎没有时间的延迟

我们可以在两台机器上面 ipvsadm -l 看到 不管这台机器是不是主调度器 上面都会有调度信息

lvs
上一篇: niginx安装
下一篇: msql多表查询

继续阅读