首页 学习笔记 📖 / 未收录,推送中

请注意,本文最后更新时间:2021-03-10,最后编辑于107天前,内容可能已经不具有时效性,请谨慎参考。

1、综合架构负载均衡

说明:参考:https://www.xiaobai666.top/426.html

2、如何让LNMP架构于存储服务器建立关系

1、找出图片存储的目录

方法一:根据图片链接uri获得图片存储位置

http://www.xiaobai666.top/usr/uploads/2021/01/

url uri

方法二:先定位数据存放的站点目录

find /html/blog -type f -mmin -5       ---5分钟内查找,Mtime参数是按天查找

inotifywait -mrq /html/blog

2、使web服务器和存储服务器建立联系

前提 :存储服务器服务是否正常、编写存储配置文件

## nfs服务器172.16.1.31
showmount -e 172.16.1.31

image-20210308210909252

[root@nfs01 ~]# vim /etc/exports
/test/www 172.16.1.0/24(rw,sync)  
/test/blog 172.16.1.0/24(rw,sync)
/test/bbs 172.16.1.0/24(rw,sync)

systemctl restart nfs

image-20210308211447729

mkdir  /test/{www,blog,bbs}

## web服务器172.16.1.7
[root@web01 ~]# mount -t nfs 172.16.1.31:/test /mnt
[root@web01 ~]# df -h

image-20210308212008315

## web服务器172.16.1.7 
## 将web服务器blog存储的数据进行迁移 
    mv /html/blog/usr/uploads/  /tmp 
    mount -t nfs 172.16.1.31:/test/blog /html/blogusr/uploads
    mv /tmp/2020/ /html/blog/usr/uploads

默认存储服务器无法存储数据:

[root@nfs01 data]# cat /var/lib/nfs/etab 

image-20210308212853553

管理用户无法存储: root_squash — nfsnobody

普通用户无法存储: no_all_squash

解决:

第一个历程: 修改nfs配置文件,定义映射用户为www

## web服务器172.16.1.7上www用户id为1001

 [root@web01 ~]# id www uid=1001(www) gid=1001(www) groups=1001(www)

## 在nfs服务器172.16.1.31上创建一样id为1001的www用户

[root@nfs01 ~]# useradd www -u 1001 [root@nfs01 data]# chown -R www /data

第二个历程: root用户-- 可以上传数据的方法

[root@nfs01 data]# sed -ri.bak 's#(sync)#\1,anonuid=1001,anongid=1001#g' /etc/exports

[root@nfs01 data]# systemctl  reload nfs 

再次上传数据或将数据移回,即可看到数据已同步迁移。问题解决

3、 如何让LNMP架构和数据库服务器建立关系???

为什么要建立联系?因为多台web服务器负载均衡时,额外的一台服务器nfs可以共享文件,但不能共享数据库;此时就另外需要一台数据库服务器作为共享数据库服务器。数据库独立出来

第一个历程: 将web服务器(172.16.1.7)本地数据库数据进行备份

mysqldump -uroot -p --all-database >/tmp/web_back.sql

第二个历程: 将备份数据进行迁移(172.16.1.7)

scp -rp /tmp/web_back.sql 172.16.1.51:/tmp

第三个历程: 恢复数据信息(172.16.1.51)

yum install -y mariadb-server mariadb
systemctl start mariadb.service
systemctl enable mariadb.service
mysqladmin -u root password='123456'
mysql -uroot -p123456 </tmp/web_back.sql
mysql -uroot -p123456
show databases;--查看是否有WordPress

第四个历程: 修改数据库服务器中数据库用户信息

-- 查询数据库用户信息
MariaDB [(none)]> select user,host from mysql.user;
+-----------+-----------+
| user      | host      |
+-----------+-----------+
| root      | 127.0.0.1 |
| root      | ::1       |
|           | localhost |
| root      | localhost |
| wordpress | localhost |   -- 此处localhost默认只能本地连接
|           | web01     |
| root      | web01     |
+-----------+-----------+
7 rows in set (0.00 sec)

-- 优化: 删除无用的用户信息
delete from mysql.user where user="" and host="localhost";
delete from mysql.user where user="" and host="web01";

