设为首页 收藏本站
查看: 991|回复: 0

[经验分享] linux集群之DR模型的配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-10-31 08:59:04 | 显示全部楼层 |阅读模式
LVS集群的介绍

lvs工作在TCP/IP的第四层,可以实现根据用户请求的IP或端口的不同由Director_Server分发给不同的后端RS_Server;因为工作在第四层,所以最多只解析到4层协议,而对更高层的应用层是什么内容不做任何处理,所以相对于工作在第七层的Nginx/Haproxy其负载均衡效果更好;但也因为对高层协议不解析其支持的高级性能很少,如不能根据用户请求的Web资源(URL/URI)来做负载均衡
LVS有三种工作模式:
   (1)NAT 类似Iptables的DNAT
    特点集群的所有节点必须在同一个网段
    Rip一般为私有IP仅用于各节点通信
    报文的出入栈都要经过Director-Server,所以其压力很大。容易成为集群瓶颈
    支持端口映射.client请求80端口,可以转发到后端Rs的8080等端口
    RS上的RIP其网关为DIP
   (2)DR client请求Director的VIP后,报文经由Director转发到后端Server时,其源于目标地址不变,依然为CIP与VIP,而只改变报文的二层MAC地址为director指定分发的RS的MAC地址,报文返回时其源与目标地址为VIP,CIP
    特点
    集群的所有节点必须位于同一个物理网络中(因为Director要靠MAC地址将报文转发RS)最多只能隔个交换机
    RIP可以为公有地址
    只有报文的入栈才经过Director,而相对出栈报文,入栈报文要轻量级的多,所以Director压力相比NAT模式大大降低,所以DR模式支持的集群节点数量也比NAT要多得多
    RS的网关不是DIP,而是指向前段的路由器
    不支持端口映射(因为出栈不仅过Director)
    (3)TUN 隧道
    其特点是报文入栈时源和目标地址分别为CIP,VIP,进过Director后会在加一个IP报头:源IP为     DIP,目标IP为选定的RS的RIP;报文到达RS 后会将新加的IP报头去掉,报文返回时源IP为VIP,     目标IP为CIP
    支持跨区域,如不同的节点甚至可以位于不同的城市
    RIP必须为公有IP,因为要通过互联网传输报文
    Director之处理入栈报文
    不支持端口映射         
其中DR模式为最常用的一种,下面将进行DR模式的配置演示:

Director_Server: eth0 192.168.139.3  Dip
           eth0:1 192.168.139.6 Vip
Rs1_Server:    eth0 192.168.139.2  Rip1
           lo:0 192.168.139.6  Vip
Rs2_Server:    eth0 192.168.139.4  Rip2
           lo:0 192.168.139.6  Vip

      配置好RS1和RS2上的VIP,因为报文返回时其源IP必须为VIP,所以每个节点都要有VIP地址
但RS上的VIP也仅仅用来作为响应报文的源IP。
      因为每个节点都有VIP,但进行ARP响应时必须只能有Director上的VIP响应(要是VIP所在网卡都响应ARP广播就乱了,因为每个节点都有VIP),所以RS上的VIP必须隐藏起来让其不进行ARP响应。为了让RS上的VIP隐藏起来,必须对RS进行如下设置
      echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
      echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
     echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
     echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
     linux有个特点,报文从哪个接口出去其报文的源IP就会改成这个接口上的IP,所以报文返回时如果经RIP所处网卡出去,会将响应报文的源IP改为RIP(因为client请求的是VIP),所一必须加一条路由信息:
     route add -host VIP dev lo:0 (让出栈报文进过VIP所处的接口返回,这样就可以将返回报文                          源IP改为VIP,与请求报文的目标IP一致)





(1)首先在RS1上配置
RS1#ifconfig eth0 192.168.139.2 netmask 255.25.255.0 up //设置RIP1

(2)#bash rs.sh start  //运行这个脚本配置VIP,及设置路由和参数


  脚本内容如下(可以设置VIP,停止VIP。及查看状态)

#!/bin/bash
#

VIP=192.168.139.6

STATUS() {
          if [ -e /var/lock/subsys/ipvs_lock ] ;then
             echo -e "\033[40;31m initial OK \033[0m "
          else
             echo -e "\033[40;31m initial not ok \033[0m "
          fi
         }
case $1 in
start)
        /sbin/ifconfig lo down
        /sbin/ifconfig lo up
        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
       /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
       /sbin/route add -host $VIP dev lo:0
       /bin/touch /var/lock/subsys/ipvs_lock
       ;;

stop)
       /sbin/ifconfig lo:0 down
       /sbin/route del $VIP &> /dev/null
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
        /bin/rm -f /var/lock/subsys/ipvs_lock
        ;;
status)
      STATUS;;
*)
echo "Usage: `basename $0` START|STOP"
exit 7
esac

