day33-负载均衡实战

01.问题总结
bash 复制代码
1.rsync同步注意目录加/和不加/的区别
2.安装wordpress过程中禁止使用IP安装,解析成域名安装
比如安装过程 10.0.0.7--->填写数据库信息--->写入数据库中
如果安装完成后再使用www.wp.com访问,不能访问页面乱码的问题。
3.挂载wordpress挂载uploads目录 在往下一级以时间命名
[root@web01:~]#df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               459M     0  459M   0% /dev
tmpfs                  475M     0  475M   0% /dev/shm
tmpfs                  475M   31M  444M   7% /run
tmpfs                  475M     0  475M   0% /sys/fs/cgroup
/dev/mapper/klas-root   47G  4.5G   43G  10% /
tmpfs                  475M     0  475M   0% /tmp
/dev/sda1             1014M  169M  846M  17% /boot
172.16.1.31:/data/wp    47G  3.8G   44G   8% /code/wp/wp-content/uploads
4.访问域名的时候,浏览器默认将访问的http://www.wp.com ---修改成https://www.wp.com


5.排查缓存问题直接使用curl命令
在web服务器做hosts解析
[root@web01:conf.d]#cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.7  www.wp.com

[root@web01:conf.d]#curl www.wp.com

6.导出数据库vim检查过滤一下 有没有数据信息


7.会话的问题,目录权限问题
[root@web01:~]# ll /var/lib/php/session/ -d
drwxrwx--- 2 www www 279 Aug  9 08:45 /var/lib/php/session/

分享搭建过程中的一些错误。
02.负载均衡:
bash 复制代码
面试题: 说一下如何实现的负载均衡
1.使用的proxy_pass模块
2.通过proxy_pass模块转发给upstream模块定义的地址池
3.使用的是默认的rr轮训算法分发到后端的服务器

负载均衡配置:

bash 复制代码
WEB01-->静态页面 www.lb.com 显示内容 web01.......
WEB02-->静态页面  www.lb.com 显示内容 web02......
lb01--->负载均衡 转发到后端两台web服务器


WEB01配置静态页面
[root@web01:conf.d]#cat web01.conf
server {
	listen 80;
	server_name www.lb.com;

	location / {
	root /code;
	index index.html;
	}
}

[root@web01:conf.d]#echo web01........... > /code/index.html

测试语法并重启nginx
[root@web01:conf.d]#nginx -t
[root@web01:conf.d]#systemctl restart nginx

hosts解析
10.0.0.7  www.lb.com

浏览器测试访问
www.lb.com
浏览器测试是否显示web01......

WEB02配置静态页面
a[root@web02:conf.d]#cat web02.conf
server {
	listen 80;
	server_name www.lb.com;

	location / {
	root /code;
	index index.html;
	}
}

[root@web02:conf.d]#echo web02...... > /code/index.html

测试语法并重启
[root@web02:conf.d]#nginx -t
[root@web02:conf.d]#systemctl restart nginx

hosts解析
10.0.0.8 www.lb.com

浏览器测试是否显示web02......



负载均衡配置:

创建/etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;


[root@lb01:conf.d]#cat proxy.conf
upstream webs {
	server 10.0.0.7;
	server 10.0.0.8;
}
server {
	listen 80;
	server_name www.lb.com;

	location / {
	proxy_pass http://webs;
	include proxy_params;
	}
}

语法检测并重启服务
[root@lb01:conf.d]#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:conf.d]#systemctl restart nginx

修改hosts指向到10.0.0.5
10.0.0.5 www.lb.com




配置wordpress和zh phpshe业务实现负载均衡
[root@lb01:conf.d]#cat proxy.conf
upstream webs {
	server 10.0.0.7;
	server 10.0.0.8;
}
server {
	listen 80;
	server_name www.lb.com;

	location / {
	proxy_pass http://webs;
	include proxy_params;
	}
}
server {
        listen 80;
        server_name www.wp.com;

        location / {
        proxy_pass http://webs;
        include proxy_params;
        }
}


