周末的时候一个正在学的的Linux的朋友问我,高可用怎么玩?我和他微信了将近三个小时,把Nginx的的和HAProxy的的双主高可用教给他了,今天突然想把这个给写进博客里,供给那些正在学习的的Linux系统的朋友们,希望能够有所帮助!(如果内容中有误,还望大家指出!)
常见的网络集群调度器:
调度器分为软件和硬件两种,常见软件:lvs nginx haproxy等
常见硬件:f5绿盟梭子鱼等
LVS在企业生产中抗负载能力很强,但是不支持动静分离,正则处理,在大型网站中LVS实施复杂,而且维护成本高,工作在TCP四层,LVS就是一个单纯的负载均衡软件
Nginx使用简单,性能较好,可负载三万到五万的并发量,可做网络服务器也可做流量分配,但不支持会议会话cookie引导等,工作在TCP七层
haproxy使用简单,功能多,harpoxy支持两种工作模式,一个是TCP四层和七层(传输层和应用层),它补充了Nginx不能会话cookie等工作,支持URL检测,如果服务器出问题会有很好的帮助,它和LVS一样只是单纯的负载均衡软件,但是它负载均衡的速度和处理并发上要优于Nginx的,HAProxy的也可对MySQL的读进行负载均衡,对后端的MySQL节点进行检测,如果后端的MySQL奴隶数量超出10台时,性能不如lvs + keepalived
【部署Nginx + keepalived + Tomcat双主高可用负载均衡】
思路:
1.首先需要四台服务,两台做Nginx的负载均衡(Nginx1和Nginx2),另外两台当作真实节点服务器(Tomcat1和Tomcat2)
2.既然要达到双主的目的,就需要用两个VIP(也就是虚拟IP)添加两条VIP是为了两台调度器互相是对方主服务和从从服务,把两个VIP添加同一个域名里,客户访问域名时同时工作,使两台机器没有一个是处于闲置浪费状态,并且当其中一台机器宕机后,第一台的VIP会转移到另一台,此时第二台会有俩个VIP,这样做最大化使负载均衡达到最理想化状态
3.然后就是在调度器器上安装KEEPALIVED工具,当某台调度器宕机后,进行VIP飘移,故障切换
部署环境:
负载Nginx1 192.168.40.21
负载Nginx2 192.168.40.22
Tomcat1 192.168.40.23
Tomcat2 192.168.40.24
VIP 192.168.40.66 192.168.40.67
安装Tomcat1
需要源码包:
Jdk-7u65-linux-x64.gz apache-tomcat-7.0.54.tar.gz
安装并生成测试页
[root @ root~] #tar xf jdk-7u65-linux-x64.gz
[root @ root~] #mv jdk1.7.0_65 // usr / local / tomcat7 /
[root @ root~] #mkdir -p / web / webapp1 /
[root @ root~] #vim /web/webapp1/index.jsp
安装Tomcat2
安装步骤和Tomcat1一样,安装过程略过
Tomcat2测试页内容:
部署Nginx1负载均衡
Nginx的搭建过程略,搭建完成后修改Nginx的主配置文件,在Nginx的上添加Tomcat1和Tomcat2的真实节点服务器
max_fails = 1 fail_timeout = 10s; 健康检查:最大连接失败测试1次,失败超时10秒
部署Nginx2的负载
KEEPALIVED部署
KEEPALIVED可以说是健康检查工具,他可以故障自动切换,节点健康检查
Nginx1上安装KEEPALIVED
yum -y isntall keepalived
修改keepalived配置文件,添加VIP以及Nginx进程监测脚本
编写Nginx的检测进程脚本:
#!/ bin / bash
#by:ImproveMyself
#检测进程脚本#检测
nginx进程是否开启,如果没有开启尝试开启
jc =`ps -C nginx --no-header | wc -l`
if [$ jc -eq 0 ];然后
/ usr / local / nginx / sbin / nginx
sleep 2
#如果nginx尝试开启失败,那么就关闭keepalived服务,进行vip飘移
jc2 =`ps -C nginx -no-header | wc -l`
if [$ jc -eq 0];然后
/etc/init.d/keepalived停止
fi
fi
修改KEEPALIVED的主配置文件:
位置:/ etc / keepalived /
同时在Nginx2上部署KEEPALIVED,安装过程和Nginx1的KEEPALIVED一样,并且修改KEEPALIVED主配置文件
部署完成之后,开启Nginx和keepalive服务,此时使用ip a命令查看Nginx1上的vip,发现vip1的IP
因为VIP 1:192.168.40.66主调度器是Nginx1从调度器是Nginx2,只有当主调度器宕机之后,VIP1:192.168.40.66才切换到Nginx2上,所以Nginx1上显示VIP1:192.168.40.66是正确的, vip2:192.168.40.67此时在Nginx1上没有显示是因为Nginx1现在是VIP2的从调度服务,只有Nginx2宕机之后VIP2才会切换到Nginx1上!
然后再查看Nginx2上的vip,发现vip2的ip,这样就说明双主模式已经部署成功了
检测:
使用VIP 192.168.40.66进行访问
使用VIP 192.168.40.67进行访问
当Nginx1宕机后,此时Nginx2上有两条VIP
使用不同的VIP访问,依然成功访问
HAProxy的+ KEEPALIVED + Tomcat的高可用负载
思路:
基于上面那个环境,现在做haproxy高可用整体思路和Nginx + keepalived + Tomcat的一样,只不过是把Nginx调度换成haproxy调度器,测试方法和方式和上面那个案例一样
部署环境:负载haproxy1 192.168.40.21
负载haproxy2 192.168.40.22
Tomcat1 192.168.40.23
Tomcat2 192.168.40.24
VIP1 192.168.40.66
VIP2 192.168.40.67
部署haproxy1环境
需要的源码包: haproxy-1.4.24.tar.gz
安装HAProxy的
tar xf haproxy-1.4.24.tar.gz -C / usr / src /
cd /usr/src/haproxy-1.4.24/
make TARGET = linux26 && make install
mkdir / etc / haproxy
cp examples / haproxy.cfg / etc / haproxy /
cp examples / haproxy.init /etc/init.d/haproxy
chmod + x /etc/init.d/haproxy
ln -s / usr / local / sbin / haproxy / usr / sbin /
修改HAProxy的配置文件
vim /etc/haproxy/haproxy.cfg
创建haproxy.conf文件,用于日志管理
vim /etc/rsyslog.d/haproxy.conf
编写一个监测HAProxy的进程脚本用于故障切换,写入在KEEPALIVED配置文件里
脚本和上面的Nginx.sh脚本一样,你可以把Nginx.sh复制出一个haproxy.sh,更改一下脚本里的检测内容就行了
由于是基于上一个案例上的环境,所以KEEPALIVED就不在安装了,只需要把KEEPALIVED里的脚本名字更改一下就行了
部署haproxy2和KEEPALIVED
因为安装步骤和之前一样,安装过程略
修改haproxy.cfg配置文件和日志管理文件
修改KEEPALIVED的主配置文件,并且把脚本写入
部署完完成之后分别开启服务
/etc/init.d/haproxy restart
/etc/init.d/rsyslog restart
/etc/init.d/keepalived restart
测试:
使用两个VIP访问
宕机测试:
此时40.22上出现两条VIP,VIP证明飘移成功
此时再次访问