新反向代理与负载均衡工具 traefik 安装配置部署详解

traefik

## 简介

traefik是一款开源的反向代理与负载均衡工具。软件定位是做负载均衡器,提供好用的负载均衡服务,不要老拿它跟nginx对比。它最大的优点是能够与常见的微服务系统直接整合,可以实现自动化动态配置。

目前支持:Docker, Swarm, Mesos/Marathon, Mesos, Kubernetes, Consul, Etcd, Zookeeper, BoltDB, Rest API等等后端模型。

#### ME为什么选择traefik?

Golang编写,单文件部署,与系统无关;

热加载配置文件;

内置Web UI,管理相对方便;

功能特点:

```

It‘s fast

No dependency hell, single binary made with go

Rest API

Multiple backends supported: Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, and more to come

Watchers for backends, can listen for changes in backends to apply a new configuration automatically

Hot-reloading of configuration. No need to restart the process

Graceful shutdown http connections

Circuit breakers on backends

Round Robin, rebalancer load-balancers

Rest Metrics

Tiny official docker image included

SSL backends support

SSL frontend support (with SNI)

Clean AngularJS Web UI

Websocket support

HTTP/2 support

Retry request if network error

Let‘s Encrypt support (Automatic HTTPS with renewal)

High Availability with cluster mode

```

### 安装部署:

#### 规划服务路径

####  服务主路径

cd /etc/traefik/

#### ssl 证书存放路径

mkdir -p /etc/traefik/ssl

#### 配置文件存放路径

mkdir -p /etc/traefik/config

#### 日志存放路径

mkdir -p /etc/traefik/log

#### 源码包安装:

测试版本:v1.2.3

软件下载地址:https://github.com/containous/traefik/releases/tag/v1.2.3

软件下载到服务器后,加压,修改权限,探后启动服务;

chmod 755 traefik

#### 启动服务

traefik go 语言编写,启动服务比较简单,指定一下配置文件即可,

```

./traefik -c ./config/traefik.toml

```

#### 默认没有配置文件,需要自己根据官网参考文件进行整理,下面我根据官网信息,进行整理优化了一个主配置文件。

```

[[email protected] config]# more traefik.toml

##开启debug 模式,Default,false

debug = true

##日志级别, "DEBUG", "INFO", "WARN", "ERROR", "FATAL", "PANIC"

logLevel = "INFO"

##Traefik 服务日志,如果不配置,日志将屏幕输出;

#traefikLogsFile = "/etc/traefik/log/traefik.log"

##成功访问日志

accessLogsFile = "/etc/traefik/log/access.log"

##与后端连接保持时间,避免反复与后端服务建立连接,Default,"2s"

##ProvidersThrottleDuration = "5s"

ProvidersThrottleDuration = 5

###控制最大空闲连接数,使用net/http模块,试过设置为0 ,则不限制,如果看到‘too many open files‘ 报错,建议修改系统层`ulimit`值

,Default: 200

maxIdleConnsPerHost = 60000

###如果设置为true,将使用后端服务SSL证书。注意:这禁用中间人攻击的检测只能用于后端网络安全。Default: false

#insecureSkipVerify = true

###配置默认监听端口

###配置服务默认监听端口,如果想改变监听端口,可以进行单独配置

defaultEntryPoints = ["http", "https"]

[entryPoints]

[entryPoints.http]

address = ":80"

compress = true

[entryPoints.https]

address = ":443"

compress = true

###ssl 证书配置

[entryPoints.https.tls]

[[entryPoints.https.tls.certificates]]

certFile = "/etc/traefik/ssl/www.ptengine.cn.crt"

keyFile = "/etc/traefik/ssl/www.ptengine.cn.key"

## 管理界面监听端口

[web]

address = ":8800"

##设置 REST API 为只读模式

ReadOnly = false

##启用详细信息输出,会在管理界面下方打印一些错误信息,提供参考;

[web.statistics]

RecentErrors = 10

## To enable Traefik to export internal metrics to Prometheus

##[web.metrics.prometheus]

###  Buckets=[0.1,0.3,1.2,5.0]

### webui基本认证配置

### 密码可以编码在MD5、SHA1和BCrypt:您可以使用htpasswd生成

### 用户可以直接在toml指定文件,或间接通过引用一个外部文件;如果两个,两个并存,外部文件内容优先

### 测试配置实例

### 用户名/密码: 测试和test2:test2码:测试:测试和test2:test2

#[web.auth.basic]

#users = ["test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/", "test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0"]

### 指定配置文件

### usersFile = "/path/to/.htpasswd"

### 配置文件扩展,可以加载监视文件内容

[file]

##不支持监听目录,监听文件名要写死

filename = "/etc/traefik/config/rules.toml"

### 监视文件变更

watch = true

##发送请求重试

[retry]

##默认只向后端请求一次,不重试,

attempts = 3

```

