ansible实现快速部署负载均衡与keepalived高可用
Posted Friends of the wind
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 "yes\\n";exp_continue
"password" send "$passwd\\n"
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:
客户端访问:依然正常
以上是关于ansible实现快速部署负载均衡与keepalived高可用的主要内容,如果未能解决你的问题,请参考以下文章
使用ansible快速配置RHCS 集群 实现WEB站负载均衡高可用(手记)
实战:ansible自动化部署nginx+keepalived+mysql负载均衡集群