首页 > 自动化运维 > > 51day-负载均衡(转载)

什么负载均衡?负载均衡的存在意义?
负载均衡是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。
如何搭建负载均衡?
硬件设备:F5,A10,Redware
开源软件:nginx,Haproxy,lvs
开源软件负载均衡区别:lvs,haproxy,nginx区别常用负载均衡软件区别?
命名上不同
负载均衡:把用户的请求做一个转发 lvs属于4层负载均衡,传输层tcp/udp 端口号,最多对端口号进行识别
反向代理:代替用户去找,再发给用户nginx;haproxy,4层和7层的负载均衡,应用层,进行http协议uri转发。
负载均衡需要准备的环境
lb01:10.0.0.5 ; web01:10.0.0.7 ; web02:10.0.0.8
服务配置:web01,02要一致。
1.配置nginx安装源然后安装
[oot@lb01 ~]# vim /etc/yum.repos.d/nginx.repo
▽
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1第一步:编辑www的配置文件web01;02都要编辑
[root@wed01 /etc/nginx/conf.d]# cat 01-
server {
listen 80;
server_name
access_log /var/log/nginx/access_ main ;
root /app/www; \\站点目录
location / {
index index.html index.htm;
}
}
编辑blog文件
[root@wed01 /etc/nginx/conf.d]# cat 02-blog.conf
server {
listen 80;
server_name blog.oldboy.com;
access_log /var/log/nginx/access_blog.log main;
root /app/blog; \\站点目录
location / {
index index.php index.html index.htm;
}
location ~* \.(php|php5)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}重启nginx检查语法
创建站点目录,并且写入内容
mkdir -p /app/{www,blog}
for n in www blog ; do echo $n.oldboy.com >/app/$n/index.html ;done
[root@wed01 /app]# tree
.
├── blog
│ └── index.html
├── logs
└── www
└── index.html在本地windows的hosts里添加一下。

去db01上curl一下
curl -H Host: 10.0.0.[7-8]或者curl -H Host:blog.oldboy.com 10.0.0.[7-8]/index.html
[root@ld01 ~]# curl -H Host: 10.0.0.[7-8]
[1/2]: 10.0.0.7 --> <stdout>
--_curl_--10.0.0.7
wed01
[2/2]: 10.0.0.8 --> <stdout>
--_curl_--10.0.0.8
web-02
[root@ld01 ~]# curl -H Host:blog.oldboy.com 10.0.0.[7-8]
[1/2]: 10.0.0.7 --> <stdout>
--_curl_--10.0.0.7
wed01 blog.oldboy.com
[2/2]: 10.0.0.8 --> <stdout>
--_curl_--10.0.0.8
web-02 blog.oldboy.com
[root@ld01 ~]# 编辑lb01
2.为web01 web02首页文件追加内容让容易区分
for n in www blog ; do echo `hostname` $n.oldboy.com >/app/$n/index.html ;done
[root@web01 conf.d]# cat /app/www/index.html
web01
[root@web02 conf.d]# cat /app/blog/index.html
web02 blog.oldboy.com编辑lb01 /etc/nginx/nginx.conf
[root@lb01 ~]# vim /etc/nginx/nginx.conf
...
upstream web_pools {
server 10.0.0.7:80;
server 10.0.0.8:80;
}
# include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name ;
location / {
proxy_pass http://web_pools;
}
}
}
[root@lb01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01 ~]# systemctl restart nginx.在lb01上curl一下
[root@lb01 ~]# curl 10.0.0.7
web01
[root@lb01 ~]# curl 10.0.0.8
web02
[root@lb01 ~]#
[root@lb01 ~]#
[root@lb01 ~]# curl 10.0.0.5
web02
[root@lb01 ~]# curl 10.0.0.5
web01
[root@lb01 ~]# curl 10.0.0.5
web02
[root@lb01 ~]# curl 10.0.0.5
web01 三、抓包