使用上面的配置文件启动服务,会监听3个端口, 80:http ,443:https ,8800:api ,上面的配置文件我开启了debug 模式,实际生产环境不需要。服务启动后即可访问,api 管理界面查看一下基础信息。

#### 浏览器访问地址:

http://localhost:8800

#### 使用curl 访问api 接口获取信息

```

/api/providers: GET providers

/api/providers/{provider}: GET or PUT provider

/api/providers/{provider}/backends: GET backends

/api/providers/{provider}/backends/{backend}: GET a backend

/api/providers/{provider}/backends/{backend}/servers: GET servers in a backend

/api/providers/{provider}/backends/{backend}/servers/{server}: GET a server in a backend

/api/providers/{provider}/frontends: GET frontends

/api/providers/{provider}/frontends/{frontend}: GET a frontend

/api/providers/{provider}/frontends/{frontend}/routes: GET routes in a frontend

/api/providers/{provider}/frontends/{frontend}/routes/{route}: GET a route in a frontend

```

#### 查看API接口 信息,可以显示,

```

[[email protected] ~]# curl -s "http://localhost:8800/health"|jq

{

"pid": 23955,

"uptime": "4m19.415827181s",

"uptime_sec": 259.415827181,

"time": "2017-04-21 10:38:44.925762492 +0800 CST",

"unixtime": 1492742324,

"status_code_count": {},

"total_status_code_count": {

"304": 3,

"404": 2,

"429": 6

},

"count": 0,

"total_count": 11,

"total_response_time": "11.553372ms",

"total_response_time_sec": 0.011553372000000001,

"average_response_time": "1.050306ms",

"average_response_time_sec": 0.001050306,

"recent_errors": [

...............

]

}

```

#### 查看配置信息接口:

```

[[email protected] ~]# curl -s "http://localhost:8800/api"|jq

{

"file": {

"backends": {

"test1": {

"servers": {

"server1": {

"url": "http://172.16.100.70:80",

"weight": 1

},

"server2": {

"url": "http://172.16.100.71:80",

"weight": 1

}

},

"circuitBreaker": {

"expression": "NetworkErrorRatio() > 0.5"

},

"loadBalancer": {

"method": "drr"

},

"maxConn": {

"amount": 10,

"extractorFunc": "request.host"

}

}

},

"frontends": {

"test1": {

"entryPoints": [

"http",

"https"

],

"backend": "test1",

"routes": {

"service1": {

"rule": "Host:test.ptmind.com;"

}

},

"passHostHeader": true,

"priority": 10

}

}

}

}

```

### DOCKER  方式启动

Docker 启动需要先准备一下配置文件,将配置文件挂载到容器内部,另外注意下,api 管理端口。

docker run -d -p 8080:8080 -p 80:80 -v $PWD/traefik.toml:/etc/traefik/traefik.toml traefik

### 域名反向代理配置实例演示

#### 监听域名

test.ptmind.com

pttest.ptmind.com

#### 后端轮训站点:

172.16.100.70:80

172.16.100.71:80

#### 安全考虑:

显示单个客户端请求链接数;

后端不稳定停止转发轮训;

配置信息如下:

```

[[email protected] config]# more rules.toml

##后端配置

#[backends]

##发送请求重试

#[retry]

###默认只向后端请求一次,不重试,

attempts = 3

[backends.testptmindcom]

##后端网络错误率>0.5 停止转发;

[backends.testptmindcom.circuitbreaker]

expression = "NetworkErrorRatio() > 0.5"

##轮训方式,method=drr(加权轮训调度)default:wrr(队列轮转算法)

[backends.testptmindcom.LoadBalancer]

method = "drr"

##安全限制,单个主机连接数大于指定值,会提示“max connections reached”

[backends.testptmindcom.maxconn]

amount = 10

extractorfunc = "request.host"

##第一台后端节点

[backends.testptmindcom.servers.server1]

url = "http://172.16.100.70:80"

weight = 1

##第二台后端节点

[backends.testptmindcom.servers.server2]

url = "http://172.16.100.71:80"

weight = 1

##前端配置

[frontends]

#定义一个接入点的名字

[frontends.testptmindcom]

passHostHeader = true

priority = 10

##定义调用后端名称

backend = "testptmindcom"

##前端监听域名,可以监听多域名

[frontends.testptmindcom.routes.service]

rule = "Host:test.ptmind.com,pttest.ptmind.com;"

```