-- 添加或授权: 添加新的用户信息,允许172.16.1.%网段的主机能远程连数据库
grant all on wordpress.* to 'wordpress'@'172.16.1.%' identified by '123456';
flush privileges; -- 授权后刷新权限

-- 测试是否添加成功(172.16.1.7)
mysql -uwordpress  -p123456 -h 172.16.1.51

第五个历程: 修改web服务器代码文件信息(172.16.1.7/8/9)

vim wp-config.php
/** MySQL hostname */
define( 'DB_HOST', '172.16.1.51' );
## 修改另外两台web
rsync -avz /html/blog/wp-config.php 172.16.1.8:/html/blog/

第六个历程: 停止web服务器上数据库服务(172.16.1.7/8/9)

systemctl stop mariadb.service
systemctl disable mariadb.service

问题01:
数据库服务没有正确启动: Error establishing a database connection 连接不上3306端口
问题02:
PHP服务没有开启,报502错误。客户端请求nginx,nginx需要php处理,但php没有启动。

4) 代码信息迁移问题

web01代码信息迁移到web02服务器,并且修改了网站域名无法正确访问
访问新域名会自动跳转到老的域名

方法一:
修改wordpres后台设置信息,将后台中老的域名改为新的域名
方法二:
修改数据库中的一个表, 在表中修改一个和域名有关的条目信息 (update phpmyadmin)

3、 (反向代理)负载均衡的概念说明

    什么是集群?
    完成相同任务或工作的一组服务器 (web01 web02 web03 -- web集群)
    
    什么是负载均衡?
    1) 实现用户访问请求进行调度分配
    2) 实现用户访问压力分担
    
    什么是反向代理?
    反向代理:     外网 ---> (eth0外网) 代理服务器 (eth1内网) ---> 公司网站服务器web(内网)
                外网用户(客户端)   ---  代理服务器 (服务端)
                代理服务器(客户端) ---  web服务器(服务端)    
    正向代理:   内网(局域网主机)      --- (内网)代理服务器(外网) --- 互联网 --- web服务器(日本)
                                     翻墙的操作

4、 准备负载均衡的环境搭建

集群服务器部署(web01 web02 web03)

负载均衡服务器部署

集群服务器部署:

PS: 集群中每天服务器的配置一模一样

企业环境中:

  1. 先部署好一台LNMP服务器,上传代码信息
  2. 进行访问测试
  3. 批量部署多台web服务器
  4. 将nginx配置文件进行分发
  5. 将站点目录分发给所有主机

虚拟机实验中:下面是在虚拟机实验

  1. 将web01作为模板主机克隆两台主机

修改web02-- 172.16.1.8

[root@web01 ~]# grep 7 /etc/sysconfig/network-scripts/ifcfg-ens3[34]
/etc/sysconfig/network-scripts/ifcfg-ens33:IPADDR=10.0.0.7
/etc/sysconfig/network-scripts/ifcfg-ens34:IPADDR=172.16.1.7

sed -i 's#\.7#.8#g' /etc/sysconfig/network-scripts/ifcfg-ens3[34]
hostnamectl set-hostname web02
grep 8 /etc/sysconfig/network-scripts/ifcfg-ens3[34]
systemctl restart network.service

修改web03-- 172.16.1.9

sed -i 's#\.7#.9#g' /etc/sysconfig/network-scripts/ifcfg-ens3[34]
hostnamectl set-hostname web03
grep 9 /etc/sysconfig/network-scripts/ifcfg-ens3[34]
systemctl restart network.service

2.利用手动方式实现负载均衡:

修改windows的hosts主机地址和域名映射文件

10.0.0.7  blog.moox.com -- 此时在博客上发布时,切换到10.0.0.8或10.0.0.9时不能看到

10.10.0.0.8  blog.moox.com -- 此时在博客上发布时,切换到10.0.0.7或10.0.0.9时不能看到

10.10.0.0.9 blog.moox.com  -- 此时在博客上发布时,切换到10.0.0.8或10.0.0.7时不能看到

以上问题的原因:

手动模拟负载均衡时,上传的文件aa.jpg存放在不同的服务器上(如10.0.0.7),域名映射不同的主机地址(如10.0.0.8)时,由于各服务器之间没有实现文件共享,自然文件就不存在aa.jpg了。

解决办法:共享文件

