## 1. 配置详解
~~~
###########全局配置#########
global
log 127.0.0.1 local0 #[日志输出配置,所有日志都记录在本机,通过local0输出]
log 127.0.0.1 local1 notice #定义haproxy 日志级别[error warringinfo debug]
daemon #以后台形式运行harpoxy
nbproc 1 #设置进程数量
maxconn 4096 #默认最大连接数,需考虑ulimit-n限制
#user haproxy #运行haproxy的用户
#group haproxy #运行haproxy的用户所在的组
#pidfile /var/run/haproxy.pid #haproxy 进程PID文件
#ulimit-n 819200 #ulimit 的数量限制
#chroot /usr/share/haproxy #chroot运行路径
#debug #haproxy 调试级别,建议只在开启单进程的时候调试
#quiet
########默认配置############
defaults
log global
mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
option httplog #日志类别,采用httplog
option dontlognull #不记录健康检查日志信息
retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置
#option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option httpclose #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现
#option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器,以后将不支持
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
maxconn 4096 #默认的最大连接数
timeout connect 5000ms #连接超时
timeout client 30000ms #客户端超时
timeout server 30000ms #服务器超时
#timeout check 2000 #心跳检测超时
#timeout http-keep-alive10s #默认持久连接超时时间
#timeout http-request 10s #默认http请求超时时间
#timeout queue 1m #默认队列超时时间
balance roundrobin #设置默认负载均衡方式,轮询方式
#balance source #设置默认负载均衡方式,类似于nginx的ip_hash
#balnace leastconn #设置默认负载均衡方式,最小连接数
########统计页面配置########
listen stats
bind 0.0.0.0:1080 #设置Frontend和Backend的组合体,监控组的名称,按需要自定义名称
mode http #http的7层模式
option httplog #采用http日志格式
#log 127.0.0.1 local0 err #错误日志记录
maxconn 10 #默认的最大连接数
stats refresh 30s #统计页面自动刷新时间
stats uri /stats #统计页面url
stats realm XingCloud\ Haproxy #统计页面密码框上提示文本
stats auth admin:admin #设置监控页面的用户和密码:admin,可以设置多个用户名
stats auth Frank:Frank #设置监控页面的用户和密码:Frank
stats hide-version #隐藏统计页面上HAProxy的版本信息
stats admin if TRUE #设置手工启动/禁用,后端服务器(haproxy-1.4.9以后版本)
########设置haproxy 错误页面#####
#errorfile 403 /home/haproxy/haproxy/errorfiles/403.http
#errorfile 500 /home/haproxy/haproxy/errorfiles/500.http
#errorfile 502 /home/haproxy/haproxy/errorfiles/502.http
#errorfile 503 /home/haproxy/haproxy/errorfiles/503.http
#errorfile 504 /home/haproxy/haproxy/errorfiles/504.http
########frontend前端配置##############
frontend main
bind *:80 #这里建议使用bind *:80的方式,要不然做集群高可用的时候有问题,vip切换到其他机器就不能访问了。
acl web hdr(host) -i www.abc.com #acl后面是规则名称,-i为忽略大小写,后面跟的是要访问的域名,如果访问www.abc.com这个域名,就触发web规则,。
acl img hdr(host) -i img.abc.com #如果访问img.abc.com这个域名,就触发img规则。
use_backend webserver if web #如果上面定义的web规则被触发,即访问www.abc.com,就将请求分发到webserver这个作用域。
use_backend imgserver if img #如果上面定义的img规则被触发,即访问img.abc.com,就将请求分发到imgserver这个作用域。
default_backend dynamic #不满足则响应backend的默认页面
########backend后端配置##############
backend webserver #webserver作用域
mode http
balance roundrobin #balance roundrobin 负载轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数
option httpchk /index.html HTTP/1.0 #健康检查, 检测文件,如果分发到后台index.html访问不到就不再分发给它
server web1 10.16.0.9:8085 cookie 1 weight 5 check inter 2000 rise 2 fall 3
server web2 10.16.0.10:8085 cookie 2 weight 3 check inter 2000 rise 2 fall 3
#cookie 1表示serverid为1,check inter 1500 是检测心跳频率
#rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重
backend imgserver
mode http
option httpchk /index.php
balance roundrobin
server img01 192.168.137.101:80 check inter 2000 fall 3
server img02 192.168.137.102:80 check inter 2000 fall 3
backend dynamic
balance roundrobin
server test1 192.168.1.23:80 check maxconn 2000
server test2 192.168.1.24:80 check maxconn 2000
listen tcptest
bind 0.0.0.0:5222
mode tcp
option tcplog #采用tcp日志格式
balance source
#log 127.0.0.1 local0 debug
server s1 192.168.100.204:7222 weight 1
server s2 192.168.100.208:7222 weight 1
~~~
## 2. 负载均衡算法
> 1. roundrobin
表示简单的轮询,`每个服务器根据权重轮流使用`,在服务器的处理时间平均分配的情况下这是最流畅和公平的算法。该算法是动态的,对于实例启动慢的服务器权重会在运行中调整。
> 2. static-rr
> 表示根据权重,建议关注;`每个服务器根据权重轮流使用,类似roundrobin,但它是静态的`,意味着运行时修改权限是无效的。另外,它对服务器的数量没有限制。
> 3. leastconn
表示最少连接者先处理,建议关注;leastconn建议用于长会话服务,例如LDAP、SQL、TSE等,而不适合短会话协议。如HTTP.该算法是动态的,对于实例启动慢的服务器权重会在运行中调整。
> 4. source,表示根据请求源IP,建议关注;对请求源IP地址进行哈希,用可用服务器的权重总数除以哈希值,根据结果进行分配。
> 只要服务器正常,同一个客户端IP地址总是访问同一个服务器。如果哈希的结果随可用服务器数量而变化,那么客户端会定向到不同的服务器;
> 该算法一般用于不能插入cookie的Tcp模式。它还可以用于广域网上为拒绝使用会话cookie的客户端提供最有效的粘连;
> 该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。
> 5. uri
表示根据请求的URI;表示根据请求的URI左端(问号之前)进行哈希,用可用服务器的权重总数除以哈希值,根据结果进行分配。
> 只要服务器正常,同一个URI地址总是访问同一个服务器。
> 一般用于代理缓存和反病毒代理,以最大限度的提高缓存的命中率。该算法只能用于HTTP后端;
> 该算法一般用于后端是缓存服务器;
> 该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。
> 6. url_param
表示根据请求的URl参数'balance url_param' requires an URL parameter name
> 在HTTP GET请求的查询串中查找<param>中指定的URL参数,基本上可以锁定使用特制的URL到特定的负载均衡器节点的要求;
> 该算法一般用于将同一个用户的信息发送到同一个后端服务器;
> 该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。
> 7. hdr(name)
表示根据HTTP请求头来锁定每一次HTTP请求;
> 在每个HTTP请求中查找HTTP头<name>,HTTP头<name>将被看作在每个HTTP请求,并针对特定的节点;
> 如果缺少头或者头没有任何值,则用roundrobin代替
> 该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。
> 8. rdp-cookie(name)
表示根据据cookie(name)来锁定并哈希每一次TCP请求。
> 为每个进来的TCP请求查询并哈希RDP cookie<name>;
> 该机制用于退化的持久模式,可以使同一个用户或者同一个会话ID总是发送给同一台服务器。
> 如果没有cookie,则使用roundrobin算法代替;
> 该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。
> #其实这些算法各有各的用法,我们平时应用得比较多的应该是roundrobin、source和lestconn。
>
## 3. ACL规则定义
ACL定制法则:
开放策略:拒绝所有,只开放已知
拒绝策略:允许所有,只拒绝某些
事实上实现安全策略,无非也就是以上两种方法
~~~
########ACL策略定义#########################
1. #如果请求的域名满足正则表达式返回true -i是忽略大小写
acl denali_policy hdr_reg(host) -i ^(www.inbank.com|image.inbank.com)$
2、#如果请求域名满足www.inbank.com 返回 true -i是忽略大小写
acl tm_policy hdr_dom(host) -i www.inbank.com
3、#在请求url中包含sip_apiname=,则此控制策略返回true,否则为false
acl invalid_req url_sub -i sip_apiname=#定义一个名为invalid_req的策略
4、#在请求url中存在timetask作为部分地址路径,则此控制策略返回true,否则返回false
acl timetask_req url_dir -i timetask
5、#当请求的header中Content-length等于0时返回 true
acl missing_cl hdr_cnt(Content-length) eq 0
#########acl策略匹配相应###################
1、#当请求中header中Content-length等于0 阻止请求返回403
block if missing_cl
2、#block表示阻止请求,返回403错误,当前表示如果不满足策略invalid_req,或者满足策略timetask_req,则阻止请求。
block if !invalid_req || timetask_req
3、#当满足denali_policy的策略时使用denali_server的backend
use_backend denali_server if denali_policy
4、#当满足tm_policy的策略时使用tm_server的backend
use_backend tm_server if tm_policy
5、#reqisetbe关键字定义,根据定义的关键字选择backend
reqisetbe ^Host:\ img dynamic
reqisetbe ^[^\ ]*\ /(img|css)/ dynamic
reqisetbe ^[^\ ]*\ /admin/stats stats
6、#以上都不满足的时候使用默认mms_server的backend
default_backend mms
~~~
1. 如果符合某种特定条件,则返回某种新的前缀
~~~
aclclear dst_port 80
acl secure dst_port 8080
acl login_page url_beg /login #如果url的地址,除了主机名之外是login的页面则定义成logon,如果是登录页面却又属于不安全的连接 那么
acl logout url_beg /logout
acl uid_given url_reg /login?userid=[^&]+
acl cookie_set hdr_sub(cookie)SEEN=1 #取得cookie的子串,如果没有cookie则:
redirect prefix https://mysite.com set-cookie SEEN=1 if!cookie_set #如果定义的第一个用户来访问我们的站点的时候,没有被设置cookie 在将用户的请求转为https
redirect prefix https://mysite.com iflogin_page !secure
redirect prefix http://mysite.com drop-query if login_page !uid_given
redirect locationhttp://mysite.com/ if !login_page secure
redirect location / clear-cookie USERID= if logout
~~~
2. 我们自定定义一个acl
如果访问的是/bbs开头的地址,那么将其跳转到/forum
~~~
acl acbbs url_beg/bbs
redirect /forum if/bbs #if判断是否匹配/bbs 如果匹配则将/bbs 跳转至/forum
~~~
只不过对于haproxy来讲需要基于acl的机制来实现,所以要比nginx要麻烦一点
reqadd
如果访问的是ssl则则加入X-Proto首部
acl is-ssldst_prot 81
reqadd X-Proto:\SSL if is-ssl
rspadd
响应报文首部,所有响应首部都需要经过haproxy,因此经过haproxy的时候,想通告其客户端是通过haproxy来转发过来的,因此这时候会在首部添加一个 X-Via首部,明确说明是通过代理服务器转发的
#只要是通过haproxy转发的请求统统添加首部信息,如下所示:
rspadd X-Via:\ 10.0.10.61 #haproxy的IP地址
Server的检测机制
backup
check
disabled
fall #检测机[1]制,检测超过几次认为失败
inter #检测的时间间隔
另外inter还可以对其做优化:
fastinter #快速检测
downinter #慢速检测
以上可以做启发式检测,如果发现故障了可以将其快速检测几次
限制最大连接数
Maxconn参数为最大连接数,可以将其限制最大连接数,如下所示
backend webserver
balance uri
hash-type consistent
server web1 10.0.10.82:80 check weight 1 maxconn 2000
server web2 10.0.10.83:80 check weight 1 maxconn 3000
访问管理页面:
wKiom1OuQ6Oi_aP-AAFu_XJOHmA317.jpg
如果请求过多,所有超出这个最大连接数 ,如果还被转发至这个服务器中会被放入至等待队列中,如果队列也超时了,这个请求则会直接被响应403
maxqueue
维持每个队列的长度
minconn
最少连接,用来将maxconn定制为动态值
observer<mode>
健康状态监测,如果存活则不对其检查
可以根据4/7层做观测
redir
所有发往这个服务器的请求做重定向,因此可以实现单台服务器的重定向
实现重定向:
server web1 10.0.10.82:80 check weight 1 maxconn 2000 redir http://www.baidu.com
访问测试,可发现最后访问其haproxy的IP地址 最后被跳转至百度页面中了
slowstart
让haproxy支持慢启动,但是对于haproxy来讲第一启动是没有任何意义的
慢启动只在服务器故障又重新上线的时候才有效果
weight
权重
HAproxy 的 ACL 机制
http访问控制参数
rediect blockhttp-request use_backend
但凡是使用if的时候必须使用acl进行定义,访问控制列表的定义可以通过源地址/目标地址,源端口目标端口来定义,所以acl中所支持定义的标准和机制还是比较多的
·ACL 基本定义语法
·acl 名称 acl标准 [标志位][操作]
·acl 区分大小写
通常参数都是 -i
值的类型
e.g 1024:65535
比较操作
eg ge gt le lt
字符串
常用参数 -i
常用的匹配标准:
dst 目标地址
dst_port 目标端口
src 源地址
src_prot 源端口
acl goodguys src ip/24 如果是goodguys则允许访问
tcp-request content accept if goodguys 如果是goodguys则允许发起连接请求
tcp-request content reject 没有if语句 则拒绝所有(reject)
定义ACL
基于SRC做访问控制
我们期望用户访问的时候如果来源地址是10.0.10.1则拒绝访问
frontend web_server
bind*:80
default_backendwebservers
acl badguy src 10.0.10.1
block if badguy
acl定义规则名称为badguy,并且定义如果来源是10.0.10.1的IP地址拒绝访问
block表示拒绝的意思,if后面加判断,如果匹配badguy名称定义的规则那么就执行block的操作
再次访问
wKioL1OuQ5qjjODGAACwq9LSQOg694.jpg
使用重定向
如果想访问403页面重定向到其他页面的话,则:
frontend web_server
bind *:80
default_backend webserver
acl badguy src 10.0.10.1
block if badguy
errorloc 403 http://baidu.com/ #定义错误页面重定向
在七层做其他的匹配
hdr
检查首部是否属于某个指定字符的
frontend web_server
bind *:80
default_backend webserver
acl badguy src 10.0.10.1
acl dstipaddrhdr(Host) 10.0.10.61
redirectlocation http://www.qq.com/ if dstipaddr
errorloc 403 http://baidu.com
以上,通过har机制检测 如果头部信息包含此IP地址那么将其重定向至qq.com
如果非此IP地址,那么请求的uri返回是403,那么则直接跳转到baidu.com
hdr_reg 正则表达式匹配
说明某个首部的值只要匹配这个正则,则执行跳转
http_first_req
第一次请求匹配
method 访问方法匹配(GET或POST等)
实现简单动静分离功能
acl read method GET
acl read methodHEAD
acl write methodPUT
acl write methodPOST
use_backend imgserif read
use_backend uploadif write
基于path http路径做访问控制
是做精确匹配的,因此通常只匹配用户已经知道的文件路径
来自某个ip的主机访问的是1.html 则拒绝访问,其他全部放行,则:
#首先定义acl 名称denyfile 根据path来做访问控制,而path一定跟的是具体访问路径
#http-reques 来做规则 如果是badguy 并且访问的是denyfile 如果匹配两者则deny掉
frontend web_server
bind *:80
default_backend webserver
acl badguy src 10.0.10.1
acl denyfile path/1.html
http-request deny if badguy denyfile
重新加载配置文件,并且访问测试:
wKiom1OuQ-ThlEeLAAEOaoZfaWs288.jpg
访问/1.html 则返回403 ,访问其他uri则正常返回
path_beg
path只能定义单一路径或文件,但是path_beg可以定义多个文件或路径
实例:实现动静分离功能
首先定义两个backend,分别以动态和静态进行分组
backend jingtai
balance roundrobin
server web1 10.0.10.82:80 check weight 1maxconn 2000
backend dongtai
balance roundrobin
server web2 10.0.10.83:80 check weight 1maxconn 3000
配置frontend
frontend web_server
bind *:80
default_backend webservers
acl badguy src 10.0.10.1
acl denyfile path /1.html
#http-request deny if badguy denyfile
acl static path_end .html
use_backend jingtai if static
default_backend dongtai
定义acl名称为static ,如果访问匹配是.html的文件,那么直接跳转至jingtai 这个backend
如果访问的不匹配.html 那么直接跳转至默认backend dongtai组
重新加载规则,访问测试:
wKioL1OuQ9Hzaxd6AAELWeDuSss192.jpg
实现完全动静分离
在path_end中可以使用-i参数指定多个选项
修改配置信息,将一系列尽可能出现的静态内容文件类型加入acl的static组内
bind *:80
default_backend webservers
acl badguy src 10.0.10.1
acl denyfile path /1.html
#http-request deny if badguy denyfile
acl static path_end -i .html .jpg .png.jpeg .gif .swf .css .xml .txt .pdf
use_backend jingtai if static
default_backend dongtai
path_reg
正在表达式匹配
acl url_static path_reg -i .jpg$ .html$ 等 ^/static ^/images^/stylsheets
基于正则表达式匹配要比基于字符匹配慢很多,所以如果可以写成字符匹配就尽可能使用 path_end path_end 而不要使用path_reg
url
之前我们在用path做匹配的时候发现,path不包含头部信息,而url全部包含
做url匹配要做整个路径匹配,但事实上用的最多的是path 而不是url,以为用户访问文件的时候,可能是这样访问:
http://xxx.com/login.php?name=test&password=xxxx
很显然login.php 才是访问的文件,而根据整个路径结尾进行判断的话则不能判断其类型的,所以更多用到的是path_end ,因为path_end顶多只能匹配到login.php
而不包含后面的内容
url_beg
url开头
url_end
url结尾
有些时候我们用url做匹配的时候可能会使用多条进行组合起来
比如:
#如果badguy 访问的是除了denyfile之外的其他文件,则将被拒绝
http-request denyif badguy !denyfile
如果badguy 或其他人 访问的是除了denyfile之外的其他文件,则将被拒绝
http-request denyif badguy OR denyfile
健康状态检查机制
monitor-uri
通过web组件实现监控的,明确指定监控哪个uri而不是内部监控机制(check)
frontend www
bind :80
monitor-uri /haproxy
意思为做状态监测必须去请求这个uri的页面,能请求到并且状态为200则认为正常的
httpchk
做服务器的健康状态监测的时候明确说明http协议,可以指定检查那个uri,还可以指定那种方式检查uri,只启用就明确说明只做uri监测 而后面的监测方法全部省略了
backendhttps_relay
mode tcp
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
server apache1 192.168.1.1:443 check port 80
也就意味着我们做健康检测的时候,是发送自定义信息去check
也就是说httpchk是发送的自定义的方法以及发送的请求报文格式的,只有发送的请求返回值是200,才认为正常否则失败的
http请求格式:
<method><uri> <version>
<header>
<body>
将OPTIONS *HTTP/1.1\r\nHost:\ www 转换成标准格式,如下所示:
OPTIONS * HTTP/1.1
Host: www
例:定义对mysql进行检测
option mysqlchkuser mysqlusername
使用option参数套mysqlchk插件以mysqlusername的名称去连接mysql,只要能连接上,则认为数据库正常,否则不允许连接
综合示例:
示例1.实现动静分离
匹配以/static/images /img /css 目录的URI,并匹配以静态文件内容的URI
acl usr_staticpath_beg -i /static /images /img /css
acl usr_staticpath_end -i .gif .png .jpg
#判断用户访问如果主机名以www开头的话则标示为host_www
acl host_wwwhdr_beg(host) -i www
如果主机是以img video download 的域名开头,都被认为是静态内容
acl host_statichdr_beg(host) -i img. video. download.
#而后做匹配内容,如果三者匹配其中一个则分发至backend static组
use_backend static if host_static or host_www or url_static
default_backendappservers
实例2
global
pidfile /var/run/haproxy.pid
log 127.0.0.1 local0 info
defaults
mode http
clitimeout 600000 # maximum inactivity time on the client side
srvtimeout 600000 # maximum inactivity time on the server side
timeout connect 8000 # maximum time to wait for aconnection
attempt to a server to succeed
stats enable
stats auth admin:password
stats uri /monitor
stats refresh 5s
option httpchk GET /status
retries 5
option redispatch
errorfile 503 /path/to/503.text.file
balance roundrobin # each server isused in turns, according to assigned weight
frontend http
bind :80
monitor-uri /haproxy # end point tomonitor HAProxy status (returns 200)
#只要用户访问的path路径是以api开头则匹配
acl api1 path_reg ^/api1/?
acl api2 path_reg ^/api2/?
如果是api1的话则使用backend api1 以此类推
use_backend api1 if api1
use_backend api2 if api2
backend api1
# option httpclose
server srv0 127.0.0.1:9000 weight 1 maxconn 100 check inter4000
server srv1 127.0.0.1:9001 weight 1 maxconn 100 check inter4000
server srv2 127.0.0.1:9002 weight 1 maxconn 100 check inter4000
backend api2
option httpclose
server srv01 127.0.0.1:8000 weight 1 maxconn 50 check inter 4000
但是没有默认服务器也就意味着只允许用户请求api1api2,以别的任何方式都访问不到
haproxylisten配置示例:
基于COOKIE做持久连接
只要在listen中还是在backend中是要使用cookie指令 就意味着server中去引用这个cookie的,每个用户都加上sessionid,因此会为每个用户请求插入一个会话ID,因此基于这个会话id做负载均衡调度
listen webfarm
bind 192.168.0.99:80
mode http
stats enable
stats auth someuser:somepassword #指定某个用户某个密码
balance roundrobin #指定调度算法
cookie JSESSIONID prefix #基于cookie做负载均衡
option httpclose
option forwardfor #添加首部信息
option httpchk HEAD /check.txt HTTP/1.0 #http首部请求的方法是head 请求的是 /check.txt 协议是1.0 ,没有跟主机就意味着请求的是默认主机,而不是检测虚拟主机
server webA 192.168.0.102:80 cookie A check #使用cookie做了负载均衡
server webB 192.168.0.103:80 cookie B check
对mysql读集群做负载均衡
只是对于读请求可以做负载均衡,如果对于写做负载均衡的时候直接这样调度是不合适的
frontendmysqlservers
bind *:3306
default_backend myservs
backend myservs
balance leastconn
option mysqlchk user root
server myserv1 172.16.100.11:3306 check
server myserv2 172.16.100.12:3306 check
- Docker
- 什么是docker
- Docker安装、组件启动
- docker网络
- docker命令
- docker swarm
- dockerfile
- mesos
- 运维
- Linux
- Linux基础
- Linux常用命令_1
- Linux常用命令_2
- ip命令
- 什么是Linux
- SELinux
- Linux GCC编译警告:Clock skew detected. 错误解决办法
- 文件描述符
- find
- 资源统计
- LVM
- Linux相关配置
- 服务自启动
- 服务器安全
- 字符集
- shell脚本
- shell命令
- 实用脚本
- shell 数组
- 循环与判断
- 系统级别进程开启和停止
- 函数
- java调用shell脚本
- 发送邮件
- Linux网络配置
- Ubuntu
- Ubuntu发送邮件
- 更换apt-get源
- centos
- 防火墙
- 虚拟机下配置网络
- yum重新安装
- 安装mysql5.7
- 配置本地yum源
- 安装telnet
- 忘记root密码
- rsync+ crontab
- Zabbix
- Zabbix监控
- Zabbix安装
- 自动报警
- 自动发现主机
- 监控MySQL
- 安装PHP常见错误
- 基于nginx安装zabbix
- 监控Tomcat
- 监控redis
- web监控
- 监控进程和端口号
- zabbix自定义监控
- 触发器函数
- zabbix监控mysql主从同步状态
- Jenkins
- 安装Jenkins
- jenkins+svn+maven
- jenkins执行shell脚本
- 参数化构建
- maven区分环境打包
- jenkins使用注意事项
- nginx
- nginx认证功能
- ubuntu下编译安装Nginx
- 编译安装
- Nginx搭建本地yum源
- 文件共享
- Haproxy
- 初识Haproxy
- haproxy安装
- haproxy配置
- virtualbox
- virtualbox 复制新的虚拟机
- ubuntu下vitrualbox安装redhat
- centos配置双网卡
- 配置存储
- Windows
- Windows安装curl
- VMware vSphere
- 磁盘管理
- 增加磁盘
- gitlab
- 安装
- tomcat
- Squid
- bigdata
- FastDFS
- FastFDS基础
- FastFDS安装及简单实用
- api介绍
- 数据存储
- FastDFS防盗链
- python脚本
- ELK
- logstash
- 安装使用
- kibana
- 安准配置
- elasticsearch
- elasticsearch基础_1
- elasticsearch基础_2
- 安装
- 操作
- java api
- 中文分词器
- term vector
- 并发控制
- 对text字段排序
- 倒排和正排索引
- 自定义分词器
- 自定义dynamic策略
- 进阶练习
- 共享锁和排它锁
- nested object
- 父子关系模型
- 高亮
- 搜索提示
- Redis
- redis部署
- redis基础
- redis运维
- redis-cluster的使用
- redis哨兵
- redis脚本备份还原
- rabbitMQ
- rabbitMQ安装使用
- rpc
- RocketMQ
- 架构概念
- 安装
- 实例
- 好文引用
- 知乎
- ACK
- postgresql
- 存储过程
- 编程语言
- 计算机网络
- 基础_01
- tcp/ip
- http转https
- Let's Encrypt免费ssl证书(基于haproxy负载)
- what's the http?
- 网关
- 网络IO
- http
- 无状态网络协议
- Python
- python基础
- 基础数据类型
- String
- List
- 遍历
- Python基础_01
- python基础_02
- python基础03
- python基础_04
- python基础_05
- 函数
- 网络编程
- 系统编程
- 类
- Python正则表达式
- pymysql
- java调用python脚本
- python操作fastdfs
- 模块导入和sys.path
- 编码
- 安装pip
- python进阶
- python之setup.py构建工具
- 模块动态导入
- 内置函数
- 内置变量
- path
- python模块
- 内置模块_01
- 内置模块_02
- log模块
- collections
- Twisted
- Twisted基础
- 异步编程初探与reactor模式
- yield-inlineCallbacks
- 系统编程
- 爬虫
- urllib
- xpath
- scrapy
- 爬虫基础
- 爬虫种类
- 入门基础
- Rules
- 反反爬虫策略
- 模拟登陆
- problem
- 分布式爬虫
- 快代理整站爬取
- 与es整合
- 爬取APP数据
- 爬虫部署
- collection for ban of web
- crawlstyle
- API
- 多次请求
- 向调度器发送请求
- 源码学习
- LinkExtractor源码分析
- 构建工具-setup.py
- selenium
- 基础01
- 与scrapy整合
- Django
- Django开发入门
- Django与MySQL
- java
- 设计模式
- 单例模式
- 工厂模式
- java基础
- java位移
- java反射
- base64
- java内部类
- java高级
- 多线程
- springmvc-restful
- pfx数字证书
- 生成二维码
- 项目中使用log4j
- 自定义注解
- java发送post请求
- Date时间操作
- spring
- 基础
- spring事务控制
- springMVC
- 注解
- 参数绑定
- springmvc+spring+mybatis+dubbo
- MVC模型
- SpringBoot
- java配置入门
- SpringBoot基础入门
- SpringBoot web
- 整合
- SpringBoot注解
- shiro权限控制
- CommandLineRunner
- mybatis
- 静态资源
- SSM整合
- Aware
- Spring API使用
- Aware接口
- mybatis
- 入门
- mybatis属性自动映射、扫描
- 问题
- @Param 注解在Mybatis中的使用 以及传递参数的三种方式
- mybatis-SQL
- 逆向生成dao、model层代码
- 反向工程中Example的使用
- 自增id回显
- SqlSessionDaoSupport
- invalid bound statement(not found)
- 脉络
- beetl
- beetl是什么
- 与SpringBoot整合
- shiro
- 什么是shiro
- springboot+shrio+mybatis
- 拦截url
- 枚举
- 图片操作
- restful
- java项目中日志处理
- JSON
- 文件工具类
- KeyTool生成证书
- 兼容性问题
- 开发规范
- 工具类开发规范
- 压缩图片
- 异常处理
- web
- JavaScript
- 基础语法
- 创建对象
- BOM
- window对象
- DOM
- 闭包
- form提交-文件上传
- td中内容过长
- 问题1
- js高级
- js文件操作
- 函数_01
- session
- jQuery
- 函数01
- data()
- siblings
- index()与eq()
- select2
- 动态样式
- bootstrap
- 表单验证
- 表格
- MUI
- HTML
- iframe
- label标签
- 规范编程
- layer
- sss
- 微信小程序
- 基础知识
- 实践
- 自定义组件
- 修改自定义组件的样式
- 基础概念
- appid
- 跳转
- 小程序发送ajax
- 微信小程序上下拉刷新
- if
- 工具
- idea
- Git
- maven
- svn
- Netty
- 基础概念
- Handler
- SimpleChannelInboundHandler 与 ChannelInboundHandler
- 网络编程
- 网络I/O
- database
- oracle
- 游标
- PLSQL Developer
- mysql
- MySQL基准测试
- mysql备份
- mysql主从不同步
- mysql安装
- mysql函数大全
- SQL语句
- 修改配置
- 关键字
- 主从搭建
- centos下用rpm包安装mysql
- 常用sql
- information_scheme数据库
- 值得学的博客
- mysql学习
- 运维
- mysql权限
- 配置信息
- 好文mark
- jsp
- jsp EL表达式
- C
- test