需求:现有一个对外的web服务需要实行高可用HA
要求: 应用版本统一部署
技术选型:HAproxy + Docker
容器节点数: 2个够了
name : tocmat-01 端口18080
name : tocmat-02 端口28080
Docker image使用tomcat:latest 。。评分最高那个
创建命令:
docker run --name tocmat-01\
-v /home/user/tomcat_data/conf:/usr/local/tomcat/conf \
-v /home/user/tomcat_data/webapps:/usr/local/tomcat/webapps \
-p 18080:8080 \
-it
tomcat
说明:
使用-v 映射本地host的设置文件夹和应用部署目录到容器,容器启动的时候就会自动加载文件夹里面的应用
另外,使用-p 映射默认端口8080到host的端口作为haproxy访问的入口
HAproxy设置:
root@ubuntu:~# cat /usr/local/haproxy/haproxy.cfg
#全局配置
global
#设置日志
log 127.0.0.1 local3 info
chroot /usr/local/haproxy
#用户与用户组
#user haproxy
#group haproxy
#守护进程启动
daemon
#最大连接数
maxconn 4000
#默认配置
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
#前端配置,http_front名称可自定义
frontend http_front
# 发起http请求道80端口,会被转发到设置的ip及端口
bind *:8088
#haproxy的状态管理页面,通过/haproxy?stats来访问
stats uri /haproxy?stats
stats auth admin:admin
stats admin if TRUE
default_backend http_back
#后端配置,http_back名称可自定义
backend http_back
#负载均衡方式
#source 根据请求源IP
#static-rr 根据权重
#leastconn 最少连接者先处理
#uri 根据请求的uri
#url_param 根据请求的url参数
#rdp-cookie 据据cookie(name)来锁定并哈希每一次请求
#hdr(name) 根据HTTP请求头来锁定每一次HTTP请求
#roundrobin 轮询方式
balance roundrobin
#设置健康检查页面
option httpchk GET /index.jsp
#传递客户端真实IP
option forwardfor header X-Forwarded-For
#inter 10000 健康检查时间间隔2秒
#rise 3 检测多少次才认为是正常的
#fall 3 失败多少次才认为是不可用的
# weight 30 权重
# 需要转发的ip及端口,因为容器在本地,所以用127.0.0.1也可以
server node1 127.0.0.1:18080 check inter 10000 rise 3 fall 3 weight 30
server node2 127.0.0.1:28080 check inter 10000 rise 3 fall 3 weight 30
userlist L1
group G1 users tiger,scott
group G2 users xdb,scott
user tiger insecure-password tiger
user scott insecure-password scott
user xdb insecure-password xdb
。。。页面出来了,但是怎么知道LB和HA有没有生效呢
打开统计页面试试:
如图,看到alive的node 有两个
二话不说,部署一个probe到tomcat试试:
对的,我就是部署这个:
留意头顶上的机器名。。。。
tomcat_01/tomcat_02之间自动切换,现在证明LB工作得很好
看看HA 怎样:
关掉一个tomcat试试?
多次刷新都没有出现错误,但是只能显示tomcat_01的页面,failover成功,这就是我们想要的
下一步,测试auto recovery
把tomcat重新启动:
累计足够次数的心跳检测,恢复到绿色正常状态
再次刷新probe:
只能告诉大家又能正常访问,流向轮流派发到两个tomcat了,懒得截图了
结论:Auto Recovery成功