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
相关推荐
梅见十柒22 分钟前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生
Koi慢热26 分钟前
路由基础(全)
linux·网络·网络协议·安全
传而习乎36 分钟前
Linux:CentOS 7 解压 7zip 压缩的文件
linux·运维·centos
soulteary37 分钟前
突破内存限制:Mac Mini M2 服务器化实践指南
运维·服务器·redis·macos·arm·pika
我们的五年1 小时前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
IT果果日记1 小时前
ubuntu 安装 conda
linux·ubuntu·conda
Python私教1 小时前
ubuntu搭建k8s环境详细教程
linux·ubuntu·kubernetes
羑悻的小杀马特1 小时前
环境变量简介
linux
跳跳的向阳花1 小时前
03-03、SpringCloud第三章,负载均衡Ribbon和Feign
spring cloud·ribbon·负载均衡
小陈phd2 小时前
Vscode LinuxC++环境配置
linux·c++·vscode