欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux中使用ipvsadm配置LVS集群的基本方法

程序员文章站 2022-04-18 11:13:18
这篇文章主要介绍了在Linux系统的服务器上使用ipvsadm配置LVS集群的基本方法,文中示例环境为CentOS系统,需要的朋友可以参考下... 15-11-17...

lvs集群有dr、tun、nat三种配置模式,可以对www服务、ftp服务、mail服务等做负载均衡,下面通过搭建www服务的负载均衡实例,讲述基于dr模式的lvs集群配置。
  一、 director server的配置
  在director server上配置lvs负载均衡集群,有两种方法:
  a. 通过ipvsadm命令行进行配置
  b. 通过redhat提供的工具piranha来配置lvs
  通过ipvsadm命令行方式配置lvs
  安装ipvs后,就可以配置lvs集群了,首先在director server上绑定一个虚拟ip(也叫vip),此ip用于对外提供服务,执行如下命令:

复制代码
代码如下:

  [root@localhost ~]#ifconfig eth0:0 192.168.60.200 broadcast 192.168.60.200 netmask 255.255.255.255 up

  此处在eth0设备上绑定了一个虚拟设备eth0:0,同时设置了一个虚拟ip是192.168.60.200,也就是上面我们规划的ip地址,然后指定广播地址也为192.168.60.200,需要特别注意的是,这里的子网掩码为255.255.255.255。
  然后给设备eth0:0指定一条路由,执行如下指令:

复制代码
代码如下:

  [root@localhost ~]#route add -host 192.168.60.200 dev eth0:0

  接着启用系统的包转发功能,从而使系统充当路由器,执行如下指令:

复制代码
代码如下:

  [root@localhost ~]#echo "1" >/proc/sys/net/ipv4/ip_forward

  指令中,参数值为1时启用ip转发,为0时禁止ip转发。其实在dr模式中,开启系统的包转发功能不是必须的,而在nat模式下此操作是必须的。
  然后开始配置ipvs,执行如下操作:

复制代码
代码如下:

  [root@localhost ~]#ipvsadm -c
  [root@localhost ~]#ipvsadm -a -t 192.168.60.200:80 -s rr -p 600
  [root@localhost ~]#ipvsadm -a -t 192.168.60.200:80 -r 192.168.60.132:80 -g
  [root@localhost ~]#ipvsadm -a -t 192.168.60.200:80 -r 192.168.60.144:80 -g

   上面操作中,第一行是清除内核虚拟服务器列表中的所有记录,第二行是添加一条新的虚拟ip记录。这个新的ip是192.168.60.200,同时指定 持续服务时间为600秒。第三、四行是在新加虚拟ip记录中添加两条新的real server记录,并且指定lvs 的工作模式为直接路由模式。
  最后,启动lvs服务,执行如下操作:

复制代码
代码如下:

  [root@localhost ~]#ipvsadm

  这样,lvs在director server上的配置就完成了。
  为了管理和配置的方便,可以将上面的操作写出一个脚本文件,脚本内容如下:

复制代码
代码如下:

  #!/bin/bash
  vip=192.168.60.200
  rip1=192.168.60.132
  rip2=192.168.60.144
  gw=192.168.60.1
  # set the virtual ip address
  /sbin/ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up
  /sbin/route add -host $vip dev eth0:0
  echo "1" >/proc/sys/net/ipv4/ip_forward
  #clear ipvs table
  /sbin/ipvsadm -c
  #set lvs
  /sbin/ipvsadm -a -t $vip:80 -s rr -p 600
  /sbin/ipvsadm -a -t $vip:80 -r $rip1:80 -g
  /sbin/ipvsadm -a -t $vip:80 -r $rip2:80 -g
  #run lvs
  /sbin/ipvsadm
  #end

  也可以写成可启动与停止的服务脚本,脚本内容如下:

