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安装软件
lb1172.16.0.10nginx1.18、keepalived-1.3.5、ansible-2.9.25
lb2172.16.0.20nginx1.18、keepalived-1.3.5
web1172.16.0.30nginx1.18
web2172.16.0.40nginx1.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负载均衡集群

keepalived高可用haproxy+varnish+lnmp实现站点搭建与ansible实现

ansible搭建高可用负载均衡的nginx+tomcat

nginx+keepalived实现高可用负载均衡

Ansible部署小型企业服务框架+wordpress