zoukankan      html  css  js  c++  java
  • LVS

    lvs-linux虚拟化服务器;
    lvs集群采用IP负载均衡技术和基于内容分发机制;
    一:是通过IPVS模块实现的
    二:集群采用的是 三层结构

    A、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
    B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
    C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

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

    nat:网络地址转移; masq 参数 -m
    tun:IP隧道技术实现虚拟服务器; ipip 参数 -i
    DR:直接路由实现虚拟服务器; gate 参数 -g

    四:负载算法

    1、轮叫调度 rr
    将外部请求按顺序1:1分配到真实server 上;
    2、加权轮叫调度 wrr
    根据不同的处理能力来调度请求;
    3、最少链接调度 lc
    动态的将请求调度到已经建立最少连接的服务器上;
    4、加权最少连接调度 wlc 
    优先级的最少连接;

    五:安装配置

    安装依赖:
    # yum install gcc gcc-c++ popt openssl-devel popt-devel libnl libnl-devel kernel-devel -y 
    # yum install ipvsadm -y

      1、查看 lvs规则表

    # ipvsadm -Ln

    2、IPVS 调度状态:

    # ipvsadm Lnc

      3、添加虚拟服务

    示例: 虚拟IP 负载算法
    # ipvsadm -A -t ip:port -s rr
    # ipvsadm -A -t ip:port -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隧道模式
    -a 在虚拟服务中添加一台真实服务器
    -w 设置权重
    -m 设置工作模式 NAT 地址转换;
    { rr 轮询算法 wrr 加权轮询算法 w 要设置权重 可以直接根数字}
    
    # ipvsadm -d -t 172.27.27.89:80 -r 172.27.27.74:80
    -d 删除虚拟服务提供的真实服务器
    
    保存设置
    # service ipvsadm save
    # /etc/init.d/ipvsadm start 
    也可以直接编辑/etc/sysconfig/ipvsadm 文件添加;
    # ipvsadm -A -t VIP:0 -s rr
    # 设置当客户端访问服务器VIP的任意端口都可以被调度至后端的real server

      5、ipvsadm 配置示例

    ipvsadm -A -t 172.16.2.10:80 -s rr 
    ipvsadm -a -t 172.16.2.10:80 -r 172.16.2.17:80 -g
    ipvsadm -a -t 172.16.2.10:80 -r 172.16.2.18:80 -g
    ipvsadm -a -t 172.16.2.10:80 -r 172.16.2.15:80 -g
    ipvsadm -a -t 172.16.2.10:80 -r 172.16.2.16:80 -g
    
    查看状态 service ipvsadm save service ipvsadm restart ipvsadm
    -L -n

    查看LVS的连接情况:ipvsadm -L -n
    查看LVS的吞吐量情况: ipvsadm -L -n --rate
    查看LVS的统计信息:ipvsadm -L -n --stats
    实时查看LVS连接状态变化: watch ipvsadm -ln

      6、 ipvs 查看链接状态

    [root@localhost ~]# ipvsadm -Ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port Forward Weight ActiveConn InActConn
    TCP 172.16.2.10:80 rr
    -> 172.16.2.15:80 Route 3 0 0 
    -> 172.16.2.16:80 Route 3 0 0 
    -> 172.16.2.17:80 Route 3 0 0 
    -> 172.16.2.18:80 Route 3 0 0 


    六、keepalived 路由热备软件
      主要通过VRRP功能 解决静态路由出现单节点故障问题;
      Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除;

    # yum install keepalived -y

      实例配置:

    # /etc/keeplived/keepalived.conf

    可以分为三部分
      1、全局设置定义:告警机制
      2、VRRP示例部分; 配置 state MASTER主机
      3、real server 设置;配置服务节点;

    keepalived 配置示例:
    [root@localhost ~]# cat /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
    
    global_defs {
    notification_email {
    haikun@eastmoney.com # 后端负载警告邮件
    }
    notification_email_from Keepalived@localhost
    smtp_server 127.0.0.1
    smtp_connect_timeout 60
    router_id LVS_DEVEL
    }
    
    vrrp_instance VI_1 {
    state MASTER # 备用设置 backup 主机安装默认是master
    interface eth2
    virtual_router_id 121
    priority 110
    # 在相同的VRID 组中优先级高的为主设备
    # master 可以设置为110 backup 可以设置 110 以下 
    advert_int 1
    authentication {
    auth_type PASS # 验证密码 
    auth_pass SJFW
    }
    virtual_ipaddress {
    # 10.205.202.* 
    172.16.2.10 # 设置虚拟IP 
    }
    }
    virtual_server 172.16.2.10 80 {
    
    delay_loop 6
    lb_algo rr # 轮叫调度
    lb_kind DR # 直连路由模式
    
    # persistence_timeout 50 # 网页延时时间
    protocol TCP # TCP 协议

    ### 后端负载机器示例: 可以以此添加;

    real_server 172.16.2.15 80
    weight 3
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    
    real_server 172.16.2.16 80 {
    weight 3
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    
    real_server 172.16.2.17 80 {
    weight 3
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    
     

      配置完成 启动

    /etc/keepalived/keepalived start
    (当重启ipvsadm了 时 一定要重启 keepalived ;)
    # 设置启动程序为系统开机自启;
    # chkconfig on ipvsadm 
    # chkconfig on keepalived

      # ip addr show 查看虚拟IP加载

    [root@localhost ~]# ip addr
    
    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: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:0c:29:31:5c:9d brd ff:ff:ff:ff:ff:ff
    inet 172.16.2.11/16 brd 255.255.255.0 scope global eth1
    inet6 fe80::20c:29ff:fe31:5c9d/64 scope link 
    valid_lft forever preferred_lft forever
    3: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:0c:29:31:5c:a7 brd ff:ff:ff:ff:ff:ff
    inet 172.16.2.12/24 brd 255.255.255.0 scope global eth2
    inet 172.16.2.10/32 scope global eth2
    inet6 fe80::20c:29ff:fe31:5ca7/64 scope link 
    valid_lft forever preferred_lft forever

    Nginx 设置
      1、安装nginx (或者其他web服务器)
      设置一个站点页面

    cat vi /opt/nginx/conf/nginx.conf
    events { worker_connections
    10240; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name 172.16.2.15; location / { root /opt/nginx/server index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }


    Linux 后端机器注意:

      设置修改内核;(定义添加虚拟IP )

    1、添加VIP 设置 arp_announce和arp_ignore 这两个参数;
    
    # 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 #第一个进程名,后边设置自动时会用到

      内核修改生效
      # sysctl -p 执行重新加载 sysctl.conf

      2、也可以设置一个 vip设置脚本

    #!/bin/bash 
    VIP=172.16.2.15
    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
  • 相关阅读:
    MySQL复制的管理和维护
    error nr.1045 access denied for user 'root'@'localhost' (using passwd:no)
    MYSQL-使用mysqldump创建数据库快照
    ConcurrentBag同线程元素的添加和删除
    bootstrap源码学习与示例:bootstrap-tab
    Docker 私有仓库最简便的搭建方法
    使用Apache Jmeter进行并发压力测试
    cmd隐藏指定文件
    Bootstrap之BootstrapDialog
    全栈工程师的武器——MEAN(转)
  • 原文地址:https://www.cnblogs.com/sharesdk/p/8794770.html
Copyright © 2011-2022 走看看