程序包:ipvsadm(LVS管理工具)
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save > /path/to/file
配置文件:/etc/sysconfig/ipvsadm-config
准备 3 台纯净的虚拟机,两台 web 服务器
程序包:ipvsadm(LVS管理工具)
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save > /path/to/file
配置文件:/etc/sysconfig/ipvsadm-config
实验说明: 1.网络使用NAT模式 2.DR模式要求Director DIP 和 所有RealServer RIP必须在同一个网段及广播域 3.所有节点网关均指定真实网关
1、准备工作(集群中所有主机)关闭防火墙和selinux
[root@lvs-server ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.246.166 lvs-server 192.168.246.161 real-server1 192.168.246.162 real-server22、Director分发器配置
配置VIP
[root@lvs-server ~]# ip addr add dev eth0 192.168.122.160/32 #设置VIP [root@lvs-server ~]# yum install -y ipvsadm #RHEL确保LoadBalancer仓库可用 [root@lvs-server ~]# service ipvsadm start #启动 注意:启动如果报错: /bin/bash: /etc/sysconfig/ipvsadm: 没有那个文件或目录 需要手动生成文件 [root@lvs-server ~]# ipvsadm --save > /etc/sysconfig/ipvsadm定义LVS分发策略
-A:添加VIP -t:用的是tcp协议 -a:添加一条real server 记录,添加的是lo的vip地址 -r:转发到real-serve rip -s:算法 -L|-l –list #显示内核虚拟服务器表 --numeric, -n:#以数字形式输出地址和端口号 -g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式) -S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式 rr:轮循 如果添加ip错了,删除命令如下: # ip addr del 192.168.246.193 dev ens33 # 添加算法策略 [root@lvs-server ~]# ipvsadm -A -t 192.168.122.160:80 -s rr # 添加一台 real server,并使用直接路由模式 [root@lvs-server ~]# ipvsadm -a -t 192.168.122.160:80 -r 192.168.246.161 -g [root@lvs-server ~]# ipvsadm -a -t 192.168.122.160:80 -r 192.168.246.162 -g #保存方式一,版本7已经不支持了,请使用方式二的保存方式 [root@lvs-server ~]# service ipvsadm save #保存方式二,保存到一个文件中 [root@lvs-server ~]# ipvsadm -S > /etc/sysconfig/ipvsadm [root@lvs-server ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.246.160:80 rr -> 192.168.246.161:80 Route 1 0 0 -> 192.168.246.162:80 Route 1 0 0 [root@lvs-server ~]# ipvsadm -L -n [root@lvs-server ~]# ipvsadm -L -n --stats #显示统计信息 1. Conns (connections scheduled) 已经转发过的连接数 2. InPkts (incoming packets) 入包个数 3. OutPkts (outgoing packets) 出包个数 4. InBytes (incoming bytes) 入流量(字节) 5. OutBytes (outgoing bytes) 出流量(字节) [root@lvs-server ~]# ipvsadm -L -n --rate #看速率 1. CPS (current connection rate) 每秒连接数 2. InPPS (current in packet rate) 每秒的入包个数 3. OutPPS (current out packet rate) 每秒的出包个数 4. InBPS (current in byte rate) 每秒入流量(字节) 5. OutBPS (current out byte rate) 每秒出流量(字节)3、所有RS配置
配置好网站服务器,测试所有RS #为了测试效果,提供不同的页面(以下两台real-server都操作)
[root@real-server1 ~]# yum install -y nginx [root@real-server1 ~]# echo "real-server1" >> /usr/share/nginx/html/index.html 两台机器都安装,按顺序添加不同的主机名以示区分 [root@real-server1 ~]# ip addr add dev lo 192.168.122.160/32 #在lo接口上绑定VIP [root@real-server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp广播 [root@real-server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确ip地址回包 [root@real-server1 ~]# systemctl start nginx [root@real-server1 ~]# systemctl enable nginx ============================================================================= 因为:realServer的vip有了,接着就是同一个网段中拥有两个vip, 客户端在网关发送arp广播需找vip时需要让realServer不接受响应. 解决: echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore arp_ignore 设置为1,意味着当别人的arp请求过来的时候,如果接收的设备没有这个ip,就不做出响应(这个ip在lo上,lo不是接收设备的进口) 也就是不响应非本网卡上的arp请求。 echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce 使用最好的ip来回应,什么是最好的ip?同一个网段内子网掩码最长的 arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应。 arp_ignore参数常用的取值主要有0,1,2,3~8较少用到: 0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。 1:只响应目的IP地址为接收网卡上的本地地址的arp请求。 2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。 3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。 4~7:保留未使用 8:不回应所有的arp请求 永久添加本地回环地址lo [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-lo:0 DEVICE=lo:0 IPADDR=192.168.122.100 NETMASK=255.255.255.255 ONBOOT=yes NAME=loopback