本文作者:念宗

haproxy之cookie

念宗 5年前 ( 2019-08-13 ) 4951 2条评论
摘要: 一. 环境:在自己的k8s上新建了几个容器:[这块可以忽略...][root@master01 k8s]# kubectl get pod&...

一. 环境:

在自己的k8s上新建了几个容器:[这块可以忽略...]

[root@master01 k8s]# kubectl get pod -o wide
NAME         READY   STATUS    RESTARTS   AGE   IP          NODE            NOMINATED NODE   READINESS GATES
haproxy-01   1/1     Running   0          14h   10.2.77.4   192.168.10.95   <none>           <none>
tomcat-01    1/1     Running   0          17h   10.2.77.3   192.168.10.95   <none>           <none>
tomcat-02    1/1     Running   0          16h   10.2.77.5   192.168.10.95   <none>           <none>

[root@master01 k8s]# cat tomcat.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: tomcat-01
spec:
  containers:
  - name: tomcat-01
    securityContext:
      privileged: true
    image: 192.168.10.103/public/sshd-base:latest
    imagePullPolicy: Always
  imagePullSecrets:
  - name: mysecret
haproxy:10.2.77.4
tomcat01:10.2.77.3
tomcat02:10.2.77.5
OS:centos7u6

二. 后端服务部署

服务基于Tomcat的动态jsp请求,tomcat基于java,需要先把java环境部署,具体步骤就不介绍了。
1. JAVA环境:
# /etc/profile:中加入环境变量
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH

[root@tomcat-01 ~]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
2. tomcat安装:
使用二进制方式安装:
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.43/bin/apache-tomcat-8.5.43.tar.gz 
tar zxf apache-tomcat-8.5.43.tar.gz
mv apache-tomcat-8.5.43 /usr/local/src/
ln -s /usr/local/src/apache-tomcat-8.5.43 /usr/local/tomcat
启动:
cd /usr/local/tomcat/bin
./startup.sh
测试:
curl 127.0.0.1:8080
返回结果正常,另外一台同样的安装即可。为了方便测试,修改默认首页index.jsp为"tomcat01"和"tomcat02"

三. haproxy安装配置

yum install -y haproxy
[root@haproxy-01 haproxy]# cat haproxy.cfg
global
    maxconn 30000
    user haproxy
    pidfile /var/run/haproxy.pid
    log 127.0.0.1 local0 info
    log 127.0.0.1 local1 warning

defaults
    mode http
    log global
    option http-keep-alive
    option forwardfor
    option httplog
    timeout connect 5000ms
    timeout client 10000ms
    timeout server 50000ms
    timeout http-request 20000ms
    option httpchk GET /healthCheck.html

frontend http-in
    bind *:80
    maxconn 30000
    default_backend bk_tomcat

backend bk_tomcat   
    balance roundrobin
    cookie c_serverid insert indirect nocache
    server tomcat01 10.2.77.3:8080 check cookie tomcat01
    server tomcat02 10.2.77.5:8080 check cookie tomcat02

listen stats
    bind *:9001            
    stats refresh 30s             
    stats uri /stats              
    stats realm HAProxy\ Stats
    stats auth admin:admin


默认请求:/index.jsp,后文将省略index.jsp。

image.png

第一个请求:请求头没有任何额外的信息,haproxy检测到请求头没有对应的cookie,所以响应头被haproxy插入了设定好的cookie:c_serverid=tomcat01,说明选择的backend server是tomcat01,后续请求都将转发到此server

image.png

第二个请求:可以看到请求头cookie中已经附上了前面请求中haproxy插入的信息,haproxy识别后将请求转发到标记的后端服务器,这样就能一直保持转发到相同服务器


image.png


后续请求都是转发到相同服务器了。注意到整个过程中Tomcat的创建的JSESSIONID也没有变过。

image.png


用curl来测试一下:

image.png


image.png


虽然haproxy在响应头里插入了cookie,但是由于curl都是一次性请求连接就断开,默认也没有附上cookie,所以是轮询的。


下面在请求中带上cookie试试:

image.png

可以看到带上cookie信息后转发到了固定的后端服务器,多请求测试一下:

image.png

可以看到都是转发到相同的后端了。

文章版权及转载声明:

作者:念宗本文地址:http://pyops.net/?id=56发布于 5年前 ( 2019-08-13 )
文章转载或复制请以超链接形式并注明出处运维之道

分享到: 网站分享代码

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

发表评论

快捷回复:

验证码

评论列表 (有 2 条评论,4951人围观)参与讨论
网友昵称:test01
test01评论者2019-08-15沙发 回复
测试评论
网友昵称:test01
test01评论者2019-08-15椅子 回复
测试评论