将各web服务器都共享文件到存储服务器(nfs上)

mount -t nfs 172.16.1.31:/test/blog/ /html/blog/usr/uploads

这样就通过存储服务器实现了个web服务器的文件共享。

负载均衡服务器部署:

模板机克隆一台负载均衡服务器lb01-172.16.1.5
修改IP信息*.5,修改主机名lb01

第一个历程: 安装部署nginx软件

安装nginx源

[root@lb01 ~]# cat /etc/yum.repos.d/nginx.repo 
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

yum 安装

yum install -y nginx 

浏览器网页输入172.16.1.5测试是否安装成功

第二个历程: 编写nginx负载服务配置文件ngx_http_upstream_module --- upstream 负载均衡 OK

ngx_http_proxy_module --- proxy_pass 反向代理

编写/etc/nginx/nginx.conf

cd /etc/nginx && cp nginx.conf{,.bak}
grep -Ev "^$|#" /etc/nginx/nginx.conf.bak > nginx.conf
useradd www -u 1001 -s /sbin/nologin -M 

user www;

编写 /etc/nginx/conf.d/lb.conf

 /etc/nginx/conf.d && grep -Ev "^$|#" default.conf > lb.conf

注意:upstream 模块只能放在http中,也就是放在/etc/nginx/nginx.conf中的http;