四、upstream模块参数:
server —— RS配置,可以是ip或域名
weight ——权重
max_fails ——失败次数
fail_timeout =10s ——多久后在检查一遍
backup ——如果加上backup 会在池塘中其他机器都挂掉 才会启动
down 让服务器不可用




五、配置权重
weight=1;
upstream web_pools {
server 10.0.0.7:80 weight=2;
server 10.0.0.8:80 weight=1;
}
=======================================
[root@lb01 ~]# curl 10.0.0.5
web01
[root@lb01 ~]# curl 10.0.0.5
web01
[root@lb01 ~]# curl 10.0.0.5
web02
[root@lb01 ~]# curl 10.0.0.5
web01
[root@lb01 ~]# curl 10.0.0.5
web01
[root@lb01 ~]# curl 10.0.0.5
web02 六、CND加速缓存
网站加速 缓存网站静态页面 视频(切片)
用户先访问cdn
cdn缓存没有 就转到源站
cdn公司介绍:蓝汛 网宿 阿里云

七、配置文件中添加server模块的参数(lb01)
weight 权重;
max_fails 健康检查,失败次数;
fail_timeout 多久后在检查一遍
修改配置模块参数
upstream web_pools {
server 10.0.0.7:80 weight=2 max_fails=3 fail_timeout=10s;
server 10.0.0.8:80 weight=1 max_fails=3 fail_timeout=10s;
}
测试关闭一台后,是否还能访问:
for n in {1..1000};do curl 10.0.0.5/index.html ;sleep 1;done
八、请求访问第二个站点http://blog.oldboy.com



2.修改 请求头
proxy_set_header Host $host;
server {
listen 80;
server_name
location / {
proxy_pass http://web_pools;
}
}
server {
listen 80;
server_name blog.oldboy.com;
location / {
proxy_pass http://web_pools;
proxy_set_header Host $host;
}
}
[root@lb01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01 ~]# systemctl restart nginx3.再访问就成功了

九、显示客户端的地址,并记录到日志中
proxy_set_header X-Forwarded-For $remote_addr;
server {
listen 80;
server_name
location / {
proxy_pass http://web_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 80;
server_name blog.oldboy.com;
location / {
proxy_pass http://web_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}这里测试的是在lb01上curl的web01


十、添加访问控制
如果某些网段访问量成千上万,特别高的话,可能是被入侵了
需要给这个网址做限制访问
server {
listen 80;
server_name
location / {
if ($remote_addr ~ "^192.168.22.") { \\指定禁止访问的网段
return 403 "别捣乱"; \\定义的是指定网段中,客户访问后返回的内容
}
proxy_pass http://web_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}十一、防火墙规则—iptables
iptables详细用法
iptables命令_Linux iptables 命令用法详解:Linux上常用的防火墙软件
--dport 指定端口号
iptables -A INPUT -p tcp -s 192.168.22.0/24 -j DROP
-A:向规则链中添加条目;
-P:定义规则链中的默认目标;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
指定网段,配置时不要把自己挡外面,这就要跑机房了~


-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-X:删除用户自定义的链


=======================================================
以上转自:
linux丶晨星 - 简书
30-33:表示创建池子,池子里的机子就是负载均衡控制的web服务器
web_pools:表示池子
weight=1:权重,比如两台web01设置为2,web02设置为1,来三个请求,web01就会承担两个任务,web02承担一个,企业中有的服务器工作能力好,就可以相映的多承担
max_fails=3:访问你三次之后,如果还是有问题,则不会再给你分配任务,会直接挑选下一个web服务器进行运行
fail_timeout=10s:出现问题后,每隔10秒,再次检查一下问题机器是否恢复。检查后发现已经恢复,则正常运行使用,如果还是有问题,则会挑选下一个web服务器进行运行
36-50:
proxy_pass http://web_pools; :用这个池子找想要的东西
proxy_set_header Host $host; :解析用户想要的请求头,发送到web服务器里
proxy_set_header X-Forwarded-For $remote_addr; :显示用户的ip

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3119760/ ,如需转载,请注明出处,否则将追究法律责任。