lvs-linux虚拟化服务器;

lvs集群采用IP负载均衡技术和基于内容分发机制;

一:是通过IPVS模块实现的;

二:集群采用的是 三层结构

    A、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。

    B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。

    C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

三:IPVS实现负载均衡有3中方式;

    nat:网络地址转移;    real=192.168.15.2:80 masq  参数 -m

    tun:IP隧道技术实现虚拟服务器; ipip   参数 -i

    DR:直接路由实现虚拟服务器;   gate   参数 -g

四:负载算法;

    1、轮叫调度 

    将外部请求按顺序1:1分配到真实server 上;

    2、加权轮叫调度

    根据不同的处理能力来调度请求;

    3、最少链接调度

    动态的将请求调度到已经建立最少连接的服务器上;

    4、加权最少连接调度

    优先级的最少连接;

五:安装配置

# yum install ipvsadm -y

1、查看 lvs规则表

# ipvsadm -Ln

2、IPVS 调度状态:

# ipvsadm Lnc

3、添加虚拟服务

# ipvsadm -A -t 172.27.27.89:80 -s rr

# ipvsadm -A -t 172.27.27.89:80 -s wrr

# ipvsadm -S >/tmp/ipvs.bak   备份导出

#  ipvsadm -C  清除规则

#  ipvsadm -R </tmp/ipvs.bak   还原导入

    -A 添加虚拟服务   -E 编辑修改  -D 删除  -C 清空规则;

    -t 使用tcp 协议后跟端口

    -u UDP 协议

    -s LVS 采用的调度算法

    -r 设置真实服务器跟端口信息


4、在虚拟服务添加真实服务器

# ipvsadm -a -t 172.27.27.89:80 -r 172.27.27.74:80 -g

    -g DR直连路由   -i TUN隧道模式 -m 设置工作模式 NAT 地址转换;

    -a 在虚拟服务中添加一台真实服务器

    -w 设置权重

{  rr 轮询算法  wrr 加权轮询算法  需要设置权重 }


# ipvsadm -d -t 172.27.27.89:80 -r 172.27.27.74:80

    -d 删除虚拟服务提供的真实服务器

# service ipvsadm save

# sysctl -p 重新加载 sysctl.conf

# ipvsadm -A -t VIP:0  -s rr

# 设置当客户端访问服务器VIP的任意端口都可以被调度至后端的real server

查看LVS的连接情况:ipvsadm -L -n

查看LVS的吞吐量情况: ipvsadm -L -n --rate

查看LVS的统计信息:ipvsadm -L -n --stats

实时查看LVS连接状态变化: watch ipvsadm -ln


六:keepalived 路由热备软件

主要通过VRRP功能 解决静态路由出现单节点故障问题;

    Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除;


七:安装配置 

Lvs + keepalived + nginx_Lvs  keepalived


# yum install -y  yum install gcc gcc-c++ popt openssl-devel popt-devel libnl libnl-devel kernel-devel ipvsadm 

# yum install keepalived -y 

1/实例配置:

# /etc/keeplived/keepalived.conf

可以分为三部分;

1、全局设置定义:告警机制

2、VRRP示例部分; 配置 state MASTER主机

3、real server 设置;配置服务节点;


[root@VM ~]#cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

   notification_email {

     acassen@firewall.loc

     failover@firewall.loc

     sysadmin@firewall.loc

   }

   notification_email_from Alexandre.Cassen@firewall.loc

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_Master

}

vrrp_instance VI_1 {

    state BACKUP

# 备用设置 backup     主机安装默认是master

    interface eth0

    virtual_router_id 51

    priority 90

# 在相同的VRID 组中优先级高的为主设备

# master 可以设置为100 

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        172.27.10.100/24 dev eth0 label eth0:1        

# 虚拟IP 地址

    }

}

virtual_server 172.27.10.100 80 {

# 虚拟 IP 

    delay_loop 6

    lb_algo rr     

# 轮询

    lb_kind DR   

# lvs 模式

#    nat_mask 255.255.255.0

#    persistence_timeout 50

    protocol TCP

    real_server 172.27.10.11 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            connect_port 80

        }

    }

    real_server 172.27.10.12 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

            connect_port 80

        }

    }

}


ip addr show  可以查看配置信息;

# ip addr show 

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    inet6 ::1/128 scope host 

       valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 08:00:27:48:2c:d2 brd ff:ff:ff:ff:ff:ff

    inet 172.27.27.75/24 brd 172.16.15.255 scope global eth0

    inet 172.27.27.89/24 scope global eth0

    inet6 fe80::a00:27ff:fe48:2cd2/64 scope link 

       valid_lft forever preferred_lft forever


 

[root@lvs ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  172.27.27.89:80 rr

  -> 172.27.27.74:80             Route   1      0          0         

  -> 172.27.27.75:80             Route   1      0          0  


八;

Nginx 设置;

1、安装nginx(或者其他web服务器)

  设置一个站点页面;

# vi /opt/nginx/conf/nginx.conf

events {

    worker_connections  1024;

}


http {

    include       mime.types;

    default_type  application/octet-stream;


    sendfile        on;

    keepalive_timeout  65;


    server {

        listen       80;


        server_name  172.16.15.150;


        location / {

             root   /opt/nginx/server

            index  index.html index.htm;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

 

3、添加VIP 设置 arp_announce和arp_ignore 这两个参数;

# touch /etc/init.d/lvsvip.sh

# chmod 755 lvsvip.sh

# /etc/init.d/lvsvip.sh start


# cat lvsvip.sh

# arp_ignore

# 1 -- 只有ARP请求数据包所请求的IP地址属于当前网卡的IP地址,才会回应ARP响应数据包。

# 2 -- 除了满足1的条件外,还要满足ARP请求数据包的发送方IP地址也属于当前网卡所属子网,这样才会回应ARP响应数据包。

# 3 -- 如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。

# 4~7 -- 保留

# 8 -- 即使ARP请求数据所请求的IP地址属于任何一个本地地址,也不回应ARP响应数据包。


#add for chkconfig  

#chkconfig: 2345 70 30  #234都是文本界面,5就是图形界面X,70启动顺序号,30系统关闭,脚本  

#止顺序号  

#description: RealServer's script  #关于脚本的简短描述  

#processname: realserver.sh       #第一个进程名,后边设置自动时会用到  

#!/bin/bash  

VIP=172.16.15.150  

source /etc/rc.d/init.d/functions  

case "$1" in  

start)  

       ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP  

       /sbin/route add -host $VIP dev lo:0  

       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore  

       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce  

       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore  

       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce  

       echo "RealServer Start OK"  

       ;;  

stop)  

       ifconfig lo:0 down  

       route del $VIP >/dev/null 2>&1  

       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore  

       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce  

       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore  

       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce  

       echo "RealServer Stoped"  

       ;;  

       *)  

       echo "Usage: $0 {start|stop}"  

       exit 1  

esac  

exit 0

好记力不如个烂笔头 何况我记忆力都不咋的  多年前随笔记记 以后看看