负载均衡最大的作用就是0宕机,可以做到宕机秒切换。Haproxy 会将多个服务器线路进行负载均衡整合,也即用 haproxy 宿主机一个线路,代替了原来多个服务器线路,这样就不用手动切换了。笔者把Haproxy安装在阿里云服务器(ubuntu系统)上,建议使用国内的云服务器:一方面延时低,另一方面不容易挂掉。
使用haproxy进行多服务器负载均衡的两个前提条件:
(1)所有的服务器线路的密码、端口必须一致。
(2)加密方式、协议/混淆也必须一致。
1、更新apt的资源列表
sudo apt-get update
2、安装haproxy
sudo apt-get install haproxy
3、编辑haproxy文件
sudo vi /etc/haproxy/haproxy.cfg
然后输入以下配置信息:
global
log 127.0.0.1 local2
chroot /usr/bin
pidfile /var/run/haproxy.pid
maxconn 4000
user nobody
daemon
defaults
mode tcp
log global
option tcplog
option dontlognull
option http-server-close
#option forwardfor except 127.0.0.0/8
option redispatch
retries 2
timeout http-request 10s
timeout queue 1m
timeout connect 3s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen admin_status
bind 0.0.0.0:1111 #管理页面的登录端口
mode http
stats refresh 30s
stats uri /
stats auth fzjh:fzjh #管理页面的账号密码
#stats hide-version
stats admin if TRUE
resolvers mydns
nameserver dns1 119.29.29.29:53
nameserver dns2 114.114.114.114:53
resolve_retries 3
timeout retry 2s
hold valid 10s
listen shadowscoks_balance_load
bind 0.0.0.0:63052
mode tcp
balance roundrobin
server serA_name 100.2.14.1:63052 weight 200 rise 2 fall 3 check inter 2000 resolvers mydns #主力服务器
server serB_name 103.2.14.1:63052 weight 50 rise 2 fall 3 check inter 2000 resolvers mydns backup #备用服务器
server serC_name 150.2.14.1:63052 weight 8 rise 2 fall 3 check inter 2000 resolvers mydns backup #备用服务器
server serD_name 120.2.14.1:63052 weight 8 rise 2 fall 3 check inter 2000 resolvers mydns backup #备用服务器
server serE_name 100.4.14.1:63052 weight 3 rise 2 fall 3 check inter 2000 resolvers mydns backup #备用服务器
server serF_name 107.2.14.1:63052 weight 1 rise 2 fall 3 check inter 2000 resolvers mydns backup #备用服务器
server serH_name 108.2.34.1:63052 weight 1 rise 2 fall 3 check inter 2000 resolvers mydns backup #备用服务器
使用vim语法时需要注意:
按esc键可以在【只读】和【输入】 两种状态之间切换。ndd:n为数字,删除光标所在的向下 n 列,例如 20dd 则是删除 20 列
输入完毕后想退出vim可以输入:wq!,然后按enter键
这里详细说一下这个配置里面的各项作用:
3.1 listen admin_status段的参数分析
bind 0.0.0.0:1111是指通过端口1111可以访问管理页面,访问形式是在浏览器输入ip:1111,这里的ip是指haproxy宿机的ip
stats auth后面是管理页面的账号密码,在stats auth fzjh:fzjh中,账号是fzjh,密码也是fzjh
特别注意:如果租用阿里云服务器,必须要在服务器控制台里对防火墙添加如下规则才能访问63052端口。
在浏览器地址栏输入haproxy宿主机ip:1111就能看到haproxy的管理页面了:
3.2 listen shadowscoks_balance_load段的参数分析
serA_name:server后面首先跟名字,名字随便起呗,自己能够区分就行。紧接着跟这台机器的公网IP+端口。
check:是检测的意思,这段配置很重要。
inter:单位毫秒,我配置的2000,即2000毫秒检测一次目标服务器。
rise2:设定健康状态检查中,某离线的服务器从离线状态转换至正常状态需要成功检查的次数,这里我设置的2次。
fall3:确认服务器从正常状态转换为不可用状态需要检查的次数,这里是3次。
weight:权重,值越大代表这台机器工作的机会越多,这里我们可以把一台线路较好的机器的权重设置高一些。
backup:备用服务器,当所有主力服务器挂掉后就会马上启用备用服务器
bind 0.0.0.0:63052,指需要使用服务器的63052端口
特别注意:如果租用阿里云服务器,必须要在服务器控制台里对防火墙添加如下规则才能访问63052端口。
4、重启haproxy
sudo service haproxy restart
5、其它命令
sudo service haproxy status #查看haproxy的状态
sudo service haproxy stop #停止运行haproxy
卸载方法:
apt-get -y remove haproxy
然后删掉haproxy的配置文件目录:
rm -rf /etc/haproxy
启动:/etc/init.d/haproxy start
停止:/etc/init.d/haproxy stop
重启:/etc/init.d/haproxy restart
重载:/etc/init.d/haproxy reload
状态:/etc/init.d/haproxy status