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

[经验分享] 我的lvs方案实现

[复制链接]

尚未签到

发表于 2019-1-2 13:37:06 | 显示全部楼层 |阅读模式

  主服务器ip
  从服务器ip
  RS1服务器ip
  RS2服务器ip
  Client ip
  Vip:虚拟ip
  200.200.200.30
  200.200.200.40
  200.200.200.10
  200.200.200.20
  200.200.200.111
  200.200.200.100
  网络接口
  网络接口
  网络接口
  网络接口
  网络接口
  模式
  eth1
  eth1
  eth1
  eth1
  eth1
  DR:直接路由
  LVS_M:    eth1:200.200.200.30
  LVS_S:     eth1:200.200.200.40
  RS1 :      eth1:200.200.200.10
  RS2:       eth1:200.200.200. 20
  VIP:       200.200.200.100
  Client:     200.200.200.111
  LVS模式:DR
  ,在DR模式下lvs服务器和真实服务器的网段必须在同一网段下。
  
  LVS_MASTER 配置:
  Lvs的配置
  [root@lvs_master ipvsadm-1.24]# yum -y install openssl-devel
  #下载所需要支持的文件
  [root@lvs_master ~]# ln -sv /usr/src/kernels/2.6.18-164.el5-x86_64/ /usr/src/linux/
  #是内核支持
  [root@lvs_master src]# tar zvxf ipvsadm-1.24.tar.gz
  #解压ipvsadm(ipvsadm是lvs的核心文件)
  [root@lvs_master src]# cd ipvsadm-1.24
  [root@lvs_master ipvsadm-1.24]# make;make install
  Keepalive的安装      
  [root@lvs_master src]# tar zvxf keepalived-1.1.17.tar.gz
  #解压keepalived文件(这里用keepalive软件来实现lvs的高可用ha,当然也可以使用其它软件来实现同样的功能比如heartbeat)
  [root@lvs_master src]# cd keepalived-1.1.17
  [root@lvs_master keepalived-1.1.17]# ./configure
  #配置文件
  [root@lvs_master src]# cd keepalived-1.1.17
  [root@lvs_master keepalived-1.1.17]# make;make install
  #编译安装
  Keepalived的配置
  [root@lvs_master /]# cp /usr/local/etc/rc.d/init.d/keepalived   /etc/rc.d/init.d/
  root@lvs_master /]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
  [root@lvs_master /]# cp /usr/local/sbin/keepalived /usr/sbin/
  #上面这3步骤的主要目的是复制cp的配件文件到系统相关的目录以使其相关联。
  [root@lvs_master /]# mkdir /etc/keepalived/
  #为keepalived创建单独的配置目录
  [root@lvs_master /]# vi /etc/keepalived/keepalived.conf
  #keepalived.conf文件默认是不存在的需要我们手工建立.
  ! Configuration File for keepalived
  
  global_defs {
      notification_email {
  #定义keepalived监控联系人或者管理人邮件,这里我们一般不需要配置,因为keepalived的监控和lvs的监控往往通过第三方软件来实现监控,比如nagios,zabbix等软件。
      }
  }
  vrrp_instance VI_1 {
  state MASTER
  #备份服务器改为BACKUP,注意这里的名字是固定的不可随便更改,主的也是必须是MASTER
   interface eth1
      virtual_router_id 1
  priority 100         
  #备份服务器改为90
  advert_int 1
      authentication {
          auth_type PASS
          auth_pass 1234
      }
      virtual_ipaddress {
          200.200.200.100                     #vip地址,虚拟ip地址。
  }
  }
  virtual_server 200.200.200.100 80 {   # 虚拟服务器ip
  delay_loop 6
      lb_algo wrr                                      #定义lvs的算法。
  lb_kind DR                                     #定义lvs的算法这里为DR直接路由模式,必须大写。
   protocol TCP
  real_server 200.200.200.20 80 {      #定义真实服务器的ip和提供服务器的端口号
    weight 1
          TCP_CHECK {
          connect_timeout 10
          nb_get_retry 3
          delay_before_retry 3
          connect_port 80
          }
      }
      real_server 200.200.200.10 80 {
  weight 1
          TCP_CHECK {
          connect_timeout 10
          nb_get_retry 3
          delay_before_retry 3
          connect_port 80
          }
      }
  }
  [root@lvs_master /]# chkconfig -level 23445 keepalived on
  [root@lvs_master /]# service keepalived start
  Starting keepalived:                                       [ OK ]
  
  从服务器除了:
  state MASTER                                                #从服务器改为BACKUP
  priority 100                                                     #从服务器改为90以外其他的步骤和主服务器一样。RS1和RS1的配置只需写个脚本(脚本一模一样)就可以了:
  [root@client1 /]# more lvsdr
  #!/bin/bash
  SNS_VIP=200.200.200.100
  /etc/rc.d/init.d/functions
  case "$1" in
  start)
  /sbin/ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
  #/sbin/route add -host $SNS_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
  #sysctl -p > /dev/null 2>&1
  echo "RealSever Start OK"
  ;;
  
  stop)
  /sbin/ifconfig lo:0 down
  /sbin/route del $SNS_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 "RealSever Stopped"
  ;;
  *)
  echo        "Usage: $0{start|stop}"
  exit 1
  esac
  exit
  
       为了方便脚本的启动(以命令server lvsdr start的方式)我们建议把脚本cp到/etc/init.d目录下
  [root@RS1 /]# cp lvsdr /etc/init.d/
  [root@RS1 /]# service lvsdr start (启动lvsdr脚本)
  RealSever Start OK
  
      这时候我们通过ip a 命令就可以看到VIP:200.200.200。100被绑定到lo网卡上了。
  [root@RS1/]# ip a
  1: lo:  mtu 16436 qdisc noqueue
      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      inet 127.0.0.1/8 scope host lo
      inet 200.200.200.100/32 brd 200.200.200.100 scope global lo:0
      inet6 ::1/128 scope host
         valid_lft forever preferred_lft forever
  2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
      link/ether 00:0c:29:cb:1a:5a brd ff:ff:ff:ff:ff:ff
      inet 192.168.5.92/24 brd 192.168.5.255 scope global eth0
      inet6 fe80::20c:29ff:fecb:1a5a/64 scope link
         valid_lft forever preferred_lft forever
  3: eth1:  mtu 1500 qdisc pfifo_fast qlen 1000
      link/ether 00:0c:29:cb:1a:64 brd ff:ff:ff:ff:ff:ff
      inet 200.200.200.10/24 brd 200.200.200.255 scope global eth1
      inet6 fe80::20c:29ff:fecb:1a64/64 scope link
         valid_lft forever preferred_lft forever
  4: sit0:  mtu 1480 qdisc noop
      link/sit 0.0.0.0 brd 0.0.0.0
  [root@RS1 /]#
  
  RS2和RS1的配置方式脚本名称相同,我们可以把RS1的脚本直接copy到RS2上面,这里我不再具体讲述。
  回到LVS_M服务器上我们再重新启动keepalived服务然后通过ip a命令会看到如下所示
  [root@lvs_master /]# service keepalived start
  Starting keepalived:
  [root@lvs_master /]# ip a
  1: lo:  mtu 16436 qdisc noqueue
      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:  mtu 1500 qdisc pfifo_fast qlen 1000
      link/ether 00:0c:29:f7:e3:a4 brd ff:ff:ff:ff:ff:ff
      inet 192.168.5.123/24 brd 192.168.5.255 scope global eth0
      inet6 fe80::20c:29ff:fef7:e3a4/64 scope link
         valid_lft forever preferred_lft forever
  3: eth1:  mtu 1500 qdisc pfifo_fast qlen 1000
      link/ether 00:0c:29:f7:e3:ae brd ff:ff:ff:ff:ff:ff
      inet 200.200.200.30/24 brd 200.200.200.255 scope global eth1
      inet 200.200.200.100/32 scope global eth1
      inet6 fe80::20c:29ff:fef7:e3ae/64 scope link
         valid_lft forever preferred_lft forever
  4: sit0:  mtu 1480 qdisc noop
      link/sit 0.0.0.0 brd 0.0.0.0v   
  其中红色部分所示就是我们绑定的虚拟ip vip:200.200.200.100了。从服务器LVS_S通过相同方法也会得到同样的结果。这个结果说明我们的操作问题通过client可以进行测试了。为了方便测试我们在RS1 和RS2上安装apache服务器,并且在RS1 和RS2上弄起不同的主页方便测试,我这里的测试主页内容RS1就是rs1了,RS2就是rs2了。
  [root@RS2 /]# yum -y instal httpd
  [root@RS2 /]# echo "rs2" > /var/www/html/index.html
  [root@RS2 /]# service httpd start
  
  测试:
  测试之前我们在master输入命令ipvsadm
  root@lvs_master /]# ipvsadm
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  TCP 200.200.200.100:http wrr
   -> 200.200.200.10:http          Route   1      0          0         
   -> 200.200.200.20:http          Route   1      0          0
  
  然后我们通过client访问200.200.200.100这个地址

  如果看到上图所示,然后再刷新的时刻看到如下所示

  这时候说明我们的lvs功能已经成功了。多刷新几次。然后在master上输入ipvsadm命令

  通过结果我们能看到。当我们访问100的时候,其中有10次被定向到 了200.200.200.10这关ip上,有11次被定向到了200.200.200.20的服务器上。这就说明lvs已经起到了负载的作用了。下面我们关闭master的keepalived服务。
  [root@lvs_master /]# service keepalived stop
  Stopping keepalived:                                       [ OK ]
  然后我们通过client端继续访问100这个虚拟ip我们会发现网页已经访问正常,这里不再做测试。说明keepalived的ha作用也启动了。到目前位置我们已经到底了我们所要的lvs负载加keepalived高可用的目的了。
  会话保持方面的测试:
  lvs自带支持保持会话的功能通过修改相关配置文件来实现,其实很简单。只需在lb kind DR下知道保持会话时间就可以了。
  virtual_server 200.200.200.100 80 {             # 虚拟服务器ip
  delay_loop 6
      lb_algo wrr                                               #定义lvs的算法。
  lb_kind DR  
  #定义lvs的算法这里为DR直接路由模式,必须大写。
  persistence_timeout 60
  protocol TCP
  
  相关测试
         为了更加直观的测试我们在真实服务器RS1安装论坛,真实服务器RS2上安装
  然后我们通过client访问虚拟ip 200.200.200.100 .当我们访问vip的时候,可能出现上面2个论坛中的任意一个,比如DISCUZ,我们在上面注册个帐号,并且发个帖子这时候我们会发现进行这样的操作是没有任何问题的,而不像我们想象的那样这个时候可能会出现转移到phpwind的现象。这就说明会话保持的作用已经启动起来了。会话保持的时间的配置文件设置相关,比如这里我们设置的时间为60s。
  关于lvs算法的相关研究及测试
  
  最小连接算法的测试:
  为了测试最小连接我们把其中一台真实服务器的httpd给关掉。然后在cient通过ab压力测试负载。通过结果我们可以看出。RS1的请求数为200.用于RS2的服务器httpd服务已经被我们关闭了所以这里不显示。

  下面我们打开RS2服务器的httpd服务。然后通过client进行ab压力测试。
  我们在ipvs服务器上运行ipvsadm命令我们会发现,第二次的请求已经大部分被负载到RS2所在的服务器上了。由于RS2是刚启动的服务器,其原来的连接数目为0。实验说明ls算法已经满足了我们的要求。

  rr(轮训)算法的测试。
  我们在client通过ab压力测试命令来测试。
  [root@client1 ~]# ab -c 100 -n 10000 http://200.200.200.100/
  然后我们在lvs上输入ipvsadm命令会看到如下结果。说明每个服务器承受了500的请求。

  加权算法的测试:wrr
  [root@client1 ~]# ab -c 100 -n 10000 http://200.200.200.100/
  我们通过在lvs上ipvsadm测试的结果。注意:这里我们10的权重设置的是100,20设置的是10.文件设置位置如下:
  real_server 200.200.200.20 80 {           #定义真实服务器的ip和提供服务器的端口号
   weight 10
          TCP_CHECK {
          connect_timeout 10
          nb_get_retry 3
          delay_before_retry 3
          connect_port 80
          }
      }
      real_server 200.200.200.10 80 {
  weight 100
          TCP_CHECK {
          connect_timeout 10
          nb_get_retry 3
          delay_before_retry 3
          connect_port 80
          }
      }





运维网声明 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-658688-1-1.html 上篇帖子: LVS的工作机制 下篇帖子: LVS_DR 实验
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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