Ansible自动部署nginx+keepalived高可用负载均衡

本公众号内容大多由平时操作整理记录,如果有错误的地方欢迎留言指正

本篇文章记录通过Ansible自动化部署nginx的负载均衡高可用,前端代理使用nginx+keepalived,后端web server使用3台nginx用于负载效果的体现,结构图如下:

部署前准备工作

主机规划

Ansible : 192.168.214.144

Keepalived-node-1 : 192.168.214.148

Keepalived-node-2 : 192.168.214.143

web1 : 192.168.214.133

web2 : 192.168.214.135

web3 : 192.168.214.139

Ansible主机与远程主机秘钥认证

iplist.txt

执行脚本

[root@Ansible script]# ./autokey.sh

测试验证

配置Ansible基于主机名认证,方便单独管理远程主机

安装配置Ansible

编写roles,实现web的部署

先看一下web的目录结构

编写user.yml

编写install_nginx.yml

创建nginx配置文件的template模板

由于是测试,后端web服务的nginx.conf配置文件基本保持默认,只只更具后端主机情况设置worker进程数,使用ansible的setup模块中的变量获取远程主机的cpu的数量值

编写temps.yml

编写start.yml

编写main.yml

编写执行主文件web_install.yml,执行文件不能与web角色放在同一目录,通常放在roles目录

安装前测试: -C选项为测试

如没有问题则执行安装

测试访问

编写roles角色部署nginx+keepalived

部署高可用集群需要注意各节点包括后端主机的时间问题,保证各主机时间一致。

编写roles角色

编写user.yml

编写install_server.yml

编写temps.yml

配置nginx proxy配置文件模板

配置keepalived配置文件模板

同样,在master_keepalived.conf.j2基础修改另存为backup_keepalived.conf.j2,只修改角色与优先级即可。注意:master_keepalived.conf.j2文件中的检测故障降低优先级的值要确保降低后MASTER优先级小于BACKUP的优先级

编写start.yml

编写main.yml

编写执行主文件

执行检测roles

执行测试没问题即可执行自动部署

执行过程如下:

至此,自动部署nginx+keepalived高可用负载均衡完成了

最后看一下roles目录的结构

下面测试服务:keepalived的服务没有在ansible中设置自动启动,到keepalived节点启动即可。

测试node节点

将node-1 的MASTER服务停掉测试故障转移,同时查看node-2状态变化

执行: nginx -s stop

查看vrrp通知,可以看到主备切换正常:

再测试访问:

node-1恢复主节点,抢回MASTER角色

node-1节点执行nginx指令,可以看到VIP漂移回到node-1节点,测试访问

其他问题

上面的自动部署方式还有可以改进的地方,比如,可以将配置keepalived的配置文件中的许多参数在roles中以统一变量的方式定义,然后在template模板文件中引用参数就可以了

此外还有一个需要注意的地方是:keepalived的配置文件中使用了killall指令检测本地的nginx服务状态,如果检测结果状态为非0就会执行vrrp_script中定义的降级操作,要确保系统这个指令可以执行,有时该指令没有被安装,如果该指令没有存在,即使MASTER节点发生故障也不会发生变化

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180717G1RR3P00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券