[root@lb01:conf.d]#vim proxy.conf
[root@lb01:conf.d]#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:conf.d]#systemctl restart nginx
03.负载均衡问题
bash 复制代码
默认Nginx负载机制,如果后端Nginx服务挂掉则不会继续访问。
如果后端是php或者数据库服务挂掉,还是会继续访问后端服务器,
会导致用户访问的时候,数据库无法进行响应,导致用户体验不好。
增加一个配置,除Nginx以外的服务挂掉,自动访问下一个web服务器

[root@lb01:conf.d]#cat proxy.conf
upstream webs {
	server 10.0.0.7;
	server 10.0.0.8;
}
server {
	listen 80;
	server_name www.lb.com;

	location / {
	proxy_pass http://webs;
	include proxy_params;
	}
}
server {
        listen 80;
        server_name www.wp.com;

        location / {
        proxy_pass http://webs;
        include proxy_params;
	    proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
      		# 如果用户访问的页面出现 500 502 503 504错误则自动访问下一个服务器。
        }
}
04.Nginx 负载均衡面试题
bash 复制代码
1.如何实现的负载均衡
2.负载均衡的调度算法
rr轮训      默认的
weight     加权轮循
ip_hash    ip哈希
url_hash   url哈希
least_conn 最少链接数


rr轮询配置方式
[root@lb01:conf.d]#cat proxy.conf
upstream webs {
	server 10.0.0.7;
	server 10.0.0.8;
}


加权轮询配置方式:
[root@lb01:conf.d]#cat proxy.conf
upstream webs {
	server 10.0.0.7 weight=5;   # 配置每次处理5次请求
	server 10.0.0.8;
}

配置ip哈希:
[root@lb01:conf.d]#cat proxy.conf
upstream webs {
	ip_hash;
	server 10.0.0.7;
	server 10.0.0.8;
}

面试题: 以上三种算法的区别
05.Nginx 后端服务器状态
bash 复制代码
upstream webs {
        server 10.0.0.30 down; # 不参与负载的调度
        server 10.0.0.20;
        server 10.0.0.10;
        server 10.0.0.9;
        server 10.0.0.8 backup; # 类似备胎 其他服务器都挂掉后,10.0.0.8才进入负载的调度
}
06.Nginx 编译安装
bash 复制代码
什么情况使用编译安装:
特点: 自定义安装位置
	 自定义模块

编译安装步骤:
1.安装依赖
[root@lb01:~]#yum install -y gcc glibc gcc-c++ pcre-devel openssl-devel patch

2.下载nginx源码包(下载是和我们当前使用的对应的版本)
[root@lb01:~]#nginx -v
nginx version: nginx/1.26.1

[root@lb01:~]#wget http://nginx.org/download/nginx-1.26.1.tar.gz

解压代码:
[root@lb01:~]#tar xf nginx-1.26.1.tar.gz
[root@lb01:~]#ll
total 1216
drwxr-xr-x 8  502 games     158 May 29 22:30 nginx-1.26.1



3.下载第三方健康状态检查模块
wget https://github.com/yaoweibin/
nginx_upstream_check_module/archive/master.zip
解压代码
[root@lb01:~]#unzip master.zip
total 1396
-rw-r--r-- 1 root root   177080 Aug  9 11:19 master.zip
drwxr-xr-x 8  502 games     158 May 29 22:30 nginx-1.26.1
-rw-r--r-- 1 root root  1244738 May 29 22:30 nginx-1.26.1.tar.gz
drwxr-xr-x 6 root root     4096 Nov  6  2022 nginx_upstream_check_module-master


4.打补丁
[root@lb01:~]#cd nginx-1.26.1/
patch -p1 <../nginx_upstream_check_module-master/check_1.20.1+.patch

4.重新配置nginx
[root@lb01:~]#cd nginx-1.26.1/
./configure --prefix=/etc/nginx

5.编译并安装
[root@lb01:nginx-1.26.1]#make && make install