但server模块默认也会被加载,所以放在/etc/nginx/conf.d/*.conf中也可以

定义可以将请求分配给哪些服务器

upstream moox {
    server 10.0.0.7:80;
    server 10.0.0.8:80;
    server 10.0.0.9:80;
}

将请求分配给指定集群(即指定组)

server {
    listen       80;
    server_name  www.moox.com;  ## 负载均衡的域名
    location / {
    proxy_pass http://moox;  ## 组名称(集群名称)
    }
}
systemctl reload nginx

第三个历程: 实现负载功能测试

搭建集群测试环境:

各Linux web服务器

for name in www bbs blog;do echo "$name 10.0.0.7">/html/$name/wenwen.html;done

for name in www bbs blog;do echo "$name 10.0.0.8">/html/$name/wenwen.html;done

for name in www bbs blog;do echo "$name 10.0.0.9">/html/$name/wenwen.html;done

## linux /etc/hosts解析

172.16.1.7      web01 www.moox.com bbs.moox.com blog.moox.com  (8,9不解析)
172.16.1.8      web02 www.moox.com bbs.moox.com blog.moox.com  (7,9不解析)
172.16.1.9      web03 www.moox.com bbs.moox.com blog.moox.com  (8,7不解析)
#修改windows解析文件
10.0.0.5    www.moox.com  blog.moox.com bbs.moox.com

测试负载均衡

浏览器输入并刷新: www.moox.com/wenwen.html或bbs.moox.com/wenwen.html
或blog.moox.com/wenwen.html

5、负载均衡访问网站异常排错思路:

第一步: 负载均衡服务器上, 测试后端web节点服务器是否能够正常访问

[root@lb01 conf.d]# curl -H host:www.moox.com 10.0.0.7/wenwen.html
www 10.0.0.7
[root@lb01 conf.d]# curl -H host:www.moox.com 10.0.0.8/wenwen.html
www 10.0.0.8
[root@lb01 conf.d]# curl -H host:www.moox.com 10.0.0.9/wenwen.html
www 10.0.0.9

第二步: 负载均衡服务器上, 利用curl命令访问负载均衡服务器

主配置文件/etc/nginx/nginx.conf和
负载均衡文件/etc/nginx/conf.d/lb.conf

第三步: 打开一个xshell连接 ping www.moox.com

第四步: 配置文件编写不正确

6、 负载均衡配置模块详细说明

ngx_http_upstream_module --- upstream 负载均衡 OK

ngx_http_proxy_module --- proxy_pass 反向代理

ngx_http_upstream_module --- upstream

实现不同调度功能

## /etc/nginx/conf.d/lb.conf 

upstream moox { 

server 10.0.0.7:80; server 10.0.0.8:80; server 10.0.0.9:80;

 } 

curl -H host:www.moox.com 10.0.0.5:/wenwen.html
2. 权重分配请求(weight)
## /etc/nginx/conf.d/lb.conf
upstream moox {
    server 10.0.0.7:80 weight=3; -- 权重值越大,责任越大
    server 10.0.0.8:80 weight=2;
    server 10.0.0.9:80 weight=1;
}
测试:
curl -H host:www.moox.com 10.0.0.5:/wenwen.html
3. 实现热备功能(backup)
## /etc/nginx/conf.d/lb.conf
upstream moox {
    server 10.0.0.7:80;
    server 10.0.0.8:80;
    server 10.0.0.9:80 backup; -- 只有当7,8都全部不能使用时,backup的9才能使用
}

定义最大失败次数 健康检查参数
max_fails=5

定义失败之后重发的间隔时间 健康检查参数
fail_timeout=10s 会给失败的服务器一次机会

实现不同调度算法

rr 轮询调度算法

wrr 权重调度算法

ip_hash 算法 (出现反复登录的时候)

least_conn 根据服务器连接数分配资源(分配给连接少的)

fair -- 分配给响应最快的(目前已经不支持次功能)

ngx_http_proxy_module --- proxy_pass

proxy_set_header Host

访问不同的网站地址,不能显示不同的网站页面

##proxy_set_header Host $host;  

##放在/etc/nginx/conf.d/lb.conf的每个server中location下
server {
listen       80;
server_name  bbs.moox.com;
location / {
    proxy_pass http://moox_lb;
    proxy_set_header Host $host;   ## 注意位置,作用是将负载的主机设置为客户端请求的主机
}
proxy_set_header X-Forwarded-For

访问网站用户地址信息无法进行分析统计

说明:在统计访问地址时, /var/log/nginx/access.log中第一列是web主机地址或负载均衡服务器主机地址,
最后一列是客户端主机地址,在/etc/nginx/nginx.conf的log_format中定义的最后胡一个字段"$http_x_forwarded_for"

proxy_set_header X-Forwarded-For $remote_addr;

$remote_addr表示客户端地址

负载均衡服务器/etc/nginx/conf.d/lb.conf中每个serve中的location

server {
    listen       80;
    server_name  bbs.moox.com;
    location / {
        proxy_pass http://moox_lb;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr; ## bbs和www所在server也要添加
    }

网页刷新测试www.moox.com/wenwen.html

tail -f /var/log/nginx/www_access.log
10.0.0.5 - test [24/Apr/2020:10:51:27 +0800] "GET /wenwen.html HTTP/1.0" 
200 13 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" 
"10.0.0.1"
proxy_next_upstream

访问负载均衡会出现错误页面,影响用户体验

当页面访问错误,超时,无效头部等情况,如web01中mv /html/www/wenwen.html /tmp
此时由于负载均衡,页面能正常访问,但有时会报404-NOT FOUND错误,影响体验

proxy_next_upstream error timeout http_404 http_502 http_403; --更多的可加http_*;

server {
    listen       80;
    server_name  www.moox.com;
    location / {
        proxy_pass http://moox_lb;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr; 
    proxy_next_upstream error timeout http_404 http_502 http_403;
    }

7、总结:

  1. 总结Module ngx_http_proxy_module
  2. 总结Module ngx_http_upstream_module
  3. 高可用服务 keepalived
    提前克隆好一台新的lb02主机 lb01+lb02 高可用集群(HA)

8、负载均衡完整配置文件

[root@lb01 conf.d]# cat lb.conf 
upstream moox_lb{
    server 10.0.0.7:80 ;
    server 10.0.0.8:80 ;
    server 10.0.0.9:80 ;
}
server {
    listen       80;
    server_name  www.moox.com;
    location / {
        proxy_pass http://moox_lb;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr; 
    proxy_next_upstream error timeout http_404 http_502 http_403;
    }
}
server {
    listen       80;
    server_name  blog.moox.com;
    location / {
        proxy_pass http://moox_lb;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr; 
    proxy_next_upstream error timeout http_404 http_502 http_403;
    }
}
server {
    listen       80;
    server_name  bbs.moox.com;
    location / {
        proxy_pass http://moox_lb;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr; 
    proxy_next_upstream error timeout http_404 http_502 http_403;
    }
}
[root@lb01 conf.d]#

本文参考:http://www.cnblogs.com/moox/


您阅读这篇文章共花了:



文章评论

评论已关闭

目录