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

理论:

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

代理:把连接请求直接转发到后台某个固定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 "yesn";exp_continue }
        "password" { send "$passwdn" }
        }
        expect eof

EOF
        done < /root/hosts   
}

secret_free

执行脚本:成功可免密登录其他主机。
拷贝Nginx的rpm包到被管理端(提前下载好)
在这里插入图片描述

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

1)防止程序被锁死,先调用file模块(可以解决之下yum命令出现下图情况)
在这里插入图片描述
在这里插入图片描述
2)调用shell模块执行本地安装rpm包
在这里插入图片描述
3)调用service模块启动服务
先创建默认首页文件
cd /usr/share/nginx/html
echo “web1:记条Nginx优化参数worker_connections 65535”> index.html

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

在这里插入图片描述
访问Nginx首页:不支持中文,访问到首页证明实验是成功的
在这里插入图片描述
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

验证:
请添加图片描述
lb1使用ansible操作:
删除默认配置文件:
ansible 172.16.0.20 -m file -a ‘path=/etc/nginx/conf.d/default.conf state=absent’
拷贝配置文件到配置目录:
在这里插入图片描述
ansible 172.16.0.20 -m copy -a ‘src=/etc/nginx/conf.d/lb1.conf dest=/etc/nginx/conf.d’

重启Nginx服务:
在这里插入图片描述
验证:访问172.16.0.20效果和访问lb1地址一样

4、 两台lb分别安装keepalived
在这里插入图片描述
lb1配置:
vim /etc/keepalived/keepalived.conf
在这里插入图片描述
lb2配置:
vim /etc/keepalived/keepalived.conf
在这里插入图片描述
在这里插入图片描述
启动服务:
ansible 172.16.0.20 -m service -a “name=keepalived state=started”

验证:
1)主备同时存活情况,虚拟ip在master上
在这里插入图片描述
2) Windows11访问,正常
在这里插入图片描述
模拟主宕机情况:
在master上操作:
在这里插入图片描述
backup查看虚拟Ip:
在这里插入图片描述
客户端访问:依然正常
在这里插入图片描述


本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>