查看编译后的结果:
[root@lb01:~]#nginx -V
nginx version: nginx/1.26.1
built by gcc 7.3.0 (GCC)
built with OpenSSL 1.1.1f  31 Mar 2020
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx



6.使用模块
[root@lb01:conf.d]#cat up.conf
upstream web {
    server 172.16.1.7:80 max_fails=2 fail_timeout=10s;
    server 172.16.1.8:80 max_fails=2 fail_timeout=10s;
    check interval=3000 rise=2 fall=3 timeout=1000 type=tcp;
    #interval  检测间隔时间,单位为毫秒
    #rise      表示请求2次正常,标记此后端的状态为up
    #fall      表示请求3次失败,标记此后端的状态为down
    #type      类型为tcp
    #timeout   超时时间,单位为毫秒
}

server {
    listen 80;
    server_name www.zh.com;
    location / {
        proxy_pass http://web;
        include proxy_params;
    }

    location /upstream_check {
        check_status;				# 使用的新增加的模块
    }
}
检查语法并重启
[root@lb01:conf.d]#nginx -t

重启Nginx服务
[root@lb01:conf.d]#systemctl restart nginx
浏览器访问测试:
10.0.0.5 www.zh.com


1.下载源码包
2.configure配置 可以修改位置 模块信息
3.make
4.make install
07.负载均衡会话保持
bash 复制代码
phpmyadmin业务通过页面管理数据库,
phpmyadmin业务会将会话保存到自己本地磁盘。
1.web01部署phpmyadmin业务
[root@web01:conf.d]#cat admin.conf
server {
        listen 80;
        server_name www.admin.com;
        root /code/admin;

        location / {
                index index.php index.html;
        }

        location ~ \.php$ {
      fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include fastcgi_params;
        }
}

语法测试并重启
[root@web01:conf.d]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01:conf.d]#systemctl restart nginx


部署代码
[root@web01:conf.d]#mkdir /code/admin
[root@web01:conf.d]#cd /code/admin

[root@web01:admin]# wget https://files.phpmyadmin.net/phpMyAdmin
/4.8.4/phpMyAdmin-4.8.4-all-languages.zip

解压代码:
[root@web01:admin]#unzip phpMyAdmin-4.8.4-all-languages.zip
[root@web01:admin]#mv phpMyAdmin-4.8.4-all-languages/* .

[root@web01:~]#chown -R www.www /var/lib/php/session

配置代码连接数据库IP地址
[root@web01:admin]#cp config.sample.inc.php config.inc.php
[root@web01:admin]#grep -n 172 config.inc.php
31:$cfg['Servers'][$i]['host'] = '172.16.1.51';

hosts解析
10.0.0.7 www.admin.com
测试web01访问www.admin.com

查看session


2.web02部署phpmyadmin业务
[root@web02:conf.d]#cat admin.conf
server {
        listen 80;
        server_name www.admin.com;
        root /code/admin;

        location / {
                index index.php index.html;
        }

        location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include fastcgi_params;
        }
}

将web01的代码目录拷贝到web02
[root@web02:conf.d]#scp -r 10.0.0.7:/code/admin /code/

语法测试并重启
[root@web02:conf.d]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web02:conf.d]#systemctl restart nginx


又是权限问题,又他妈是权限问题i
[root@web02:~]#chown -R nginx.nginx /var/lib/php/session
[root@web02:~]#ll -d /var/lib/php/session
drwxrwx--- 2 www www 6 Feb 23 16:03 /var/lib/php/session



修改hosts
10.0.0.8 www.admin.com

浏览器访问登录 www.admin.com



3.phpmyadmin接入负载均衡
[root@lb01:conf.d]#cat proxy.conf
upstream webs {
	server 10.0.0.7;
	server 10.0.0.8;
}
server {
	listen 80;
	server_name www.admin.com;

	location / {
	proxy_pass http://webs;
	include proxy_params;
	}
}

语法测试并重启
[root@lb01:conf.d]#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:conf.d]#systemctl restart nginx

