nginx负载均衡
1.把之前做的wp,zh全部推翻,还原快照
2.重新部署wp和知乎(两台)
3.前面加上负载均衡
4.总结负载均衡文档,调度算法
做题思路
第一步还原快照,第二步先把环境准备出来,需要使用的虚拟机和搭建的服务
做到环境统一,先把web01和web02配置出来,然后配置数据库,做nfs共享存储,最后做代理服务器,都完成后画图总结负载均衡的调度算法
环境准备
服务器名称 | 外网IP | 内网IP | 搭建服务 | 角色 |
---|---|---|---|---|
web01 | 10.0.0.7 | 172.16.1.7 | nginx php-fpm nfs | web服务器 |
web02 | 10.0.0.8 | 172.16.1.8 | nginx php-fpm nfs | web服务器 |
nfs | 10.0.0.31 | 172.16.1.31 | nfs | 共享存储服务器 |
db01 | 10.0.0.51 | 172.16.1.51 | mariadb-server | 数据库服务器 |
lb01 | 10.0.0.5 | 172.16.1.5 | nginx | 代理服务器 |
首先还原快照
安装服务
web01
# 上传nginx和php-fpm的压缩包
[root@web01 ~]# rz -E
# 解压
[root@web01 ~]# tar xf php_nginx.tgz
# 进入站点目录安装
[root@web01 ~]# cd root/nginx_php/
[root@web01 nginx_php]# rpm -Uvh *
# 创建用户组和用户
[root@web01 nginx_php]# groupadd www -g 666
[root@web01 nginx_php]# useradd www -u 666 -g 666 -s /sbin/nologin -M
# 修改nginx的主配置文件
[root@web01 ~]# cd /etc/nginx
[root@web01 nginx]# vim nginx.conf
user www;
worker_processes 1;
# 修改php-fpm的配置文件
[root@web01 nginx]# vim /etc/php-fpm.d/www.conf
user = www
; RPM: Keep a group allowed to write in log dir.
group = www
# 编辑nginx的配置文件
[root@web01 nginx]# vim zh.test.com
[root@web01 nginx]# vim blog.test.com
# 检测语法
[root@web01 nginx]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# 启动nginx并加入开机自启
[root@web01 nginx]# systemctl start nginx
[root@web01 nginx]# systemctl enable nginx
# 启动php-fpm并加入开机自启
[root@web01 nginx]# systemctl start php-fpm
[root@web01 nginx]# systemctl enable php-fpm
# 创建站点目录并进入站点目录上传服务的压缩包
[root@web01 nginx]# mkdir /code/zh -p
[root@web01 nginx]# mkdir /code/wordpress
[root@web01 nginx]# cd /code/zh
[root@web01 zh]# rz
[root@web01 zh]# cd ../wordpress/
[root@web01 wordpress]# rz
# 解压并授权
[root@web01 wordpress]# tar xf wordpress-5.0.3-zh_CN.tar.gz
[root@web01 wordpress]# mv wordpress/* ./
[root@web01 wordpress]# cd ../zh/
[root@web01 zh]# unzip WeCenter_3-2-1.zip
[root@web01 zh]# mv WeCenter_3-2-1/* ./
# 授权目录
[root@web01 ~]# chown www.www /code -R
# 域名解析
# 浏览器访问
web02
# web02和web01操作方法差不多,我在做web01的时候把web02一起做了
# 当然有种更快的方法就是把web01的配置文件和站点目录下的东西直接scp传到web02,这里就不操作了
mariadb-server
# 下载mariadb-server
[root@db01 ~]# yum install -y mariadb-server
# 启动并加入开机自启
[root@db01 ~]# systemctl start mariadb.service
[root@db01 ~]# systemctl enable mariadb.service
# 给root用户添加密码
[root@db01 ~]# mysqladmin -uroot password '123'
# 登录
[root@db01 ~]# mysql -uroot -p123
# 创建库
MariaDB [(none)]> create database wordpress;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> create database zh ;
Query OK, 1 row affected (0.00 sec)
# 创建用户和密码
MariaDB [(none)]> grant all on *.* to wzh_user@'%' identified by '111'
-> ;
Query OK, 0 rows affected (0.00 sec)
nfs
## 下载nfs-utils
[root@nfs ~]# yum install -y nfs-utils
# 编辑配置
[root@nfs ~]# vim /etc/exports
/wp_data 172.16.1.0/24(sync,rw,all_squash,anonuid=666,anongid=666)
/zh_data 172.16.1.0/24(sync,rw,all_squash,anonuid=666,anongid=666)
# 创建用户
[root@nfs ~]# groupadd www -g 666
[root@nfs ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
# 创建挂载目录
[root@nfs ~]# mkdir /zh_data
[root@nfs ~]# mkdir /wp_data
# 目录授权
[root@nfs ~]# chown www.www /zh_data /wp_data
# 启动并加入开机自启
[root@nfs ~]# systemctl start nfs-server
[root@nfs ~]# systemctl enable nfs-server
web01和web02连接nfs
### 把nfs的共享目录分别挂载在博客和知乎的目录下
[root@web01 ~]# mount -t nfs 172.16.1.31:/wp_data /code/wordpress/wp-content/uploads/
[root@web02 ~]# mount -t nfs 172.16.1.31:/wp_data /code/wordpress/wp-content/uploads/
[root@web01 ~]# mount -t nfs 172.16.1.31:/zh_data /code/zh/uploads/
[root@web02 ~]# mount -t nfs 172.16.1.31:/zh_data /code/zh/uploads/
## 注意的地方:如果之前没有上传过图片没有uploads目录,需要手动创建,如果有这个目录要先把目录里面的东西scp拷贝到nfs的共享目录里面
负载均衡
lb01
# 安装nginx,上传nginx的压缩包到服务器
[root@lb01 ~]# rz
# 解压
-rw-r--r-- 1 root root 20453237 May 22 15:20 php_nginx.tgz
[root@lb01 ~]# tar xf php_nginx.tgz
# 安装nginx
[root@lb01 ~]# cd root/nginx_php/
[root@lb01 nginx_php]# yum localinstall nginx-1.18.0-1.el7.ngx.x86_64.rpm
# 编辑nginx的proxy的优化文件,以后可以直接调用参数
[root@lb01 nginx]# vim /etc/nginx/proxy_params
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
proxy_buffering on;
proxy_buffers 8 4k;
proxy_buffer_size 4k;
# 编辑nginx的代理文件
# 需要用到 ngx_http_upstream_module模块
# 官网写法
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
# 实际编辑配置文件写法
[root@lb01 ~]# vim /etc/nginx/conf.d/blog.wzh.com.conf
upstream blog {
server 172.16.1.7;
server 172.16.1.8;
}
server {
listen 80;
server_name blog.test.com;
location / {
proxy_pass http://blog;
include proxy_params;
}
}
[root@lb01 ~]# vim /etc/nginx/conf.d/zh.wzh.com.conf
upstream zh {
server 172.16.1.7;
server 172.16.1.8;
}
server {
listen 80;
server_name zh.test.com;
location / {
proxy_pass http://zh;
include proxy_params;
}
}
# 检查语法
[root@lb01 ~]# nginx -t
# 开启nginx并加入开机自启
[root@lb01 ~]# systemctl start nginx
[root@lb01 ~]# systemctl enable nginx
# 根据权重分配请求,默认都是1,根据不同的服务器的核数处理能力分配
# 编辑配置文件
[root@lb01 ~]# vim /etc/nginx/conf.d/zh.wzh.com.conf
upstream zh {
server 172.16.1.7 weight=4;
server 172.16.1.8 weight=1;
}
server {
listen 80;
server_name zh.test.com;
location / {
proxy_pass http://zh;
include proxy_params;
}
}
# 做域名解析,把域名解析在这台代理的ip
window+r 打开运行框,输入drivers,然后点开etc目录用管理员身份打开hosts文件做域名解析
# 完成后浏览器访问
加权重分配之后
nginx负载均衡分配方式
轮询分配
# 按照时间顺序逐一分配到后端不同的服务器这个是默认的分配方式
加权轮询
#根据权重,将请求分配到后端的服务器
ip_hash
# 这个写法直接在配置文件里面加入ip_hash;就可以了
每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一
个后端服务器
**url_hash **
按照访问URL的hash结果来分配请求,是每个URL定向到同一个后
端服务器
根据用户访问的URL分配,这个很少用
最小连接数分配
后端哪台机器分配的请求数量最少,就给哪台机器分配