一、负载均衡选型
| 负载均衡选型 | 说明 |
|---|---|
| 硬件 | 性能越高,价格越贵 |
| 开源软件 | nginx(openresty),haproxy,lvs |
| 云产品 | 云负载均衡 |
二、负载均衡极速上手指南
2.1环境准备
| 角色 | ip | 主机名 | 服务 |
|---|---|---|---|
| 负载均衡 | 10.0.0.5/172.16.1.5 | lb01 | nginx |
| web服务器 | 10.0.0.7/172.16.1.7 | web01 | nginx+php |
| web服务器 | 10.0.0.8/172.16.1.8 | web02 | nginx+php |
| 数据库 | db01 | mariadb | |
| 存储 | nfs01 | nfs |
2.2web准备
##这里以web01为列
#创建子配置文件
vim /etc/nginx/conf.d/lb.oldboy.cn.conf
#内容:
server {
listen 80;
server_name lb.oldboy.cn;
root /app/code/lb;
location / {
index index.html;
}
}
#检查
nginx -t
#重新启动nginx
systemctl restart nginx
#创建lb目录
mkdir -p /app/code/lb
#写入内容
echo web01 lb.oldboy.cn > /app/code/lb/index.html
#创建子配置文件
vim /etc/nginx/conf.d/lb.oldboy.cn.conf
#内容:
server {
listen 80;
server_name lb.oldboy.cn;
root /app/code/lb;
location / {
index index.html;
}
}
#检查
nginx -t
#重新启动nginx
systemctl restart nginx
#创建lb目录
mkdir -p /app/code/lb
#写入内容
echo web01 lb.oldboy.cn > /app/code/lb/index.html
2.3负载准备与配置
#安装nginx
yum -y install nginx
#创建子配置文件
vim /etc/nginx/conf.d/lb.oldboy.cn.conf
#内容:
upstream lb_group {
server 10.0.0.7:80;
server 10.0.0.8:80;
}
server {
listen 80;
server_name lb.oldboy.cn;
location / {
proxy_pass http://lb_group;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-Ip $remote_addr;
}
}
#检查语法
nginx -t
#重新启动nginx
systemctl restart nginx
#最后写入hosts
10.0.0.5 lb.oldboy.cn
yum -y install nginx
#创建子配置文件
vim /etc/nginx/conf.d/lb.oldboy.cn.conf
#内容:
upstream lb_group {
server 10.0.0.7:80;
server 10.0.0.8:80;
}
server {
listen 80;
server_name lb.oldboy.cn;
location / {
proxy_pass http://lb_group;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-Ip $remote_addr;
}
}
#检查语法
nginx -t
#重新启动nginx
systemctl restart nginx
#最后写入hosts
10.0.0.5 lb.oldboy.cn
效果如下:

再次刷新

三、nginx中proxy_set_header功能
- proxy_set_header让nginx向后发送请求的时候带上一些header(请求头)
4.1Host头
- 负载均衡中web服务器有多个站点,需要配置负载-web请求Host头信息
- 保留用户请求的域名

| proxy_set_header | Host | $http_host; |
|---|---|---|
| 修改lb-webHost | 获取用户Host |
4.2XFF头
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Real-Ip $remote_addr;

五、负载均衡轮询算法
| 算法 | 说明 |
|---|---|
| rr轮询 | 默认的类似于循环 |
| wrr加权轮询 | 给节点增加权重 |
| least_conn最小连接数 | 最小连接数,根据后端节点连接情况动态分配. |
| least_time最小连接时间 | 最小连接时间,连接时间最短的处理请求. |
| ip_hash ip哈希 | 对客户端ip地址进行hash计算,结果一致的访问相同的节点 ip不变就会一直访问相同的后端节点. 可以解决一些会话问题(登录),容易导致负载不均. |
| url_hash url哈希 | 对请求的url进行hash计算,url一致不变就会访问到相同的节点.缓存服务器 |
| 一致性哈希算法 | 对ip_hash改进,可以使用 |
hash $remote_addr consistent;
六、cookie与session
| 共同点 | 区别 | 搭配使用 | |
|---|---|---|---|
| cookie | 存放用户信息 | 放在客户端浏览器中 | cookie存放密钥(钥匙) |
| session | 存放用户信息 | 放在服务器(文件形式,数据库,redis) | session(锁头) |
egrep -v ‘^ *$|;’ /etc/php-fpm.d/www.conf
[www]
user = www
group = www
listen = 127.0.0.1:9000
listen.acl_users = apache,nginx
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache
[www]
user = www
group = www
listen = 127.0.0.1:9000
listen.acl_users = apache,nginx
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache
- session共享(会话共享,会话保持)方案