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

[经验分享] LVS:DR配置

[复制链接]

尚未签到

发表于 2015-9-5 08:31:35 | 显示全部楼层 |阅读模式
  LVS:DR配置
作者:Danbo 地址:http://www.cnblogs.com/danbo/p/4609202.html

安装LVS准备
  1)、需要三台VM虚拟机数据库及memcache等负载均衡环境,并且三台主机都采用NAT模式。
DSC0000.png
  特别提示:上面的环境为内部环境的负载均衡模式,即LVS服务是对内部业务的,如数据库及memcache等的负载均衡。
  2)、web或web cache等负载均衡环境
DSC0001.png
  特别提示:这个表格一般是提供web或web cache负载均衡的情况,此种情况特点为双网卡环境。这里把10.0.0.0/24假设为内网卡,192.168.128.0/24假设为外网卡。
  这里我们为什么选192.168.128.0/24作为外网卡呢?这是为了方便大家环境搭配实验。
  3)、实验拓扑图如下所示:
DSC0002.png


配置好简单的http服务
  分别在两台RealServer安装apache服务,命令:yum -y install httpd
然后修改apache默认主页,方便后面我们做负载均衡时验证效果:
echo "Server1" >/var/www/html/index.html
echo "Server2" >/var/www.html/index.html
在RS1与RS2上使用命令:service httpd start启动apache服务器,然后用在netstat -lnt | grep 80查看apache是否成功启启动。

安装LVS
  1)、下载相关软件包
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz

  2)、安装lvs命令
lsmod | grep ip_vs
uname -r
ln -s /usr/src/kernels/2.6.18-406.el5-x86_64/ /usr/src/linux
如果没有源文件的话,说明缺少kernel-devel-2.6.18-398.e15,通过命令yum -y install kernel-devel
安装完毕后必须保证连接的版本与uname -r输出的版本一致。
tar -zxvf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make   //必须安装gcc编译器:yum -y install gcc
make install
lsmod | grep ip_vs
此时发下并没有发现这个模组,需要执行/sbin/ipvsadm命令即在ip_vs到内核。
此时我们再lsmod | grep ip_vs

  [iyunv@Director ~]# lsmod | grep ip_vs
ip_vs                      122241   0
出现以上内容表示LVS已经安装完成,并加载到内核

手工添加LVS转发

  1)、用户访问192.168.128.181这个步骤是在DNS配置

  2)、在Director上配置LVS虚拟IP(VIP)
ifconfig eth0:0 192.168.128.181 netmask 255.255.255.0 up //注意我们启用别名的方式为:eth0:0-255都可以

  3)、检查IP配置:

  [iyunv@Director ~]# ifconfig eth0:0
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:1B:C7:C9  
          inet addr:192.168.128.181  Bcast:192.168.128.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
  4)、手工执行配置添加LVS服务器并增加两台Real Server
ipvsadm -C  //clear the whole table
ipvsadm --set 30 6 60
ipvsadm -A -t 192.168.128.181:80 -s wrr -p 20
ipvsadm -a -t 192.168.128.181:80 -r 192.168.128.131:80 -g -w 1
ipvsadm -a -t 192.168.128.181:80 -r 192.168.128.132:80 -g -w 1
  删除方法:
ipvsadm -D -t 192.168.128.181:80 -s wrr
ipvsadm -d -t 192.168.128.181:80 -r 192.168.128.131:80

  ipvsadm常用相关参数:
--clear           -C        clear the whole table
--add-service     -A        add virtual service with options
--tcp-service  -t service-address   service-address is host[:port]
--scheduler    -s scheduler         one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
--real-server  -r server-address    server-address is host (and port)
--masquerading -m                   masquerading (NAT)
--gatewaying   -g                   gatewaying (direct routing) (default)
--delete-server   -d        delete real server
--persistent   -p [timeout]         persistent service
--set tcp tcpfin udp        set connection timeout values
--weight          -w weight            capacity of real server
更多详细参数参考:ipvsadm --help


手工在RS端绑定VIP

  在每台real server端执行:
ifconfig lo:0 192.168.128.181 netmask 255.255.255.255 up
route add -host 192.168.128.181 dev lo
每个集群节点上的lo设备上被绑定VIP地址(其广播地址是其本身,子网掩码是255.255.255.255,采取的VLSM方式把网段划分成只含有一个主机地址的目的是避免ip地址冲突)允许LVS-DR集群中的集群节点接受向该VIP地址的数据包,这会有一个非常严重的问题发生,集群内部的真是服务器将尝试回复来自正正在请求VIP客户端的ARP广播,这样所有的真是服务器都将声称自己拥有该VIP地址,这时客户端将直接发送请求数据包到真实服务器上,从而破坏了DR集群的方法,因此,必须要抑制真实服务器的ARP广播。


手工抑制ARP相应的方法
  在Real Server使用如下命令:
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

  arp抑制技术参数说明:
arp_ignore - INTEGER
0 -(默认值):回应任何网络接口上对任何本地IP地址的arp查询请求。
1 - 只回答目标IP地址是来访问网络接口本地地址的ARP查询请求。
2 - 只回答目标IP地址是来访问网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内。
3 - 部回应该网路界面的arp请求,而只最设置的唯一和连接地址作出回应。
4-7 - 保留未使用。
8 -  不回应所有(本地地址)的arp查询

  arp_announce - INTEGER
对网络接口上,本地IP地址的发出的ARP回应,作出相应基本的限制:
确定不同程度的限制,宣布对来自本地源IP地址发出的ARP请求的接口
0 - (默认值):在任意网络接口上任何本地地址
1 - 尽量避免不在该网络接口子网段的本地地址做出arp回应,当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用。此时会检查来访IP是否为所有接口上的子网段内IP之一。如果该来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理。
2 - 对查询目标使用最适当的本地地址。在此模式将忽略这个IP数据包源地址并尝试选择与能与改地址通信的本地地址。首要是选择所有的网络接口的子网中包含该目标IP地址的本地地址。如果没有合适的地址被发发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送,限制了使用本地的VIP地址作为优先的网络接口。

测试结果
   DSC0003.png
  

Shell脚本自动配置



  1 #!/bin/bash
  2 . /etc/init.d/functions
  3 VIP=192.168.128.181
  4 SUBNET=eth0: echo $VIP|cut -d  -f4
  5 PORT=80
  6 GW=192.168.128.2
  7
  8 #w=3
  9 RIP1=(
10
11             192.168.128.131
12
13 )
14 #w=1
15 RIP2=(
16
17              192.168.128.132
18
19 )
20 IFCONFIG=/sbin/ifconfig
21 ROUTE=/sbin/route
22 IPVSADM=/sbin/ipvsadm
23 ARPING=/sbin/arping
24
25 #functions
26 function usage(){
27
28              local script_name
29              script_name $1
30              echo "Usage:$script_name [ start | stop | restart ]"
31              echo ""
32              return 1
33              return 0
34
35 }
36
37 function checkSubnet (){
38
39              #judge if $SUBNET  is exit.
40              if [ $(checkSubnet) $(SUBNET) -ne 0]; then
41                              $IFCONFIG $SUBNET down
42              fi
43              local rs
44              #$IFCONFIG $SUBNET $VIP broadcast $VIP netmask 255.255.255.255 up
45              $IFCONFIG $SUBNET $VIP broadcast $VIP netmask 255.255.255.0 up
46              #$ROUTE add -host $VIP dev $SUBNET
47              $IPVSADM -C
48              $IPVSADM -A -t $VIP:$PORT -s wrr -p 60
49
50              for ((i=0; i< echo ${#RIP1
  • }; i++))
    51              do
    52                            $IPVSADM -a -t $VIP:$PORT -r ${RIP1[$i]}:$PORT -g -w 3
    53              done
    54
    55              for ((i=0; i< echo ${#RIP2
  • }; I++))
    56              do
    57                            $IPVSADM -a -t $VIP:$PORT -r ${RIP2[$i]}:$PORT -g -w 1
    58              done
    59              rs=$?
    60              $IPVSAD >/uestc/log/ipvs.log
    61
    62              #update MAC
    63              NetIf=$(echo ${SUBNET} | awk -F ":" '{print $1}')
    64              $ARPING -c 1 -I ${NetIf} -s $VIP $GW >>/uestc/log/ipvs.log
    65              [ $rs -eq 0 ] && action "Ipvsadm start." /bin/true
    66              return $rs
    67 }
    68
    69 function ipvsStop(){
    70             local rs
    71             rs=1
    72             #clean ipvs
    73             #IFCONFIG $SUBNET down
    74             #IPVSADM -C
    75             #IPVSADM -Z
    76
    77             rs=$?
    78             #$ROUTE del $VIP
    79             $ARPING -c 1 -I ${NetIf} -s $VIP $GW >/dev/null 2>&1
    80             [ $rs -eq 0 ] && action "Ipvsadm stoped." /bin/true
    81             return $rs
    82 }
    83
    84 main ()
    85 {
    86                #judge argv num by danbo
    87                if [ $# -ne 1 ]; then
    88                                       usage $0
    89                fi
    90
    91                case "$1" in
    92                           start)
    93                                       ipvsStart
    94                                       ;;
    95                           stop)
    96                                       ipvsStop
    97                                       ;;
    98                            restart)
    99                                       ipvsStop
    100                                       ipvsStart
    101                                       ;;
    102
    103                             *)
    104                                        usage $0
    105                                       ;;
    106                  esac
    107 }
    108
    109 $start operating
    110 main $*
      

  • 运维网声明 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-109559-1-1.html 上篇帖子: 学习笔记(2)——实验室集群LVS配置 下篇帖子: 负载均衡、LVS概述
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

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

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

    扫描微信二维码查看详情

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


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


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


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



    合作伙伴: 青云cloud

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