复制代码
代码如下:

  #!/bin/sh
  # description: start lvs of director server
  vip=192.168.60.200
  rip1=192.168.60.132
  rip2=192.168.60.144
  ./etc/rc.d/init.d/functions
  case "$1" in
  start)
  echo " start lvs of director server"
  # set the virtual ip address and sysctl parameter
  /sbin/ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up
  echo "1" >/proc/sys/net/ipv4/ip_forward
  #clear ipvs table
  /sbin/ipvsadm -c
  #set lvs
  /sbin/ipvsadm -a -t $vip:80 -s rr -p 600
  /sbin/ipvsadm -a -t $vip:80 -r $rip1:80 -g
  /sbin/ipvsadm -a -t $vip:80 -r $rip2:80 -g
  #run lvs
  /sbin/ipvsadm
  ;;
  stop)
  echo "close lvs directorserver"
  echo "0" >/proc/sys/net/ipv4/ip_forward
  /sbin/ipvsadm -c
  /sbin/ifconfig eth0:0 down
  ;;
  *)
  echo "usage: $0 {start|stop}"
  exit 1
  esac

  将此脚本命名为lvsdr文件,然后把文件放到/etc/init.d下,执行:

复制代码
代码如下:

  [root@localhost ~]#chomd 755 /etc/init.d/lvsdr

  最后可以通过下面命令启动或停止lvs服务:

复制代码
代码如下:

  service lvsdr {start|stop}

  到此为止,命令行方式配置director server完毕。
  
  二、real server 的配置
   在lvs的dr和tun模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,而不再经过前端的director server,因此,就需要在每个real server节点上增加虚拟的vip地址,这样数据才能直接返回给用户,增加vip地址的操作可以通过创建脚本的方式来实现,创建文件/etc /init.d/lvsrs,脚本内容如下:

复制代码
代码如下:

  #!/bin/bash
  vip=192.168.60.200
  /sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
  /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
  sysctl -p
  #end

  此操作是在回环设备上绑定了一个虚拟ip地址,并设定其子网掩码为255.255.255.255,与director server上的虚拟ip保持互通,然后禁止了本机的arp请求。

ps:ipvsadm命令的用法和格式如下:
ipvsadm -a|e -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]] [-m netmask]
ipvsadm -d -t|u|f virtual-service-address
ipvsadm -c
ipvsadm -r
ipvsadm -s [-n]
ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port
[-g|i|m] [-w weight]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -l|l [options]
ipvsadm -z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface]
ipvsadm --stop-daemon
ipvsadm -h
命令选项解释:
有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可以。
-a --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。
-e --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
-d --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
-c --clear 清除内核虚拟服务器表中的所有记录。
-r --restore 恢复虚拟服务器规则
-s --save 保存虚拟服务器规则,输出为-r 选项可读的格式
-a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器
-e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
-d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
-l|-l --list 显示内核虚拟服务器表
-z --zero 虚拟服务表计数器清零(清空当前的连接数量等)
--set tcp tcpfin udp 设置连接超时值
--start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说明lvs router 是aster 或是backup。在这个功能上也可以采用keepalived 的vrrp 功能。
--stop-daemon 停止同步守护进程
-h --help 显示帮助信息
其他的选项:
-t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port]
-u --udp-service service-address 说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port]
-f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。
-s --scheduler scheduler 使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.
-p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
-m --netmask netmask persistent granularity mask
-r --real-server server-address 真实的服务器[real-server:port]
-g --gatewaying 指定lvs 的工作模式为直接路由模式(也是lvs 默认的模式)
-i --ipip 指定lvs 的工作模式为隧道模式
-m --masquerading 指定lvs 的工作模式为nat 模式
-w --weight weight 真实服务器的权值
--mcast-interface interface 指定组播的同步接口
-c --connection 显示lvs 目前的连接 如:ipvsadm -l -c
--timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -l --timeout
--daemon 显示同步守护进程状态
--stats 显示统计信息
--rate 显示速率信息
--sort 对虚拟服务器和真实服务器排序输出
--numeric -n 输出ip 地址和端口的数字形式