负载均衡环境要搭建于Linux服务器环境下,且要搭建出高可用的那种,这属于运维工程师必须得掌握的硬核技能。
这篇文章会依据Nginx 1.10.2版本,一步一步亲自示范怎样于一台主服务器(A)跟两台应用服务器(B、C)之间开展负载均衡配置,并且联合云服务器、本地域名解析以及Docker部署思维,达成高可用分发策略。
所有步骤均经过实操验证,适合用于测试环境搭建或生产前演练。
环境准备与服务器规划
本次演示使用三台内网服务器:
+ 主服务器(A):192.168.8.142(分发请求)
应用服务器(B),其地址为192.168.8.143,它具备处理请求的功能。
增添,应用服务器,其为C,地址是192.168.8.144,此服务器用于处理请求。
操作系统全都是Linux,当中包含CentOS 7,Nginx版本达到了1.10.2。
处于实际的云服务器环境里,能够替换成公网IP,或者弹性IP,其配置方式是一样的。
A服务器Nginx负载均衡配置
去到A服务器进行登录操作,于Nginx配置目录(像 /etc/nginx/conf.d/)那儿创建一个新的配置文件,举例说明就是 loadbalance.conf,将以下内容写入进去:
upstream backend {
server 192.168.8.143;
server 192.168.8.144;
}
server {
listen 80;
server_name test.local; # 本地测试域名
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
存在这样一个配置,它对一个名为 backend 的 upstream 组进行了定义,这个组里面包含着两台应用服务器。
所有请求通过 proxy_pass 转发给该组。
#
# The test server
#
upstream test.cc {
server 192.168.8.143;
server 192.168.8.144;
}
server {
listen 80;
server_name test.cc;
location / {
proxy_pass http://test.cc;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
先进行保存操作,之后执行由nginx与负号加字母t组成的指令对语法予以检查,当确定无误以后对Nginx实施重启操作。
BC服务器Nginx配置
在两台用于应用的服务器之上,分别去创建配置文件,其举例为像 /etc/nginx/conf.d/test.conf 这样的,内容是如下所述的。
server {
listen 80;
server_name test.local;
root /usr/share/nginx/html/test;
location / {
index index.html index.htm;
}
}
保存之后,同样运用 nginx -t 去检验一下配置,在没有任何错误之后,重新启动Nginx服务。
本地Hosts文件解析
若运用本地测试域名,像 test.local 这样的,就必须于本地开发机,也就是 Windows 或者 Mac 的 hosts 文件里增添解析。
#
# The test server
#
server {
listen 80;
listen [::]:80;
server_name test.cc;
index index.php index.html index.htm;
root /usr/share/nginx/html/test;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
192.168.8.142 test.local
这样访问 test.local 时,请求将指向主服务器A。
验证负载均衡效果
于B服务器的,位于/usr/share/nginx/html/test这个目录之处,去创建名为index.html的文件,并且写入不一样的内容(像是分别写入,Server B以及,Server C),于C服务器的,对应的同样位于/usr/share/nginx/html/test目录下,进行相同操作。
192.168.8.142 test.cc
在浏览器里多次去访问 http://test.local,当刷新页面之时会见到内容交替着出现,这表明请求已被均衡去分发至两台服务器,负载均衡的配置是成功的。
进阶负载均衡策略
Nginx 提供了多种负载均衡算法,适用于不同业务场景:
1. 轮询(默认)
有请按照顺序逐个分发给后端服务器,倘若某一台服务器处于不可用状态,便会自动将其排除。
2. 最少连接
upstream test.cc {
server 192.168.8.143 weight=1;
server 192.168.8.144 weight=2;
server 192.168.8.144 down;
}
// weight 权重,值越大,则被访问的概率越大
// down 表示当前服务器不参与负载均衡,也就是说不会被访问到
// 其他配置待补充
首先会优先去把请求分发给服务器,而这个服务器是当前活跃连接数最少的那种,这种分发方式适合长连接发生的场景。
配置方式:
upstream backend {
least_conn;
server 192.168.8.143;
server 192.168.8.144;
}
3. 权重(Weight)
根据服务器性能分配权重,权重越高,被访问次数越多。
例如让144处理更多请求:
upstream test.cc {
server 192.168.8.143;
server 192.168.8.144;
}
upstream backend {
server 192.168.8.143 weight=1;
server 192.168.8.144 weight=2;
}
4. IP哈希(ip_hash)
根据客户端IP所生成的哈希值来分配服务器,以此确保同一客户端一直都能访问同一台后端服务器那般,这适用于需要保持Session的场景下。
upstream backend {
ip_hash;
server 192.168.8.143;
server 192.168.8.144;
}
upstream test.cc {
least_conn;
server 192.168.8.143;
server 192.168.8.144;
}
扩展思考:云环境与容器化部署
于生产环境里,提议把Nginx布置于云服务器之上,且联合Docker容器化应用,加以实施。
举个例子,能够把B、C服务器替换成Docker容器,借助动态服务发现,像是Consul或者etcd,自动去更新upstream配置,达成更为灵活、弹性的架构。
关于域名这块儿,提议于阿里云、腾讯云等这类平台去注册正式的域名,并且凭借CNAME解析到主服务器那儿,防止依靠本地的hosts文件。
对于中小型Web项目负载均衡搭建而言,上述配置过程不仅简单,而且高效。
要想在Linux服务器之上迅速搭建起高可用架构从而铺就后续开展容器化以及微服务演进的稳固根基,那就得掌握Nginx upstream的核心配置。
upstream test.cc {
server 192.168.8.143 weight=1;
server 192.168.8.144 weight=2;
}

Comments NOTHING