keepalived + nginx + tomcat来实现HA的负载均衡(HA=高可用)
注:
此文未考虑session共享 ---> 负载均衡tomcat时利用memcached实现session共享 请参考另一篇博客
设备:
两台keepalived + nginx keepalived和nginx同一台服务器都要安装 IP为 192.168.159.31和192.168.159.34
两台 tomcat服务器 IP为 192.168.159.32和192.168.159.33
第一步:nginx实现负载均衡
1:配置nginx.conf (我主要贴出来重要的代码)
upstream you { # 这个是负载均衡哪几台服务器
server 192.168.159.32:8080;
server 192.168.159.33:8080;
}
server {
......
location / {
root html;
index index.html index.htm;
proxy_pass http://you; # 引用定义的you
}
......
}
2:两台nginx都需要配置上述代码
3:把两台的tomcat都启动;可以启动一台nginx(192.168.159.31);
然后浏览器中输入192.168.159.31 即可在页面上看到访问了不同的tomcat(可以修改index.jsp来区分tomcat)
第二步:利用keepalived 来实现高可用
1:上述已经表明两台keepalived的IP为 192.168.159.31和192.168.159.34
2:此处规定 192.168.159.31为MASTER(主) 192.168.159.34为BACKUP(备) 虚拟IP为 192.168.159.200
3:配置/etc/keepalived/keepalived.conf (一般就是这个路径)
代码如下:
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from hello@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script check_nginx {
script "/home/check_nginx.sh" #在/home下创建check_nginx.sh
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER #在另一台上为BACKUP
interface eth0
virtual_router_id 51
priority 199 #在另一台上修改小点,最好相差50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.159.200/24 dev eth0 label eth0:1 #绑定虚拟IP(VIP) 此IP为浏览器访问的IP
}
track_script {
check_nginx
}
}
4:vi /home/check_nginx
#!/bin/bash
#
URL="http://192.168.159.31" #此处对应nginx的IP地址
code=`curl -I -m 5 -o /dev/null -s -w %{http_code} $URL` #检测nginx是否还活着
if [ $code -ne 200 ];then
sleep 2
code=`curl -I -m 5 -o /dev/null -s -w %{http_code} $URL`
if [ $code -ne 200 ];then
`service keepalived stop`
fi
fi
5:上述 3和4部 两台keepalived+nginx上都要执行 并做相应的修改
第三步:
1:启动tomcat,nginx,keepalived
2:查看主keepalived上 ifcofig 可以看到虚拟IP;备keepalived上 并没有虚拟IP
3:页面输入 192.168.159.200(VIP) 即可访问
4:把主keepalived(192.168.159.31)上 停止nginx 此时在查看ifconfig 发现没有虚拟IP了
在备keepaived上 可以看到有虚拟IP
5:页面输入 192.168.159.200(VIP) 还是可以正常的访问
结束:
这样就完成了高可用,IP漂移