joozh 发表于 2015-9-4 09:42:47

【转贴】lvs负载均衡+keepalived高可用性配置详解

国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html
内部邀请码:C8E245J (不写邀请码,没有现金送)
国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元。   

------------------------------------------------------------------------------------------------------------------------------------------------------------------  
  
  一: 一些名词解释 (利用下面的拓扑来理解名词)
  
      1; VIP: Virtual IP(虚拟ip, 主要是提供用户进行访问的);
      2; RIP: REAL SERVER IP(真实服务器ip, 主要是提供服务的, 主要的服务器有http服务器);
      3; CIP: CLIENT IP(客户端ip, 用来访问虚报ip);
      4; DIP: DEVICE IP(设备的ip, 作为REAL SERVER的Gateway, 这个最好也是用虚拟ip, 这个ip是在nat模式下才使用, 配置nat模式最好使用两张网卡);
      5; DIRECTOR: 调度器(是指安装ipvsadm的那台机器);
      6; RS: REAL SERVER(真实的服务器, 里面有安装服务器, 比如web, mail等等;)
        
  
  
  二: lvs的三种模式(按照出现的时间顺序来排列);
      1; nat模式 (回复包要经过DIRECTOR, 这种模式最早出现, 最成熟, 但是调度器是瓶颈,所以这个模式现在比较少用; tunneling模式和直接路由模式是后来为了解决某些问题而出现的);            
      2; tunneling模式;(回复包不需要经过DIRECTOR, 这种模式只要调度器和真实服务器的路由可达即可, 所以应用起来比较广, 回复包的时候直接通过各自的路由器出去, 所以比较方便配置, 只要realserver支持tunneling即可)
      3; 直接路由模式;(回复包不需要经过DIRECTOR, 这种模式要求RS与DIRECTOR中间不能用路由器隔开, 回为这个模式只改变目标的mac地址)
  
  三: lvs的十种算法;
      1; 四种静态算法(假设服务器为a, b, c! 后面的数字代表服务器的权重);
  
  1: rr: abc, abc, abc
  2: wrr: a3b2c1, aababc aababc
           3: dh: 目标hash;(根据目标地址选择服务器)
  4: sh: 源hash;(根据源地址选择服务器)
  
      2; 六种动态算法;
  1: lc: ci最小, (ci指established状态的数量)处理能力比较强的计算机就一直回复;
  2: wlc: ci/wi最小, (wi指weight的值)针对处理能力强的计算机weight调大一点;
  3: lblc: 基于wlc, cache, 如果有一台已经跟服务器在连接, 那就一直使用这一台;如果负载太重(ci>wi), 则wlc选择一台, 就一直这台;
  4: lblcr: 基于lblc, 只是cache集群;如果每台负载都过重, wlc选一台; 如果一台没有用, remove掉;
  5: sed: (ci+1)/wi最小;一开始就把weight用上;
  6: nq: 基于sed选一台, 如果没过载, 一直就这台, 有过载, 再使用sed再选一台;(ci>wi)
  
  
  四: 需要实现的目标;
  1; 用户访问192.168.2.149, 192.168.2.149把服务请求一会儿转发到192.168.2.31, 一会儿转发到192.168.2.32;
      DIRECTOR: 192.168.2.23(VIP 192.168.2.149)
      REAL SERVERS: 192.168.2.31(lo:0 192.168.2.149)
  
  à      把上面的需要用三种模式各实现一遍, 调试算法使用wrr;
  
  
  
  
  2; 使用两台机器192.168.2.23(DIRECTOR MASTER)和192.168.2.31(DIRECTOR BACKUP)作为调试器; 使用192.168.2.20, 192.168.2.21, 192.168.2.22, 192.168.2.31, 192.168.2.32作为真实服务器;
      DIRECTOR: 192.168.2.23, 192.168.2.31(VIP 192.168.2.149)
      REAL SERVERS: 192.168.2.21, 192.168.2.20, 192.168.2.22, 192.168.2.31, 192.168.2.32(lo:0 192.168.2.149);
  
  
  五: 第一个目标的实现;
  1; DIRECTOR的配置;
  1; 安装lvs软件ipvsadm; (确认有ip_vs模块, 使用lsmod | grep ip_vs)
  apt-get install ipvsadm
      2; 配置虚拟ip;
         ifconfig eth1:1 192.168.2.149 netmask 255.255.255.255 up
         route add –host 192.168.2.149 dev eth1:1
      3; 配置负载均衡(使用dr模式, 调度算法为wrr, weight统一配置成5);
         ipvsadm –A –t 192.168.2.149:80 –s wrr
         ipvsadm –a –t 192.168.2.149:80 –r 192.168.2.31:80 –g –w 5
         ipvsadm –a –t 192.168.2.149:80 –r 192.168.2.32:80 –g –w 5
  
      2; 真实服务器的配置(要注意arp问题, 分别在192.168.2.31和192.168.2.32上配置);
         1; 配置虚拟ip;
           ifconfig lo:0 192.168.2.149 netmask 255.255.255.255 up
           route add –host 192.168.2.149 dev lo:0
         2; 抑制arp广播;
           echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
           echo 0 > /proc/sys/net/ipv4/conf/lo/rp_filter
           echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
           echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
           echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
           echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  
  六: 第二个目标的实现;
  1; DIRECTOR的配置(上面那个主要实现的是负载均衡, 这个主要实现的高可用性的配置, 这个是在192.168.2.23上的配置, 192.168.2.31只需要改变两个地址即可, 下面有注释);
      1; 高可用性软件的安装keepalived;
        apt-get install keepalived
         2; keepalived主要的配置文件如下(keepalived.conf)
           ! configuration file for keepalived
  global_defs {
        notification_email{
                  361589194@qq.com
        }
        notification_email_from 361589194@qq.com
        smtp_server smtp.163.com
        router_id lvs_director #邮件通知的标识, keepalived的日志文件在/var/log/syslog, 可以在这个文件查看状态即可;
  }
  
  vrrp_instance V1{
        state MASTER #在192.168.2.31配置为BACKUP
        interface eth1
        lvs_sync_daemon_interface eth1
        virtual_router_id 51   #虚拟路由的标识, 必须与BACKUP一样;
        priority 150 #在192.168.2.31配置为100(一般来说要小t50);
        advert_int 5
        authentication {
                  auth_type PASS
                  auth_pass 1111
        }
        virtual_ipaddress {
                  192.168.2.149
                 }
  }
  
  virtual_server 192.168.2.149 80 {
        delay_loop 10#ping的超时时间;
        lb_algo wrr
        lb_kind DR
        #persistence_timeout 10 #这个是配置持久性连接的, 如果配置这个, 那要预防单台的突发性连接;
        protocol TCP
        real_server 192.168.2.20 80 {
                  weight 100
                  TCP_CHECK {
                          connect_timeout 10 #检测80的端口的超时时间;
                          nb_get_retry 3 #重试次数
                          delay_before_retry 3 #重试的延时
                          connect_port 80
                  }
        }
        real_server 192.168.2.22 80 {
                  weight 100
                  TCP_CHECK {
                          connect_timeout 10
                          nb_get_retry 3
           delay_before_retry 3
                          connect_port 80
                  }
        }
        real_server 192.168.2.21 80 {
                  weight 100
                  TCP_CHECK {
                          connect_timeout 10
                          nb_get_retry 3
                          delay_before_retry 3
                          connect_port 80
                  }
        }
        real_server 192.168.2.30 80 {
                  weight 100
                  TCP_CHECK {
                          connect_timeout 10
                          nb_get_retry 3
                          delay_before_retry 3
                          connect_port 80
                  }
        }
        real_server 192.168.2.32 80 {
                       weight 100
                  TCP_CHECK {
                          connect_timeout 10
                          nb_get_retry 3
                          delay_before_retry 3
                          connect_port 80
                  }
        }
        real_server 192.168.2.32 80 {
                  weight 100
                  TCP_CHECK {
                          connect_timeout 10
                          nb_get_retry 3
                          delay_before_retry 3
                          connect_port 80
                  }
        }
  }
         3; 启动keepalived;
           /etc/init.d/keepalived restart
      2; 真实服务器的配置与上面lvs的配置一样, 每台都要配置;
  
  六: 配置lvs或者lvs+keepalived需要注意的问题;
     1; 使用client机器ping一下虚拟ip(ping 192.168.2.149), 使用arp –n查看192.168.2.149的mac地址, 必须与调度器的mac地址一样, 如果不一样, 那就是真实服务器的欺骗了交换机, 调度器就失去了作用;
      2; tunnel模式的配置需要在真实服务器配置tunnel接口地址;
         ifconfig tunl0 192.168.2.149 netmask 255.255.255.255 up(同时如果在同一个局域网里面测试, 也要预防arp欺骗)
      3; nat模式下, 真实服务器基本不需要配置什么, 只需要把网关指向DIP即可;
  
  作者: whzhuang
  日期: 2013/4/20
  版本: first release
  
  参考网站:
  1; iyunv的lvs标签推荐博客; http://blog.iyunv.com/tagindex.php
  2; lvs的英文官方网站; http://www.linuxvirtualserver.org/
  3; lvs的中文官方网站; http://zh.linuxvirtualserver.org/
  4; arp问题的解决(教授亲自出手指点); http://zh.linuxvirtualserver.org/node/225
  4; lvs初学必看; http://os.iyunv.com/art/201202/319979.htm
页: [1]
查看完整版本: 【转贴】lvs负载均衡+keepalived高可用性配置详解