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分配,这个很少用

最小连接数分配

后端哪台机器分配的请求数量最少,就给哪台机器分配

posted @ 2020-07-23 16:12  王顺子  阅读(156)  评论(0编辑  收藏  举报