理论:

首先,区分负载均衡与代理的不同,因为,高可用是在负载均衡的基础上实现的。

代理:把连接请求直接转发到后台某个固定web节点;代理一对一
负载均衡:把请求使用某种调度算法分散发布给后台所有web节点(不固定);负载均衡一对多

负载均衡的软件主要有三种:本节只讲Nginx,它的调度算法主要有:

1)轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。

2)weight(轮询权值)
weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。
upstream bakend { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; }

3)ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream bakend { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; }

4)fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。
{ server server1; server server2; fair; }

5)url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。


案例

主机名

IP

安装软件

lb1

172.16.0.10

nginx1.18、keepalived-1.3.5、ansible-2.9.25

lb2

172.16.0.20

nginx1.18、keepalived-1.3.5

web1

172.16.0.30

nginx1.18

web2

172.16.0.40

nginx1.18

提示:ansible是为了更省时省力的完成部署任务,也可以手动一个个安装

步骤:
1、 搭建 环境
lb1做管理主机安装ansible,并实现免密登录其他被管理主机

创建免密脚本
[root@lb1 ~]# vim connections.sh

#!/usr/bin/env bash
#ssh secret free
secret_free() {
echo " = = = = = = = = = = = = = = = = 免密交互 = = = = = = = = = = = = = = = = "
yum -y install expect

if [ ! -f /root/.ssh/id_rsa ];then
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
echo "id_rsa创建成功"
else
mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
echo "id_rsa已存在"
fi

while read line
do
user=`echo $line | cut -d " " -f 2`
ip=`echo $line | cut -d " " -f 1`
passwd=`echo $line | cut -d " " -f 3`
expect <<EOF
set timeout 10
spawn scp -r /root/.ssh $ip:/root
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$passwd\n" }
}
expect eof

EOF
done < /root/hosts
}

secret_free

执行脚本:成功可免密登录其他主机。

拷贝Nginx的rpm包到被管理端(提前下载好)

ansible实现快速部署负载均衡与keepalived高可用_nginx

2、 安装Nginx
使用file与shell模块,思考为什么不用yum模块?很简单,yum是直接从互联网镜像站下载,默认会下载最新版本,可能是1.20;我们为了保持稳定版本,提前下载好所需要的版本,使用shell

1)防止程序被锁死,先调用file模块(可以解决之下yum命令出现下图情况)

ansible实现快速部署负载均衡与keepalived高可用_运维_02


ansible实现快速部署负载均衡与keepalived高可用_运维_03


2)调用shell模块执行本地安装rpm包

ansible实现快速部署负载均衡与keepalived高可用_负载均衡_04


3)调用service模块启动服务

先创建默认首页文件

cd /usr/share/nginx/html

echo “web1:记条Nginx优化参数worker_connections 65535”> index.html

管理主机执行,启动服务命令:

ansible实现快速部署负载均衡与keepalived高可用_负载均衡_05


访问Nginx首页:不支持中文,访问到首页证明实验是成功的

ansible实现快速部署负载均衡与keepalived高可用_负载均衡_06


3、 配置负载均衡

lb1操作:

[root@lb1 ~]# cd /etc/nginx/conf.d/

删除或为默认配置文件改名
mv default.conf default.conf.bak

创建新文件:

负载均衡配置文件
vim lb1.conf

upstream web_cluster {
server 172.16.0.30:80;
server 172.16.0.40:80;
}

server {
listen 80;
server_name blog.connect.com;

location / {
proxy_pass http://web_cluster;
include nginx_params;
}
}

添加优化Nginx配置文件params
[root@lb1 nginx]# vim /etc/nginx/nginx_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;

启动Nginx服务
systemctl start nginx

验证:

ansible实现快速部署负载均衡与keepalived高可用_nginx_07


lb1使用ansible操作:

删除默认配置文件:

ansible 172.16.0.20 -m file -a ‘path=/etc/nginx/conf.d/default.conf state=absent’

拷贝配置文件到配置目录:

ansible实现快速部署负载均衡与keepalived高可用_负载均衡_08


ansible 172.16.0.20 -m copy -a ‘src=/etc/nginx/conf.d/lb1.conf dest=/etc/nginx/conf.d’重启Nginx服务:

ansible实现快速部署负载均衡与keepalived高可用_服务器_09


验证:访问172.16.0.20效果和访问lb1地址一样4、 两台lb分别安装keepalived

ansible实现快速部署负载均衡与keepalived高可用_负载均衡_10


lb1配置:

vim /etc/keepalived/keepalived.conf

ansible实现快速部署负载均衡与keepalived高可用_负载均衡_11


lb2配置:

vim /etc/keepalived/keepalived.conf

ansible实现快速部署负载均衡与keepalived高可用_服务器_12


ansible实现快速部署负载均衡与keepalived高可用_运维_13


启动服务:

ansible 172.16.0.20 -m service -a “name=keepalived state=started”验证:

1)主备同时存活情况,虚拟ip在master上

ansible实现快速部署负载均衡与keepalived高可用_负载均衡_14


2) Windows11访问,正常

ansible实现快速部署负载均衡与keepalived高可用_运维_15


模拟主宕机情况:

在master上操作:

ansible实现快速部署负载均衡与keepalived高可用_服务器_16


backup查看虚拟Ip:

ansible实现快速部署负载均衡与keepalived高可用_nginx_17


客户端访问:依然正常

ansible实现快速部署负载均衡与keepalived高可用_运维_18