cool-2018-03-09-lvs+nginx+keepalived实现高可用HA和负载均衡

nginx的带宽设置为100M,就可以支持几十万的并发量,也就是说,如果并发量超过几十万,设置百万千万,那么就要进行lvs,负载均衡
问题1:http协议的底层是基于tcp/ip协议的,tcp协议采用的是握手协议,也就是客户端请求服务器,那么客户端就和服务器握手了,这样二者可以接收对方的数据
问题2:如何欺骗客户端,让原先由nginx响应的数据如何让tomcat响应数据给客户端,这样实施就可以解决上行下行的IO瓶颈问题
问题的解决:lvs = Linux virtual server也就是Linux虚拟服务器
淘宝就用到了这个lvs
不管是nginx还是httpd都是基于应用层的负载均衡
而lvs是基于底层的负载均衡器,强调一下,这个负载均衡器的作用是为了解决数据上行下行导致的IO瓶颈问题,解决的目标是,让服务器(不是代理服务器)直接将数据发给客户端,这样就可以解决下行的数据量IO瓶颈问题


具体详细可行的步骤:
1.给Linux转发服务器DR创建一个接口,绑定一个vip
a) ifconfig eth0:1 192.168.149.150 netmask 255.255.255.0
2.给所有的real server 设置vip的隐藏,更改网络配置即可做到
i. echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
ii. echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
iii. echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
iv. echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
3.给real server 绑定vip
i. ifconfig lo:0 192.168.1.200 netmask 255.255.255.255 broadcast 192.168.1.200
4.修改real server 上vip的路由
i. route add -host 192.168.149.150 dev lo:0
5.安装ipvsadm
只要为DR服务器安装即可
yum install ipvsadm

6.为RS各安装httpd(nginx也是可以的)
查看文件目录:rpm -ql httpd
vi /etc/httpd/conf/httpd.conf这是配置文件
service httpd start(要有敏感性,一些服务的启动,要记得将防火墙关闭 service iptables stop)
http://192.168.149.135浏览器查看httpd是否安装成功
为了查看是否有区别,因为服务器首页都是一样的,所以
vi /var/www/html/index.html
添加相应的节点信息
接下来做lvs
利用ipvsadm管理集群服务,红色为vip
1. ipvsadm -A -t 192.168.149.150:80 -s wlc
2. ipvsadm -a -t 192.168.149.150:80 -r 192.168.149.135 -g -w 1
3. ipvsadm -a -t 192.168.149.150:80 -r 192.168.149.136 -g -w 1
4. service ipvsadm start
5.service iptables stop
浏览器输入 192.168.149.150
刷新就会看到httpd首页的切换,上面修改index.html就是这个原因
打开火狐浏览器的开发者选项,查看响应头,则会看到Apache/2.2.15 (CentOS)
这就说明请求的数据是通过服务器发回来的,这样就减少了数据下行的瓶颈
网络拷贝:node3] # scp /etc/hosts [email protected]:/etc/
将现在的文件,发送到目标节点上的指定目录下

onoded作为主lvs
再重新克隆了一个节点onodef作为备用的lvs
备用的lvs要将之前lvs做过的操作重新做一遍,确保两台lvs一致
接着为需要lvs的这两台服务器添加keepalived
yum install keepalived
配置文件
vi /etc/keepalived/keepalived.conf

具体配置
! Configuration File for keepalived

global_defs {
notification_email {
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.149.150/24 dev eth0 label eth0:1
}
}

virtual_server 192.168.149.150 80{
delay_loop 6
lb_algo wlc
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP

real_server 192.168.149.135 80{
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}

real_server 192.168.149.136 80{
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}

}

}

这时候要确保主服务器上没有eth0的其他接口
cool-2018-03-09-lvs+nginx+keepalived实现高可用HA和负载均衡
接下来就是启动与关闭的问题了,还是那句话,要关闭防火墙(或者在防火墙开放对应端口)
保证主服务器的ipvsadm没有启动
service ipvsadm stop
同时查看之前设置的东西是否没有了
ipvsadm -Ln
接下来主从lvs服务器启动keepalived
service keepalived start
查看是否有接口eth0
只要主lvs开启就会将ip漂移到主lvs上
同样,ip会漂移到lvs开启的那台机子上
ifconfig查看ip是否漂移

lvs与keepalived的健康检查
将其中一台服务器关机,那么lvs就会将请求发送到开着的服务器上,而且永远不会将请求发送到已经宕机的服务器上
keepalived会自动为lvs做健康检查,其他的服务器要自己写脚本进行健康检查
keepalived的性能是有限的,如果脚本写的不好,那么就会影响这个性能