(3)
[iyunv@www sh]# ./rs.sh status //查看脚本是不是运行了
initial OK  
~                                                                                                                         (4)                     
[iyunv@www sh]# ifconfig  //查看RIP1与VIP的设置
eth0      Link encap:Ethernet  HWaddr 00:0C:29:1C:13:12  
          inet addr:192.168.139.2  Bcast:192.168.139.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe1c:1312/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3700 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1752 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:393174 (383.9 KiB)  TX bytes:236163 (230.6 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:105215 errors:0 dropped:0 overruns:0 frame:0
          TX packets:105215 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:9448156 (9.0 MiB)  TX bytes:9448156 (9.0 MiB)

lo:0      Link encap:Local Loopback  
          inet addr:192.168.139.6  Mask:255.255.255.255
          UP LOOPBACK RUNNING  MTU:65536  Metric:1


(5)
[iyunv@www sh]# vim /usr/local/apache24/htdocs/index.html //在Apache的主页面加入www.RS1.com

         <html><body><h1>www.RS1.com</h1></body></html>
~                                                  
         如果Apache不是编译安装,而是通过#yum install httpd
         则# vim /var/www/html/index/html                                         
          <html><body><h1>www.RS1.com</h1></body></html>               


(6)
[iyunv@www sh]# apachectl  start //启动Apache

   yum或RPM包装的Apache用
   #service httpd start                                                        
(7)
[iyunv@www sh]# netstat -tnlp //查看80端口是否打开
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1411/sshd           
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1490/master         
tcp        0      0 :::80                       :::*                        LISTEN      1794/httpd         
tcp        0      0 :::22                       :::*                        LISTEN      1411/sshd           
tcp        0      0 ::1:25                      :::*                        LISTEN      1490/master  
二                                                            在RS2上进行同样操作但eth0的IP 为192.168.139.4                                                           

Director进行配置

#ifconfig eth0 192.168.139.2 netmask 255.25.255.0 up //设置DIP

[iyunv@www sh]# vim lvs.sh //配置脚本,可以启动,关闭并且查看Ipvsadm及设置VIP

#!/bin/bash
#

VIP=192.168.139.6
RIP1=192.168.139.2
RIP2=192.168.139.4

STATUS() {
         if [ -e /var/lock/subsys/ipvsadm.lock ];then
             echo "ipvs is running..."
            /sbin/ipvsadm -L -n --stats
          else
             echo "ipvs is stop..."
         fi
         }

case $1 in
start)
   /sbin/ifconfig eth0:1 $VIP  netmask 255.255.255.0 up
   /sbin/route add -host $VIP dev eth0:1
    echo 1  > /proc/sys/net/ipv4/ip_forward #打开路由转发功能,让Director可以向后端RS转                                #发请求报文
   /sbin/iptables -F                 #清空iptables规则,iptables不能与lvs一起使用
   /sbin/iptables -Z
   /sbin/ipvsdam -C                 #清空之前的ipvsadm规则
   /sbin/ipvsadm -A -t $VIP:80 -s wlc
   /sbin/ipvsadm -a -t $VIP:80  -r $RIP1 -m -w 1
   /sbin/ipvsadm -a -t $VIP:80  -r $RIP2 -m -w 2
   /bin/touch /var/lock/subsys/ipvsadm.lock;;
stop)
   /sbin/ipvsadm -C
   /sbin/ifconfig eth0:1 down
   echo  0 > /proc/sys/net/ipv4/ip_forward
   /bin/rm -f /var/lock/subsys/ipvsadm.lock
   ;;
status)
STATUS;;
*)
  echo "Usage: `basement $0` start|stop|status "
                                                          [iyunv@www sh]# ./lvs.sh start    //启动脚本                                    
[iyunv@www sh]# ./lvs.sh status   //启动完成查看
ipvs is running...
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.139.6:80                    3        6        0      312        0
  -> 192.168.139.2:80                    1        2        0      104        0
  -> 192.168.139.4:80                    2        4        0      208         0



[iyunv@www sh]# ifconfig  //启动DR集群后的IP配置
eth0      Link encap:Ethernet  HWaddr 00:0C:29:6F:EB:02  
          inet addr:192.168.139.3  Bcast:192.168.139.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe6f:eb02/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14654 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9495 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2335616 (2.2 MiB)  TX bytes:1422724 (1.3 MiB)

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:6F:EB:02  
          inet addr:192.168.139.6  Bcast:192.168.139.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:121 errors:0 dropped:0 overruns:0 frame:0
          TX packets:121 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:12859 (12.5 KiB)  TX bytes:12859 (12.5 KiB)
浏览器测试


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-293630-1-1.html 上篇帖子: varnish的日志和统计工具 Reporting and statistics 下篇帖子: 使用XShell工具密钥认证登录Linux系统 linux 模型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表