#### 验证配置信息:

[[email protected] ~]# curl http://localhost:8800/api|jq

```

{

"file": {

"backends": {

"testptmindcom": {

"servers": {

"server1": {

"url": "http://172.16.100.70:80",

"weight": 1

},

"server2": {

"url": "http://172.16.100.71:80",

"weight": 1

}

},

"circuitBreaker": {

"expression": "NetworkErrorRatio() > 0.5"

},

"loadBalancer": {

"method": "drr"

},

"maxConn": {

"amount": 10,

"extractorFunc": "request.host"

}

}

},

"frontends": {

"testptmindcom": {

"entryPoints": [

"http",

"https"

],

"backend": "testptmindcom",

"routes": {

"service": {

"rule": "Host:test.ptmind.com,pttest.ptmind.com;"

}

},

"passHostHeader": true,

"priority": 10

}

}

}

}

```

### 注意:

1:traefik 可以热加载配置文件,不用每次都重启服务,在修改主配置文件选项或着修改域名监听端口时,需要重启服务;

2:一组配置内, "backends":   "frontends"  名称要统一;

3:注意观察实例中的名称配置;

### 参考文档

https://docs.traefik.io/toml/

http://docs.traefik.io/toml/#retry-configuration

时间: 2024-10-15 09:04:19

新反向代理与负载均衡工具 traefik 安装配置部署详解的相关文章

个人技能总结7--Apache服务器反向代理,负载均衡,热备份+Tomcat配置

负载均衡: 第一步:首先下载安装apache,我选择的是Apache2.2.19. 第二步:修改apache安装目录下的conf/httpd.conf,打开如下配置(默认注释掉了) 打开vhost配置的自配置文件: 第三步:注释掉Vhost配置文件里面原来的,增加<VirtualHost *:80> ServerAdmin [email protected]-host2.example.com DocumentRoot "D:/apache2.2/httpd-2.2-x64/htdo

nginx和httpd反向代理和负载均衡tomcat集群

实验准备: 1.虚拟机172.18.250.77 安装nginx和httpd 实现负载均衡和反向代理 2.虚拟机172.18.250.78 安装tomcat 3.虚拟机172.18.250.79 安装tomcat 架构图: 一.nginx反向代理和负载均衡 1.安装nginx和tomcat ]# rpm -ivh nginx-1.8.0-1.el6.ngx.x86_64.rpm  ]# ls apache-tomcat-7.0.55.tar.gz  jdk-7u79-linux-x64.rpm 

Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

[转载]Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

Nginx反向代理,负载均衡,redis session共享,keepalived高可用

相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此处可搭建服务器集群. redis服务器一台,用于session的分离共享. nginx主服务器:192.168.50.133 nginx备服务器:192.168.50.135 tomcat项目服务器1:192.168.50.137 tomcat项目服务器2:192.168.50.139 redis服

基于Nginx反向代理及负载均衡

基于Nginx反向代理及负载均衡 参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 只要没有被启用,默认就是开启的,因为proxy属于nginx内置标准模块,通常实现代理的时候,最核心模块是proxy_pass,用于将用户请求的rui递交至上游服务器的某个URI但这个模块大部分用于location当中,因此要实现将某一URI的访问代理某个上游服务器大致的格式为: location /name/ { pro

Nginx反向代理和负载均衡

什么是反向代理和负载均衡 反向代理:先来说说什么是正向代理.A通过服务器B访问服务器C.正向代理的一个明确的特点就是我们知道要访问哪个服务器.但是如果服务器C是一个集群,由服务器B决定到底访问集群C上的哪台机器,则服务器B就成了一个反向代理服务器了. 负载均衡:对于一个集群,怎么样让集群中的每台机器都均衡的处理请求,这个也是反向代理服务器做的事.一般是让集群中压力相对较小的服务器处理新的请求. Nginx覆盖均衡的实现 HTTP Upstream模块 其他覆盖均衡的方法

nginx反向代理相关 负载均衡

一.反向代理 1.1.upstream简介 nginx的upstream可以同时实现反向代理和负载均衡,目前upstream支持4种方式的分配 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况. 2.ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题. 3.fair(第三方) 按后端服