降本增效-自建轻量级网关trafik总结

降本增效-自建轻量级网关trafik总结
自建轻量级网关

         前段时间发现自己搭建的阿里云网站的每月费用有个上升趋势,后来仔细排查了一下账单数据,发现是SLB这块费用见涨,原来是SLB这边已经改了计费规则。按目前的账单来看,算了下一年下来要支付差不多小1千块钱啊,也是一笔不小的支出。决定果断放弃阿里云的负载均衡方案,通过购买一台1H1G服务器,自建网关服务器;

        自建网关方案,相比来说 要省钱很多,风险主要是把网关的公网IP暴露出来,会引起一些不必要的麻烦和攻击;但目前主要搭建了一套个人自用的服务,被攻击概率不大,而且即使被攻击的话,必要的时候可以通过切换服务器方式来避免;
同时针对 对外开放的服务域名,可通过cloudflare 代理的方式,隐藏掉网关真实IP地址(目前cloudflare 在国内没有节点,所以相对来说访问速度会慢些,做一下必要的取舍吧);

        调研了一些主流网关服务, nginx、haproxy 、traefik产品。

         其实应该首选nginx及相关产品应用,nginx本身只支持七层代理,但可以通过插件化安装,实现 四层管理。毕竟nginx用的太多,生态确实可以, 可视化页面 可以通过 apisix 的方式替换,实现可视化管理;不过还是想尝试一下新事物,就pass掉;

        haproxy 过于复杂,本身也支持四层代理模式,不适合轻量级自建站点;

        所以最终选型 traefik应用,能够支持四七层代理,拥有可视化管理页面,配置相对简单,本身定位也是应用于轻量级站点使用,另外traefik自带 ssl证书并自动续签模式,天生解决证书过期问题。特别适合解决目前的站点问题。

traefik 介绍

        按官方解释,traefik 是 是一款现代化的 HTTP 反向代理和负载均衡器,可简化微服务的部署。Traefik 可与您现有的基础架构组件(Docker、Swarm Mode、Kubernetes、Consul、Etcd、Rancher v2、Amazon ECS 等)集成,并可自动动态地进行配置。只需将 Traefik 指向您的编排器即可完成配置。

         

39f3e651b15a140efd437f5058dff527.png

        在traefik中 有几个重点基础性概念:

        1、Entrypoints:Traefik 的网络入口点。它们定义接收数据包的端口以及是否监听 TCP 或 UDP。

         2、Routers:将传入的请求通道连接到能够处理它们的服务。在此过程中,路由器可能会使用中间件更新请求或在将请求转发到服务之前执行某些操作。

         3、Services:配置如何到达最终处理传入请求的实际服务。

        4、Providers: 主要是职责就是 服务发现(找到配置中运行的服务)、配置提供(将外部请求路由到服务的规则)其原理是,Traefik 会查询提供商的 API 以获取相关的路由信息​​,并在检测到变更时动态更新路由。目前主流的Providers有: docker Provider、Kubernetes Provider、File Provider、HTTP Provider;

    traefik的流量基础链路:

cae5418fdb437f23d1773a093ef7449b.png

应用部署:

         目前站点的基础架构设施是,每台机器都独立部署了docker应用,没有通过swarm、k8s 这种集群模式来管理, 同时 通过搭建portainer服务,对每台机器的docker容器做轻量级管理, 这样做的主要好处是,去中心化管理模式,让每个服务独立运行互不影响,然后流量则有上层的网关以内网IP的方式进行调度分配(同一个vpc环境下),最大限度减少故障环节。

        所以基于当前的站点架构,所以选择的部署的provider 为file 类型;

        作为替换SLB服务产品,traefik开放 http 80端口及 https 443端口,内部通过router 规则,路由到不同service中; 同时开放tcp端口,路由只mysql 及redis相关基础服务中;

        在部署traefik应用的时候,采用的docker-compose 编排文件的方式部署,访问日志记录、证书、配置文件以及缓存相关文件都是以挂接盘方式部署应用;

       

613e13a5475cac1d3b5649bac724c989.png

          traefik中应用中,针对docker 化部署服务,主要是通过label 标签的方式进行配置,如图中 traefik的 dashboard的配置; 如果要构建其他docker服务,必须要把docker服务加到traefik下的

同一个network中;

        traefik文件配置,分为静态配置和动态配置两种, 按deepseek介绍:静态配置是 Traefik 自身的启动蓝图,而动态配置是运行时的交通规则;

        具体核心区别如下:

