负载均衡和redis


LB load balance
SLB server load balance

为什么去使用负载均衡

解决单台服务器压力
用户访问块点
单点故障 一台服务器 如果出现问题所有业务都噶
让web服务器做成了集群
# 负载均衡配置文件
upstream web{   # 定义web机器组
	server 172.16.1.7:80;
	server 172.16.1.8:80;
	server 172.16.1.9:80;
	...
}
server{
	listen...
	server_name
	location /{
		proxy_pass http://web
	}
}
# -----------代理------------
server{
	listen 80;
	server_name....;
	location /{
		proxy_pass http://172.16.1.7:80;
	}
}

四层负载和七层负载的区别

四层负载的速度比七层快
物里 数据链路层 网络层 传输层 会话层 表示层 应用层
四层负载不识别域名

nginx实现负载均衡(proxy_pass)

负载均衡需要nginx的代理模块 proxy_pass
nginx负载均衡和nginx代理的proxy_pass的不同在于?
	nginx的代理模块 只能代理一台机器
	nginx做负载均衡 能代理多台机器

nginx负载均衡的调度算法

轮询:按时间顺序逐一分配到不同的后端服务器(默认)
########### weight #############
## 加权轮询,weight的值越大分配的几率越高 ##
upstream web{
	server 172.16.1.7:80 weight=2;
	server 172.16.1.8:80;
	server 172.16.1.9:80;
	...
}
############### ip_hash ##################
## 每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
会话保持:在需要保持会话的场景中,ip_hash 可以确保客户端在多个请求中连接到同一台后端服务器。
负载均衡:在分布式系统中,可以使用 ip_hash 进行负载均衡,确保请求被均匀分配到各个服务器。
upstream backend {
      ip_hash;
      server backend1.example.com;
      server backend2.example.com;
      server backend3.example.com;
  }

 server {
      listen 80;

      location / {
            proxy_pass http://backend;
        }
    }
#################### url_hash ###############
## 按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器

image-20240528153412970

###################### least_conn #############
最少链接数,那个机器链接数少就分发

image-20240528153524033


nginx均衡的后端状态

状态 概念
down 当前server暂时不参与负载均衡
backup 预留的备份服务器
max_fails 允许请求失败的次数
fail_timeout 经过max_fails失败后服务暂停时间
max_conns 限制最大的连接接受数(不常用)
############# down ##########
upstream wp{
	server 172.16.1.7:80 down; ## 不参与均衡的服务器
	server 172.16.1.8:80;
	server 172.16.1.9:80;
}
server{
	listen 80;
	server_name lb.wp.com;
	location /{
		proxy_pass http://wp;
		include proxy_params;
	}
}

########### backup #############
预留的备份服务器
upstream wp{
	server 172.16.1.7:80;
	server 172.16.1.8:80 backup; ### 预留的备份的服务器最后的时刻顶上
	server 172.16.1.9:80;
}

############### max_fails + fail_timeout #############
upstream wp{
	server 172.16.1.7:80 max_fails=3 fail_timeout=60s;
	server 172.16.1.8:80;
	server 172.16.1.9:80;
}

nginx负载均衡会话保持

cookie
	前端开发写的
	将用户的信息保存在浏览器之中(F12(检查)------> application -------> cookie)
	仅仅将用户信息保存在浏览器中的话 随时可以修改数据
session
	后端开发写的
	将用户的信息保存在服务器之中
	session对于cookie来说 保存在浏览器 无法修改
主机 wanIP lanIP 角色 应用
lb01 5 5 负载均衡 nginx
web01 7 7 web服务器 nginx+php
web02 8 8 web服务区 nginx+php
db01 51 51 数据库,缓存 mariadb+redis

部署phpmyadmin

######## db01 #########
安装数mariadb-server
启动mariadb
编辑数据库
mysql
	grant all on *.* to phpmyadmin@'%' identified by '123';
	## 用户名phpmyadmin 运行所有设备登录 密码123
安装 redis
编辑redis配置文件  ## /etc/redis.conf
61 bind 127.0.0.1 ----> 0.0.0.0
启动redis



############# web01和web02 ################
下载安装包phpmyadmin安装包(解压,重命名等)
安装php和nginx
创建并修改nginx和php启动用户
修改nginx的conf的配置文件
server{
	listen 80;
	server_name php.web.com;
	root /code/phpmyadmin;
	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;
	}
}
"准备优化文件"
vim /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
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;
" 修改php的缓存存放文件!!!!!!!!"
vim /etc/php.ini
1231 session.save_handler = redis
1264 session.save_path = "tcp://172.16.1.51:6379"
vim /etc/php-fpm.d/www.conf  ##### 注释这两行内容
;php_value[session.save_handler] = files
;php_value[session.save_path] = /var/lib/php/session
重启nginx php-fpm


############ lb01 ############
安装nginx 
编辑负载均衡conf文件
upstream web{
	server 172.16.1.7:80;
	server 172.16.1.8:80;
}
server{
	listen 80;
	server_name php.xx.com;
	location / {
		proxy_pass http://web;
		include proxy_params;
	}
}
重启nginx文件

image-20240528161221093

redis查询命令

redis-cli 	进入redis
keys * 查看数据