LVS
1.
应用层的http协议就是规定了字符串的书写格式,使得双方用一种语言就能相互通信了。访问网站的时候是先建立tcp连接(先发一堆tcp的包),再建立发http的包进行通信。
2.
家里买的路由器是一个nat路由器,使用nat机制让我们上网。
3.
DR模型原理图:
有一个负载均衡服务器(lvs,或者DR),每一个客户端都以为自己在和真正的服务器通信,于是目标地址是VIP(虚拟服务器地址,这个地址是负载均衡服务器的一个地址),当负载均衡服务器接收到客户端的包时,它不改变源ip和目标ip,而是选出一台server,修改包的目标mac,这里的目标mac是后面选出来的server的mac,随后,由于负载均衡服务器和server在同一个子网,直接发给server那里,当对应的server接收到包时,它有一个隐藏的VIP(*VIP,配置到lo接口里面不对外公布),该IP对外隐藏,对内可见,通过它确认是发给自己的,于是直接向客户端发回一个相应,源IP为VIP,目标IP为CIP(客户端的IP)。整个过程只是mac变化了,而源和目的ip都不变。
4.
tun模型:
不同于上面的DR模型,此处克服了负载均衡服务器和server得在一个子网的缺点,此时它们可以位于各个角落,类似于vpn技术。当客户端发来数据包,其源ip为cip,其目标ip是vip。随后它选一个server,然后在包的外面再套2个ip,源ip为DIP,目标IP为RIP,然后发给远在天边的server,server收到后拆开查看是什么情况,然后再包起来并向负载均衡服务器发回响应,负载均衡服务器再发到客户端那里去。此处的负载均衡服务器就是代理,即通过代理通信。
5.
隐藏VIP方法:
说明:0:只要本机有那个地址就去响应,1:只有到某个接口上,才给响应。
说明:os可以给一个网卡配置多个ip地址同时使用,对于2:接口上配置了很多ip,指向匹配的那个网络去通知自己匹配的ip地址。
6.
LVS在内核的模块叫:ipvs,为了控制内核的工作还得安装一个ipvsadm程序来间接控制。
7.
怎么分配连接数给虚拟服务器呢?
8.
DR模型试验:
一、准备三台虚拟机:node01做负载均衡服务器,node02,node03做虚拟服务器RS,客户端浏览器来访问,node01,node02,node03要在一个网段内,node01的ip是DIP,node02,03的IP是RIP。
二、配置VIP(此处为192.168.10.100)
在node01里面输入:ifconfig eth0:2 192.168.10.100/24 : 在eth0这个大接口的子接口2配置一个ip,为192.168.10.100,子网掩码是255.255.255.0
在node01里面输入:echo 1 > /proc/sys/net/ipv4/ip_forward :将1覆盖到这个文件,意思是如果包的目标地址不是我,则根据路由表进行转发,即:将主机变为了路由器,而0表示:若目标地址不是我,则丢弃。
三、先调整虚拟服务器的响应,再配置VIP。注意:这一步必须在下一步之前,因为为了防止把ip通告出去。
切换到node02:
修改eth0这个接口的文件和其他接口的文件,达到修改级别的目的
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
该配VIP了:ifconfig lo:0 192.168.10.100 netmask 255.255.255.255:给环回接口的子接口0配置vip,注意此时是4个255,不能和eth0在同一个网段。
同理再配置node03,与上面是一模一样的代码。
四、给虚拟服务器安装httpd服务(静态的web server)
在node02上 : yum install httpd -y
03....
五、创建网页内容
在node02上,手工创建主页:
cd /var/www/html/; vi index
里面写上:from 192.168.10.12,表示该网页内容
同理在node03上创建相似的内容,不过为了让我看到负载均衡的分配过程,把内容改成:from 192.168.10.13
接着在node02,node03上启动服务:service httpd start(本质上就是执行了httpd可执行文件,并把start作为参数传给httpd文件)
然后在外面的客户端浏览器直接输入02,03的真实ip(RIP)看能不能访问,如果能说明网站服务弄好了。
六、配置node01负载均衡
安装命令:yum install ipvsadm -y
设置监控的包:ipvsadm -A -t(tcp协议) 192.168.10.100:80 -s rr(做轮询)
接着用ipvsadm -ln:查看一下
追加real server02,来监控它:ipvsadm -a -t 192.168.10.100:80(基于它) -r 192.168.10.12:80 -g(做路由)
。。。。03。。。
接着用ipvsadm -ln:查看一下
最后在客户端浏览器访问:192.168.10.100(vip),不断刷新进行查看
然后在node01,02,03里面输入:netstat -natp看看连接数,发现01里面都没有,而02,03里面有很多,说明客户端是和real server建立的链接,而不是lvs
在lvs里面输入:ipvsadm -lnc:查看lvs偷窥到的记录,其中final_wait:表示断开的记录。
9.
keepalived
这是一个服务软件
由于lvs和防火墙都是操控网络协议栈的,它们一起用会冲突,所以在lvs上要关闭防火墙。都是由lvs上的keepalived来探测主和备用lvs是否可用,以及lvs所监控的RS是否正常工作。
大体功能:能够看出哪个lvs出故障了,然后迅速启动备用lvs并配置;看看RS是否正常,若不正常则从lvs中删掉该故障的RS.
实验未完成:
1.先清空之前配置好的东西,由keepalived来配置:在lvs(node01)上输入:ipvsadm -C
再清理掉接口:ifconfig ens33:0 dowm
2.在lvs上安装keepalived:yum install keepalived -y
开一个node04,也装上:yum install keepalived ipvsadm(装它是为了查看内核情况,其实keepalived能替代ipvsadm去配置) -y
3.修改node01和node04的配置文件
cd /etc/keepalived/
然后备份配置文件:cp keepalived.conf keepalived.conf.bak
修改配置文件:vi keepalived.conf,其中第一段表明,若出故障则发送邮件通知外面的人,
vrrp是一个协议,负责:当一个lvs挂了,另一个给它配上vip,state master表明这是主lvs。接着到virtual_service这一段,表明这是对lvs的配置。
在vrrp里面的virtual_ipaddress里面删掉ip,改为:192.168.10.100/24 dev ens33(指定ens33这个设备) label ens33:3 ,这句话等价于:ifconfig ens33:3 192.168.10.100/24
修改virtual_server这一段,修改模型:将第三行的nat改为DR,修改上面的ip:virtual_server 192.168.10.100 80(端口) {
timeout 50表明:当客户端与RS断开连接后,在50s之内若又来访问来了,则lvs应该把它连接到刚刚那个RS上,因为这个RS上可能会有之前为该客户端开辟的资源残留,这时能继续使用。为了达到效果,将50改为0。
改:real_server 192.168.10.12 80 {
再把ssl_get改为:
HTTP_GET{
url {
path /
status_code 200
}
下面是连接超时,重试等相关参数。
由于只有两个RS,按dG把下面的virtual_server删掉。在一个virtual_server下面再来一个real_server,改一下ip就好了。
随后把node01里面的配置文件进行远程拷贝到node04里面,输入:scp ./keepalived.conf root@192.168.10.14:/etc/keepalived/
随后在node04里面,vi keepalived.conf,改成 state BACKUP;priority 50
4.在node01,04里面启动keepalived服务 : service keepalived start
输入:ipvsadm -ln,ifconfig查看一下情况。
在客户端浏览器访问一下网页看行不行。
禁用node01的网卡,让主lvs挂了:ifconfig ens33 down
随后在node04上输入ifconfig 看看备lvs配置好了没。
再在主lvs里面输入:ifconfig ens33 up,看看备lvs有没有自动卸载掉刚刚那个接口。
5.把keepalived进程关闭看看会发生什么情况
在node01里面输入:ps -fe | grep keep,查看进程号,随后杀死进程:
kill -9 3011(dwda
kill -9 3012 ...
不过这时有bug,因为它没有卸载接口,清理内核模块。此时另外一个备lvs开始工作。