haproxy实现会话保持:cookie

haproxy实现会话保持(1):cookie

HAProxy系列文章:\http://www.cnblogs.com/f-ck-need-u/p/7576137.html****


1.反向代理为什么需要设置cookie

任何一个七层的http负载均衡器,都应该具备一个功能:会话保持。会话保持是保证客户端对动态应用程序正确请求的基本要求。

还是那个被举烂了却最有说服力的例子:客户端A向服务端B请求将C商品加入它的账户购物车,加入成功后,服务端B会在某个缓存区域中记录下客户端A和它的商品C,这个缓存的内容就是session上下文环境。而识别客户端的方式一般是设置session ID(如PHPSESSID、JSESSIONID),并将其作为cookie的内容交给客户端。客户端A再次请求的时候(比如将购物车中的商品下订单)只要携带这个cookie,服务端B就可以从中获取到session ID并找到属于客户端A的缓存内容(商品C),也就可以继续执行下订单部分的代码。

假如这时使用负载均衡软件对客户端的请求进行负载,就必须要保证能将客户端A的请求再次引导到服务端B,而不能引导到服务端X、服务端Y,因为X、Y上并没有缓存和客户端A对应的session内容,也就无法为客户端A下订单。

因此,反向代理软件必须具备将客户端和服务端”绑定”的功能,也就是所谓的提供会话保持,让客户端A后续的请求一定转发到服务端B上。

这里讨论的对象是http的动态应用请求,它要求会话保持。更通用地,只要负载均衡软件负载的不是”无状态”的协议或服务,就应该提供会话保持能力,除非它是四层负载软件。

haproxy提供了3种实现会话保持的方式:

  • (1).源地址hash;
  • (2).设置cookie;
  • (3).会话粘性表stick-table;

本文只讨论haproxy在设置cookie上实现会话保持的方式,stick-table会话粘性的方式则在下一篇文章中单独讨论。而源地址hash是一种负载调度算法,没什么可讨论的,而且除非实在没办法,不建议使用这种调度算法。

阅读全文

kubernetes 1.18.10 二进制部署

1. 初始化系统环境

参考链接:

[https://www.zhho.cn/2020/09/27/Centos7%E5%88%9D%E5%A7%8B%E5%8C%96%E9%80%82%E5%90%88k8s%E8%BF%90%E8%A1%8C%E7%9A%84%E7%B3%BB%E7%BB%9F%E7%8E%AF%E5%A2%83/]:

所有服务器时间同步

1
2
3
yum -y install ntpdate
crontab -e
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com;/sbin/hwclock -w; &>/dev/null

配置hosts主机名解析

1
2
3
4
5
6
[root@k8s-master1 ~]# tail -5 /etc/hosts
192.168.7.11 k8s-master1
192.168.7.12 k8s-master2
192.168.7.13 k8s-master3
192.168.7.14 k8s-node1
192.168.7.15 k8s-node2

2. 部署Etcd集群

Etcd 是一个分布式键值存储系统,Kubernetes使用Etcd进行数据存储,所以先准备一个Etcd数据库,为解决Etcd单点故障,应采用集群方式部署,这里使用3台组建集群,可容忍1台机器故障,当然,你也可以使用5台组建集群,可容忍2台机器故障。

节点名称 IP
etcd-1 192.168.7.11
etcd-2 192.168.7.12
etcd-3 192.168.7.13

注:为了节省机器,这里与k8s节点机器复用。也可以独立于k8s集群之外部署,只要apiserver能连接到就行。

2.1 准备cfssl证书生成工具

cfssl是一个开源的证书管理工具,使用json文件生成证书,相比openssl更方便使用。
找任意一台服务器操作,这里用Master1节点。

1
2
3
4
5
6
7
8
9
mkdir /root/tools 
cd /root/tools
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo
阅读全文

部署harbor私有仓库

安装下载依赖包

  1. 安装docker-compose

    从 docker compose 发布页面下载最新的 docker-compose 二进制文件,本文以1.25.4为例

    1
    2
    3
    4
    5
    6
    7
    cd /opt/k8s/work/harbor/

    wget https://github.com/docker/compose/releases/download/1.25.4/docker-compose-Linux-x86_64

    mv docker-compose-Linux-x86_64 /opt/k8s/bin/docker-compose
    chmod a+x /opt/k8s/bin/docker-compose
    export PATH=/opt/k8s/bin:$PATH
  2. 下载harbor二进制文件

    从 harbor 发布页面下载最新的 harbor 离线安装包,本文以v1.9.4为例

    1
    2
    3
    4
    5
    cd /opt/k8s/work/harbor/

    wget https://github.com/goharbor/harbor/releases/download/v1.9.4/harbor-offline-installer-v1.9.4.tgz

    tar -xzvf harbor-offline-installer-v1.9.4.tgz
  3. 导入 docker images
    导入离线安装包中 harbor 相关的 docker images

    1
    2
    cd /opt/k8s/work/harbor/harbor
    docker load -i harbor.v1.9.4.tar.gz
阅读全文

Linux使用split命令分割文件

centos里切割大文件的命令如下:

1
split [OPTION] [INPUT [PREFIX]]

选项如下:

  • -a : 指定后缀长度
  • -b : 每个文件多少字节
  • -d : 使用数字后缀而不是字母
  • -l : 指定每个文件的行数

比如我想让后缀长度为 2,即 -a 2。用数字后缀 -d。每个文件 100M,即 -b 100m。命令可以设计如下:

1
split -a 2 -d -b 100m /var/lib/mysql/general.log now

now是自己取的名称。

redis优化配置与redis.conf

1. Redis.conf 配置参数:

#是否作为守护进程运行

daemonize yes

#如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid

pidfile redis.pid

#绑定主机IP,默认值为127.0.0.1

#bind 127.0.0.1

#Redis默认监听端口

port 6379

#客户端闲置多少秒后,断开连接,默认为300(秒)

timeout 300

#日志记录等级,有4个可选值,debug,verbose(默认值),notice,warning

loglevel verbose

#指定日志输出的文件名,默认值为stdout,也可设为/dev/null屏蔽日志

logfile stdout

#可用数据库数,默认值为16,默认数据库为0

databases 16

#保存数据到disk的策略

#当有一条Keys数据被改变是,900秒刷新到disk一次

save 900 1

#当有10条Keys数据被改变时,300秒刷新到disk一次

save 300 10

#当有1w条keys数据被改变时,60秒刷新到disk一次

save 60 10000

#当dump .rdb数据库的时候是否压缩数据对象

rdbcompression yes

#本地数据库文件名,默认值为dump.rdb

dbfilename dump.rdb

#本地数据库存放路径,默认值为 ./

dir /var/lib/redis/

阅读全文