sofh7777 发表于 2019-1-2 13:34:08

简单实现LVS

  LVS-DNAT
  工作原理:
  在数据包进入本机内部之前,就改变它的目的地址(需要在内核实现)
http://deanlinux.blog.运维网.com/attachment/201109/11/2671049_1315735500wfUF.jpg
  LVS的工作机制类似iptables,一部分工作在用户空间(ipvsadm),一部分工作在内核空间
  安装ipvsadm软件就足以实现LVS的功能
  使用ipvsadm,早期需要重新编译内核,不过现在版本的redhat默认直接做进内核
  # 查看内核是否含有ipvs
  grep –I –c 5 ipvs /boot/config-‘uname -r’
  ipvsadm命令的使用:
  ipvsadm功能
  1:定义集群服务
  2:定义真正的REALSERVER
  3:查看定义的信息
  1.定义集群服务
  ipvsadm
  -t 基于tcp的集群服务
  -u 基于udp
  -f 基于firewall的集群服务,防火墙的类型
  -A 添加一个新集群
  -E 修改一个集群
  -s 指定算法 默认 wlc
  -D 删除一个集群
  -g|i|m gateway|internet|net DR|TUN|DNAT模型
  -w 权重
  -C 清空规则
  -S 保存规则到某个文件
  -R 从某个文件恢复规则
  -L|l 查看
  -n --numeric 数字方式显示地址
  --stats 显示统计的数据信息(statistics的简写)
  --rate 显示速率信息
  -Z 清空计数器
  添加/删除director端
  ipvsadm -A| -E -t |-u VIP:port -s
  ipvsadm -D -t|-u VIP:port
  添加/删除realserver端
  ipvsadm -a |-e -t|-u VIP:port -r REALSERVER [-g|-i|-m] [-w weight]
  ipvsadm -d -t|-u VIP:port -r READSERVER
  配置安装LVS过程
  1.安装OS
  2.后方安装apache
  3.设置默认路由
  4.安装lvs
  5.配置LVS,定义好规则
  6.做测试
http://deanlinux.blog.运维网.com/attachment/201109/11/2671049_1315735501HYg3.jpg
  1.两个apache作为realserver 只提供静态页面
  2.Directory打开转发功能
  3.两个realserver处于同一个网段
  准备:
  1) 3台干净的虚拟机:RS1 RS2 Director (需要加一块网卡)
  2) 配置各自的好yum源
  一:配置好地址,安装软件
  realserver端:
  ifconfig eth0 10.0.0.11/8
  route add default gw 10.0.0.1/8
  yum install httpd php php-mysql mysql mysql-server php-mbstring -y
  # 测试网页是否显示
  vim /var/www/html/index.html
  realserver1
  service httpd start
  elinks http://10.0.0.11
  directory端:
  ifconifg eth0 10.0.0.1/8
  yum install ipvsadm
  # 打开ipforward
  echo 1 > /proc/sys/net/ipv4/ip_forward
  #添加director
  ipvsadm -A -t 172.16.14.1:80 -s rr
  # 查看集群服务
  ipvsadm -L -n
  #添加realserver
  ipvsadm -a -t 172.16.14.1:80 -r 10.0.0.11 -m
  ipvsadm -a -t 172.16.14.1:80 -r 10.0.0.12 -m
  ipvsadm -L -n
  集群已经构建好了。。。。用浏览器测试下
http://deanlinux.blog.运维网.com/attachment/201109/11/2671049_1315735502Rl18.jpg
  # 压力测试,十个并发连接,发起10000次
  ab -c 10 -n 10000 http://172.16.14.1/index.html
  # 查看结果
http://deanlinux.blog.运维网.com/attachment/201109/11/2671049_1315735504w5HG.jpg
  # 使用加权最少连接
  ipvsadm -E -t 172.16.14.1:80 -s wlc
  # 修改权重
  ipvsadm -e -t 172.16.14.1:80 -r 10.0.0.11 -m -w 3
  # 压力测试,十个并发连接,发起10000次
  ab -c 10 -n 10000 http://172.16.14.1/index.html
  # 换别的算法来测试,看看效果 单引号
  watch -n 1 ‘ipvsadm -L -n’
  # 保存ipvsadm 结果,否则开机就没有了
  # 对于redhat
  service ipvsadm save
  chkconfig ipvsadm on
  # 或者
  ipvsadm -S > /etc/sysconfig/ipvsadm
  LWC算法结果:
