准备4台干净机器:1个client 1个dr 2个rs
修改主机名称,固定ip地址 ,关闭防火墙和Selinux
各机器能互相ping通,所有机器在同一个网段
dr:192.168.22.155
rs1:192.168.22.157
rs2:192.168.22.158
客户端:192.168.22.143
[root@dr ~]# yum install ipvsadm -y 先装软件
[root@dr ~]#route -n查看路由表
正常数据包发包是从dr的dip往下分发流量,而不是用vip分发流量。
安装ifconfig(route也有了)
[root@dr ~]# yum search ifconfig
[root@dr ~]# yum -y install net-tools.x86_64
或者
[root@dr ~]#yum install net-tools -y 这个也是安装ifconfig的命令
[root@dr network-scripts]# ifconfig ens33:0 192.168.26.251添加ip地址
ip a 查看发现多了251ip
rs1和rs2非常像
第一件事先装nginx,因为做负载均衡,最后得做测试,realserver上装个nginx服务,dr是负载均衡器,看它最后能不能实现负载均衡,装完之后,把它主页面改一改,两个都一样。
[root@rs1 ~]# yum install nginx -y 安装nginx
[root@rs1 ~]# echo rs1 > /usr/share/nginx/html/index.html 把主页面改一下
[root@rs1 yum.repos.d]# systemctl start nginx 启动nginx服务
启动起来之后在本地测一下能不能用
[root@rs1 yum.repos.d]# curl 127.1
rs1
然后再互相测一下能不能用,一定要测试
[root@rs1 yum.repos.d]# curl 192.168.22.158
rs2
realserver上面的应用准备好了
需要在rs1和rs2,这两台机器上添加一个vip,把上面dr1添加的251ip,当作vip。做一个lo:0的虚拟网卡,把它的ip地址设置成192.168.22.251/32。一定要把子网掩码设置成32位,因为网卡回包的时候有两个网卡,怎么决定让它用哪个网卡回包,在linux里可以修改内核参数,参数的作用是让系统里比较好的ip去回数据包,默认情况下没有这个功能,需要修改一个内核参数,
什么是最好的ip?
越精确的ip系统认为越好,子网掩码越长,越精确。
[root@rs1 yum.repos.d]# yum install net-tools -y 安装ifconfig
[root@rs1 yum.repos.d]# ifconfig lo:0 192.168.22.251/32 添加ip
在rs上添加vip,因为rs需要使用vip回数据包给客户端,如果使用他自己的Ip回客户端,客户端不接受。
添加完之后,ip a 查看一下,发现多了251ip。接下来就用251当做vip
dr1上的251是没有在lo上,它是在ens33上。dr1上的251是24位的子网掩码,sr1和sr2是32位的子网掩码。251/0,0表示32位。创建vip时候子网掩码,dr上24 rs上32
修改内核参数
[root@rs1 yum.repos.d]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 yum.repos.d]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
1.为了让rs1和rs2机器上的vip忽略内网的arp广播/响应。
什么是内网的arp响应?
就是客户端发来的广播包,我不响应。
2.为了让rs1和rs2机器上的vip回数据包,而不是他本来的Ip。要让子网掩码是32位的精确ip回数据包。
[root@rs2 ~]# yum install nginx -y 安装nginx
[root@rs2 ~]# echo rs2 > /usr/share/nginx/html/index.html 把主页面改一下
[root@rs2 yum.repos.d]# systemctl start nginx启动nginx服务
启动起来之后在本地测一下能不能用
[root@rs2 yum.repos.d]# curl 127.1
rs2
然后再互相测一下能不能用,一定要测试
[root@rs2 yum.repos.d]# curl 192.168.22.157
rs2
realserver上面的应用准备好了
[root@rs2 yum.repos.d]# yum install net-tools -y 安装ifconfig
[root@rs2 yum.repos.d]# ifconfig lo:0 192.168.22.251/32 添加ip
添加完之后,ip a 查看一下,发现多了251ip。接下来就用251当做vip
dr1上的251是没有在lo上,它是在ens33上。dr1上的251是24位的子网掩码,sr1和sr2是32位的子网掩码。
修改内核参数
[root@rs2 yum.repos.d]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs2 yum.repos.d]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
添加路由分发规则/流量分发规则
[root@dr ~]# ipvsadm -A -t 192.168.22.251:80 -s rr
-A添加一个虚拟服务器vip
-g使用dr模式的lvs
-t是使用tcp协议的80端口
-s 指定调度策略为rr 轮询 round robin
-a添加realserver
-g使用直接路由
-r 指定realserver是谁
ipvsadm -C 清除策略
[root@dr ~]# ipvsadm -a -t 192.168.22.251:80 -r 192.168.22.157:80 -g
[root@dr ~]# ipvsadm -a -t 192.168.22.251:80 -r 192.168.22.158:80 -g
在这里想加多少台都可以,但最好不要超过100台。
用dr访问
测试之前是要保证dr是能访问这两台机器的,因为它是负载均衡器,如果负载均衡器都访问不了sr1和sr2,估计后面够呛。
用客户端去访问
拿客户端去访问负载均衡器,首先负载均衡器不应该有80端口的存在,负载均衡器是没有开nginx服务的。
拿客户端去访问dr
如果实验不成功,最大的原因是dr上用的是虚拟网卡,按道理是能成功。如果不成功,加个独立的网卡。
如果实验不成功上面rs1和rs2的操作,不需要做,只需要把dr做一遍,但是需要额外添加一个网卡。
如果不行重新创建子网卡,
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
[root@dr ~]# systemctl restart network 重启网卡
拿客户端去访问dr
拿一个客户端访问同一个负载均衡也可能是同一个页面,拿其他客户端访问,负载均衡是给多个客户端做负载均衡的,不是给一个客户端做负载均衡的。
【注意】理论支持实践,实践和理论相结合。