特性 静态配置 动态配置
定义 Traefik 自身的启动参数和工作方式。 具体的路由、服务、中间件等业务规则。
配置对象 Traefik 进程。 进入 Traefik 的请求流量。
核心内容 入口点、认证方式、连接后端的方式、日志、API设置等。 路由规则、负载均衡、中间件、服务发现等。
加载时机 启动时加载。 运行时动态加载,支持热更新。
更新方式 修改后需要重启 Traefik 修改后无需重启,自动热重载。
典型配置方式 配置文件、命令行参数、环境变量。 标签、专用配置文件、Kubernetes CRD。
灵活性 低,定义后相对固定。 高,可根据服务变化随时调整。

          更新 静态配置文件必须要重启服务, 而更新动态配置文件,则无需重启(还没验证过);

72d9dcefa109e28df6b8a7f0844ca531.png

        在动态配置文件中,可根据业务属性,分成不同的配置文件,单独维护。类似与nginx下的应用配置文件一样;

        应用总结:

       1、 针对HTTPS服务,通过引用 acme服务,确保自动生成证书应用。同时按官方说明证书到期之前会自动更新证书确保不过期

        2、在router 规则中,针对 不同服务的特性,添加中间件服务,如seafile在代理服务的时候,request信息上添加 HOST记录;

        针对中间件服务,官方提供了很多常用中间件服务可供使用,同时也提供引用插件化安装方式,在请求进入router的时候,对请求、响应报文做加工处理; 同时可支持通过插件做自定义开发;

        3、services配置,代表转发的后端服务信息,一般采用loadBalancer模式,基于我们的现状,基本后端可以是单节点服务;

        4、traefik 提供了api接口描述,在通过dashboard配置密钥认证之后,可直接通过 api接口 获取相关配置信息:

阅读更多

InfluxDB 性能优化:从配置到客户端,我趟过的坑

InfluxDB 性能优化:从配置到客户端,我趟过的坑

前几年搭建了一套轻量级的ELK服务,中间用到了influxdb作为底层存储服务,在遇到InfluxDB写入量大的时候,各种奇怪的性能问题就冒出来了。这篇总结一下我这几年调优 InfluxDB 1.8 的经验,覆盖配置、Telegraf、客户端和运维四个层面,有不少坑是看了日志才找到根因的。 环境说明:本文基于 InfluxDB 1.8,单机部署,数据写入量约 50 万点/秒,CentOS 7 + SSD 硬盘。不同版本或部署方式下,部分参数行为可能略有差异。 一、InfluxDB 配置优化 官方配置文档:https://docs.influxdata.com/influxdb/v1/administration/config/ 1. 打开请求日志,方便排查问题 [http] access-log-path = "/var/log/influxdb/

By chenjg
从 200G 到 20G:我的 Docker 清理实战经验

从 200G 到 20G:我的 Docker 清理实战经验

你有没有经历过这种事——服务器磁盘突然报警,一查原因:Docker 把磁盘吃了几十个 G,服务全挂。这就是 Docker 的隐藏黑洞:日志无限写 + overlay2 堆积,等到发现时已经晚了。 这篇文章说清楚两件事:怎么提前防住,以及真的爆了怎么救。 一、日志:那个一直在写的文件 Docker 默认用 json-file 日志驱动,没有轮转、没有限制、一直写到底。 日志位置:/var/lib/docker/containers/<container-id>/<container-id>-json.log # 查看所有容器日志大小 find /var/lib/docker/containers -name "*-json.log&

By chenjg
SQL Server 2008 迁移至 2022 容器化部署技术总结

SQL Server 2008 迁移至 2022 容器化部署 技术总结

一、 迁移背景与架构    最近在一套测试验证环境的时候,因为原有测试环境使用的还是阿里云2008版sqlserver数据库,查阅了一下资料,打算迁移到2022版Liunx环境的Docker容器中,这中间遇到了一些问题,打算记录并总结下,以避免以后犯重复的问题。 二、 完整迁移实战命令与全流程清单 步骤 1:宿主机在大空间目录规划与赋权 因为sqlserver数据库有40多G,原有的系统的默认挂接盘空间不足,需要在新加的挂接盘 /data 分区下建立挂载目录,并赋予最高读写权限,防止容器内外出现用户权限冲突: # 创建新的数据目录与备份存放目录 mkdir -p /data/mssql/main/data mkdir -p /data/mssql/backup # 赋予最高级别读写与执行权限(非常关键,防止 Error 31 及权限被拒) chmod -R 777 /data/mssql 步骤 2:安全迁移备份文件 使用 rsync 工具将从阿里云下载并解压出来的

By chenjg
敬请同名微信公众号