http://deanlinux.blog.运维网.com/attachment/201109/11/2671049_1315735505jKsJ.jpg
  RR算法结果:
http://deanlinux.blog.运维网.com/attachment/201109/11/2671049_1315735505pvLD.gif
  LC算法结果:
http://deanlinux.blog.运维网.com/attachment/201109/11/2671049_1315735506cEh6.jpg
  SED算法结果:
  正常:
http://deanlinux.blog.运维网.com/attachment/201109/11/2671049_1315735507KIUb.jpg
  受干扰
http://deanlinux.blog.运维网.com/attachment/201109/11/2671049_1315735508vdGF.jpg
  ==========================================================================
  LVS-DR
  工作原理:
  通过设置内核参数,禁止RS直接响应用户请求,既将RS都隔离起来,只允许它们响应DR转发过来的请求。
  使用LVS-DR 前提 :
  内核有 arp_announce 和 arp_ignore
  arp_annouce 定义通过哪个地址向别人通告本地MAC-ip对应信息所定义的限制级别
  0 表示响应任意本地地址,任何接口(IP地址属于内核而不是网卡)
  1 尽可能的避免用和来源主机的IP地址非同一个网络的地址响应它
  2 总是用本地的最佳地址给予响应(同一个网段)
  arp_ignore 定义响应方式和类型
  0 无论地址放在任何地方都响应
  1 只有在所请求的地址和请求所进来的接口一致(既进来的接口和请求的地址是同一个网段)的时候才响应
  想想一下 arp_ignore=1 arg_annouce=2
  服务器拒绝响应2.2
  解决数据进入:
  为了避免RS直接响应,给服务器的lo:0设置VIP地址,给本地网卡设置成CIP,这样RS就不会直接响应了,隐藏了RS
  解决数据出去:
  而默认情况下,Linux设置数据包从哪块网卡出去,源地址设为该网卡地址,通过添加一条特殊路由信息,如果目标地址是lo的VIP地址,那么出去的时候源地址设置为lo的地址。
  路由信息的原理:
  添加一条主机路由,将VIP的地址自己设置成一个网段,既子网掩码为255.255.255.255,这样VIP出去的时候没有比VIP更优的了,就成为最佳IP
  
  相关网络规划如下:
http://deanlinux.blog.运维网.com/attachment/201109/11/2671049_1315735510zVBl.jpg
  需要配置:
  1.Lo设为VIP
  2.修改内核参数
  3.添加特殊路由
  配置LVS-DR须注意:
  1.设置网卡模式为桥接
  2.RIP地址不一定必须是公网地址
  一、设置网卡
  Director端
  1.DIP配置在接口上,VIP要配置在接口别名上
  # director ,一步到位,否则需要重启网络服务
  ifconfig eth0:0 172.16.14.1 broadcast 172.16.14.1 netmask 255.255.255.255 up # VIP
  ifconfig eth0 172.16.14.10 # DIP
  VIP应该设置在别名地址上,DIP设置在静态地址上,所有VIP设置在eth0:0
http://deanlinux.blog.运维网.com/attachment/201109/11/2671049_1315735510eHZO.jpg
  2.RS端:DIP 要配置在接口上,VIP要配置在lo的别名上
  ifconfig eth0 172.16.14.11 # RIP
  # 配置内核参数,禁止响应对VIP的ARP广播请求
  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/all/arp_announce
  echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  # 此时设置VIP,就不会和director冲突
  # 255.255.255.255 自闭
  # VIP 只向自己广播
  ifconfig lo:0 172.16.14.1 broadcast 172.16.14.1 netmask 255.255.255.255 up
  # 增加路由信息,所有出去的信息都以dev的信息为准
  route add -host 172.16.14.1 dev lo:0
  route -n
  所有的RS都要设置
  
  二.配置ipvsadm
  ipvsadm -C # 去掉上次的
  ipvsadm -A -t 172.16.14.1:80 -s wlc
  ipvsadm -a -t 172.16.14.1:80 -r 172.16.14.11 -g w 2
  ipvsadm -a -t 172.16.14.1:80 -r 172.16.14.12 -g w 4
  ipvsadm -L -n
http://deanlinux.blog.运维网.com/attachment/201109/11/2671049_1315735511fhWa.jpg
  ipvsadm -L -n --rate 统计数据包
http://deanlinux.blog.运维网.com/attachment/201109/11/2671049_1315735512wHfh.jpg



页: [1]
查看完整版本: 简单实现LVS