Linux下安装Haproxy、Nginx、Tomcat、Keepalived
首先介绍一下环境:
1)两台服务器(条件有限),IP分别为:192.168.40.128(server1真实IP),192.168.40.129(server2真实IP),192.168.40.200(虚拟IP)。
2)两台服务器上分别安装Tomcat,HAProxy、Keepalived
3)两台服务器上的HAProxy 互为热备。
4)两台服务器上的Tomcat 是真正的内容提供方。
5)安装过程以server1(192.168.40.128)为例,JDK我就不示范安装了。
本文所提到的所有软件均可以到这个网址下载:https://fossies.org/linux/misc/
1.防火墙配置
1)查看状态
iptables -L -n
2)添加开放端口
使用iptables 开放如下端口
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
3)保存
/etc/rc.d/init.d/iptables save
4)重启服务
service iptables restart
5)查看需要打开的端口是否生效
/etc/init.d/iptables status
2.Tomcat
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
1)安装
# cd /usr/local/software # tar -zxvf apache-tomcat-8.5.30.tar.gz # mv apache-tomcat-8.5.30 /usr/local/tomcat/
2)配置
删除 /usr/local/tomcat/webapps/ 下所有文件
编写index.jsp文件:
vim /usr/local/tomcat/webapps/ROOT/index.jsp #输入以下内容: <%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Server Info</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> <% String SERVER_NAME = request.getServerName(); String SERVER_ADDR = request.getLocalAddr(); String SERVER_SOFTWARE = getServletContext().getServerInfo(); String SERVER_PROTOCOL = request.getProtocol(); Integer SERVER_PORT = request.getServerPort(); String REQUEST_METHOD = request.getMethod(); String PATH_INFO = request.getPathInfo(); String PATH_TRANSLATED = request.getPathTranslated(); String SCRIPT_NAME = request.getServletPath(); String DOCUMENT_ROOT = request.getRealPath("/"); String QUERY_STRING = request.getQueryString(); String REMOTE_HOST = request.getRemoteHost(); String REMOTE_ADDR = request.getRemoteAddr(); String AUTH_TYPE = request.getAuthType(); String REMOTE_USER = request.getRemoteUser(); String CONTENT_TYPE = request.getContentType(); Integer CONTENT_LENGTH = request.getContentLength(); String HTTP_ACCEPT = request.getHeader("Accept"); String HTTP_USER_AGENT = request.getHeader("User-Agent"); String HTTP_REFERER = request.getHeader("Referer"); HashMap infoMap = new HashMap(); infoMap.put("SERVER_NAME", SERVER_NAME); infoMap.put("SERVER_ADDR", SERVER_ADDR); infoMap.put("SERVER_SOFTWARE", SERVER_SOFTWARE); infoMap.put("SERVER_PROTOCOL", SERVER_PROTOCOL); infoMap.put("SERVER_PORT", SERVER_PORT); infoMap.put("REQUEST_METHOD", REQUEST_METHOD); infoMap.put("SCRIPT_NAME", SCRIPT_NAME); infoMap.put("DOCUMENT_ROOT", DOCUMENT_ROOT); infoMap.put("REMOTE_HOST", REMOTE_HOST); infoMap.put("REMOTE_ADDR", REMOTE_ADDR); infoMap.put("CONTENT_TYPE", CONTENT_TYPE); infoMap.put("CONTENT_LENGTH", CONTENT_LENGTH); infoMap.put("HTTP_ACCEPT", HTTP_ACCEPT); infoMap.put("HTTP_USER_AGENT", HTTP_USER_AGENT); Iterator it = infoMap.keySet().iterator(); %> <table border="1"> <% while (it.hasNext()) { Object o = it.next(); %> <tr> <td><%=o%></td> <td><%=infoMap.get(o)%></td> </tr> <%}%> </table> </body> </html>
3)启动
tomcat/bin 下是Tomcat的相关执行脚本,启动脚本为startup.sh,执行以下命令启动和关闭tomcat:
#启动 /usr/local/tomcat/bin/startup.sh #关闭 /usr/local/tomcat/bin/shutdown.sh
4)验证
打开浏览器输入:http://192.168.40.128:8080/,显示如下页面说明启动成功:
另一台tomcat也是同样的操作步骤,这里就不赘述了。
3.HAProxy
HAProxy 是一个使用C语言编写的*及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP 和HTTP 的应用程序代理。
HAProxy特别适用于那些负载特大的web 站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在 当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web 服务器不被暴露到网络上。
1)安装
#解压 tar -zxvf haproxy-1.6.9.tar.gz cd haproxy-1.6.9 #安装 make TARGET=linux2628 ARCH=x86_64 PREFIX=/usr/local/haproxy make install PREFIX=/usr/local/haproxy
参数说明:
TARGET=linux2628:内核版本,使用uname -r查看内核版本。如:2.6.32-431.el6.x86_64,此时该参数就为"linux26";大于2.6.28的用"TARGET=linux2628"。
ARCH=x86_64:系统位数。
PREFIX=/usr/local/haprpxy:HAProxy安装路径。
2)配置
创建HAProxy配置文件:
# mkdir /etc/haproxy # vim /etc/haproxy/haproxy.cfg #输入以下配置信息: global log 127.0.0.1 local0 maxconn 40960 chroot /usr/local/haproxy uid 99 gid 99 daemon nbproc 1 pidfile /var/run/haproxy.pid defaults log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 20480 timeout connect 30s timeout client 60s timeout server 60s listen web bind :80 mode http balance roundrobin stats uri /haproxy-stats stats refresh 10s stats realm Haproxy\ statistics stats auth admin:admin option httpchk HEAD /index.jsp server web1 192.168.40.128:8080 weight 1 maxconn 10000 check inter 3s rise 3 fall 3 server web2 192.168.40.129:8080 weight 1 maxconn 10000 check inter 3s rise 3 fall 3
3)创建haproxy 服务
#链接haproxy 执行文件 ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/ #复制安装包内的haproxy 启动脚本,haproxy的examples文件夹下有很多实例,大家可以参考和直接使用 cp /usr/local/software/haproxy-1.8.8/examples/haproxy.init /etc/rc.d/init.d/haproxy #赋予执行权限 chmod +x /etc/init.d/haproxy
4)启动
运行以下命令,启动HAProxy:
# service haproxy start Starting haproxy: [ OK ]
4)验证
在浏览器中输入:http://192.168.40.128/,并且每次刷新都会显示不同的页面就证明HAProxy也启动成功了。
在浏览器中继续输入:http://192.168.40.128/haproxy-stats,页面将会显示HAProxy的监控页:
同样的,另一个服务器也是按此步骤安装haproxy。
之后我们就要开始安装Keepalived了,在此之前我们先来看一下此时我们环境中的网络拓扑图:
4.Keepalived
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
1)安装
安装Keepalived之前一般需要安装openssl-devel ,运行以下命令进行安装:
# yum -y install openssl-devel
然后正式开始安装Keepalived:
# tar -zxvf keepalived-1.4.3.tar.gz # cd keepalived-1.4.3 # ./configure --prefix=/usr/local/keepalived # make # make install
2)配置
修改默认的keepalived 配置文件:
# mkdir /etc/keepalived # vim /etc/keepalived/keepalived.conf # 添加以下内容 global_defs { notification_email { 86312031@qq.com } notification_email_from root@localhost.localdomain smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_http_port { script "/etc/keepalived/check.sh" interval 3 weight 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 56 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_http_port } unicast_src_ip 192.168.40.128 unicast_peer { 192.168.40.129 } virtual_ipaddress { 192.168.40.200/24 dev eth0 } }
其中check.sh 是一个检测脚本,内容非常简单,就是判断haproxy与keepalived是否存活,如出现问题则重启相关组件,以下是check.sh的源代码:
#!/bin/bash if [ $(ps -C haproxy --no-header | wc -l ) -eq 0 ]; then service haproxy start fi sleep 2 if [ $(ps -C haproxy --no-header | wc -l ) -eq 0 ]; then service keepalived stop fi ~
然后配置启动文件:
##/usr/local/software/keepalived-1.4.3是Keepalived安装包的解压地址 # cp /usr/local/software/keepalived-1.4.3/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/keepalived # cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived # chmod +x /etc/init.d/keepalived # ln -s /usr/local/keepalived/sbin/keepalived /usr/bin/
3)启动
# service keepalived start
4)验证
在浏览器中输入配置的虚拟IP地址,如果显示正常,说明Keepalived已经成功启动。