修改hosts指向负载
10.0.0.5  www.admin.com


4.安装部署redis服务
[root@db01:~]#yum -y install redis
修改redis监听 增加172.16.1.51
[root@db01:~]#grep 172.16.1.51 /etc/redis.conf -n
69:bind 127.0.0.1 172.16.1.51

启动redis
[root@db01:~]#systemctl start redis
[root@db01:~]#systemctl enable redis

检查服务端口
[root@db01:~]#netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address            PID/Program name
tcp        0      0 172.16.1.51:6379        13968/redis-server
tcp        0      0 127.0.0.1:6379          13968/redis-server
tcp        0      0 0.0.0.0:22              824/sshd: /usr/sbin
tcp6       0      0 :::3306                4058/mysqld

5.修改php配置将会话写入redis服务
web01修改:
[root@web01:~]#vim /etc/php.ini
1222 session.save_handler = redis
1255 session.save_path = "tcp://172.16.1.51:6379"

PHP安装redis插件
第一步: 下载redis源码包
[root@web01:~]# wget http://pecl.php.net/get/redis-4.0.1.tgz
第二步: 解压代码
[root@web01:~]# tar xf redis-4.0.1.tgz
第三步: 配置
[root@web01:~]#cd redis-4.0.1/
phpize
[root@web01:redis-4.0.1]#./configure
第四步: 编译安装
[root@web01:redis-4.0.1]# make && make install
第五步: 开启redis插件功能,配置文件增加以下一行内容
[root@web01:~]#grep redis.so /etc/php.ini  -n
1357:extension=redis.so
第六步: 重启服务
[root@web01:~]#systemctl restart php-fpm


将/etc/php-fpm.d/www.conf中以下两行内内容注释 前面加上;
仅仅是加注释
431 ;php_value[session.save_handler] = files
432 ;php_value[session.save_path]    = /var/lib/php/session

完成后重启php-fpm
[root@web01:~]#systemctl restart php-fpm

WEB02修改:
rsync -avz --delete 10.0.0.7:/etc/php.ini /etc/php.ini
rsync -avz --delete 10.0.0.7:/etc/php-fpm.d/www.conf  /etc/php-fpm.d/www.conf
重启php-fpm
[root@web02:~]#systemctl restart php-fpm

PHP安装redis插件
第一步: 下载redis源码包
[root@web02:~]# wget http://pecl.php.net/get/redis-4.0.1.tgz
第二步: 解压代码
[root@web02:~]# tar xf redis-4.0.1.tgz
第三步: 配置
[root@web02:~]#cd redis-4.0.1/

phpize
[root@web02:redis-4.0.1]#./configure
第四步: 编译安装
[root@web02:redis-4.0.1]# make && make install
第五步: 开启redis插件功能,配置文件增加以下一行内容
[root@web02:~]#grep redis.so /etc/php.ini  -n
1357:extension=redis.so
第六步: 重启服务
[root@web01:~]#systemctl restart php-fpm

hosts解析
10.0.0.5 www.admin.com

tail -f /var/log/nginx/access.log
相关推荐
饮啦冰美式21 分钟前
22.04Ubuntu---ROS2使用rclcpp编写节点
linux·运维·ubuntu
wowocpp21 分钟前
ubuntu 22.04 server 安装 和 初始化 LTS
linux·运维·ubuntu
Huaqiwill22 分钟前
Ubuntun搭建并行计算环境
linux·云计算
wclass-zhengge25 分钟前
Netty篇(入门编程)
java·linux·服务器
Lign1731426 分钟前
ubuntu unrar解压 中文文件名异常问题解决
linux·运维·ubuntu
vip4511 小时前
Linux 经典面试八股文
linux
大霞上仙1 小时前
Ubuntu系统电脑没有WiFi适配器
linux·运维·电脑
Karoku0662 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
为什么这亚子2 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
布值倒区什么name2 小时前
bug日常记录responded with a status of 413 (Request Entity Too Large)
运维·服务器·bug