本公众号内容大多由平时操作整理记录,如果有错误的地方欢迎留言指正
本篇文章记录通过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节点发生故障也不会发生变化
领取专属 10元无门槛券
私享最新 技术干货