描述用shell脚本配置系统环境ansible批量部署nginx、LVS、Keepalived二进制安装PrometheusGrafana。LVSKeepalived为nginx集群做高可用和负载均衡PrometheusGrafala监控项目并实现钉钉报警。一、项目规划主机角色系统网络IPmasteransibleredhat10.1NAT192.168.94.11lb01LVSKeepalivedredhat10.1NAT192.168.94.21lb02LVSKeepalivedredhat10.1NAT192.168.94.22monitorPrometheusGrafanaredhat10.1NAT192.168.94.23node01Nginxredhat10.1NAT192.168.94.31node02Nginxredhat10.1NAT192.168.94.32二、环境准备1、基础环境由于是在自己的设备上做练习所以六台机器全部关闭了防火墙和selinux,然后配置了仓库以及关闭了交换分区。并下载了常用的工具包例如vim、tree、net-tools那么环境准备我们可以编写shell脚本去做免去重复操作这里附上我自己的脚本以master为例可以看到现在的主机ip为100执行脚本可以看到ip已经变了如果你在VM中执行脚本发现主机名没有变再执行一个bash指令就好2、配置master环境安装ansible的方式有很多这里我选择按照官网方式通过pip下载。1下载python、python3-pip(2)pip下载ansible3配置主机映射由于要用ansible去批量的管理主机所以我们需要配置主机映射然后配置免密登录。当然ansible是支持输入密码的方式使用的只需通过sshpass。4配置免密登录由于所有的操作都在ansible中去批量管理主机其它的主机就不做配置了。至此我们可以开始搭建服务了。三、具体步骤1、在node01、node02节点上部署Nginx1创建目录结构2编写ansible.cfg文件3编写inventory/hosts文件4编写site.yml文件5编写template/index.html.j2文件6执行剧本7测试因为我没有node3节点所以当然找不到node32、在lb01、lb02节点上安装Keepalived并配置1将lb节点加入免密登录2做ansible目录结构注将lb节点的配置与node节点的配置放在同一个目录下也可以只需在inventory/hosts下写两个主机组。然后写多个site.yml文件用于不同的主机组执行3编写ansible.cfg文件4编写inventory/hosts文件5编写site.yml文件6编写template/keepalived.conf.j2文件这里我选择两台lb主机都做BACKUP节点做成非抢占式防止频繁VIP漂移减少业务中断次数7编写组变量8编写主机变量host_var/lb01.ymlhost_var/lb02.yml9执行剧本10到lb01上查看11lb01停掉keepalived12到lb02查看发现并没有漂移13查看lb02的keepalived.conf文件14修改模板15修改主机变量16重新执行剧本17再次测试查看lb2关闭lb1的服务再查看lb2发现就已经成功了3、在lb节点上安装配置LVS这里我将LVS也写到了Keepalived的site.yml文件中去(1修改lb/site.yml文件(2)修改lb/templates/keepalived.conf.j2文件3执行lb/site.yml文件4修改web/site.yml文件5执行web/site.yml文件6测试负载均衡4、在monitor节点上去搭建监控体系0 配置免密服务(1)时间服务同步1、查看时间同步源这里只有红帽给的国外源2、使用阿里的时间源3、将原配置服务做备份4、修改配置文件5、重启服务并查看可以看到这个服务端就配置成功了6、批量配置其它主机与master主机同步1将/etc/chrony.conf复制到家目录下改为chrony.conf.j2并做修改方便放入ansible的结构目录中的template中去2建立monitor节点的ansible结构目录3配置ansible.cfg、hosts文件4配置所有的site.yml文件将chrony.conf.j2文件发到每一台主机上在lb/site.yml、web/site.yml、monitor/site.yml都加入以下配置然后将chrony.conf.j2放到每个剧本的模板下5执行剧本6到各主机上查看至此时间服务同步完成(2) 安装配置Prometheus1、下载好需要的包2、解压到我们创建的/opt/monitor目录下。3、创建prometheus用户运行程序保证安全性4、修改文件名5、创建Prometheus的服务文件注在/opt/monitor/prometheus/下有一个名叫Prometheus的可执行文件所以 可以不写服务文件直接通过可执行文件启动服务写服务文件只是便于管理。6、启动服务7、访问测试3配置node_exporter1、给每台需要被监控的主机都安装node_exporter将node_exporter安装包和服务文件上传到master节点2、解压并修改名称3、修改node_exporter.service文件由于我这个文件是从monitor节点拿过来的而monitor节点中prometheus项目中的文件都由创建的prometheus用户去执行所以需要改变这个文件中的所属用户和组4、批量发给每台被监控节点在site.yml中添加如下内容注意copy模块不能在复制整个目录结构时去设定目录内某个文件的权限这导致目录下如果有可执行文件需要我们用file模块单独设定。5、执行剧本去节点查看6、在monitor节点上编写服务文件7、启动服务4配置Grafana1、编写服务文件2、启动服务3、访问测试通过浏览器访问http://192.168.72.61:3000即可打开grafana页面默认用户名密码都是admin初次登录会要求 修改默认的登录密码4、连接Prometheus5监控所有主机1、修改monitor节点上/opt/monitor/prometheus/prometheus.yml文件2、热更新3、在网页上查看4、在网页Grafana上导入仪表盘5、查看监控相关信息(6) 配置钉钉告警1、配置webhook-dingtalk1下载并解压webhook-dingtalkwget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz2复制/webhook/dingtalk/config.example.yml 为config.yml(3)修改config.yml4如何获取与钉钉绑定的webhook链接先在百度查询我的ip然后打开钉钉群点开群里的机器人要将你的ip填入下面上面复制webhook地址5配置一个告警模板文件6修改webhook所属用户和组7创建服务文件8给/webhook/dingtalk/prometheus-webhook-dingtalk加上可执行权限9启动服务10测试curl -X POST http://localhost:8060/dingtalk/webhook1/send -H ContentType: application/json -d {status:firing,alerts:[{labels{alertname:Test,instance:localhost},annotations:{summary:测试告警}}]}成功2、配置alertmanager1配置服务文件2、配置告警处理文件3开启服务4修改prometheus.yml文件5创建告警规则6热更新3、测试环节关闭node01上的node_exportor服务4、监控其它服务这里成功了但是我的需求是如果其它的服务挂掉也要告警。想要监控nginx和keepalived服务需要额外下载nginx-exporter和keepalived-exporter工具1下载工具那么我就在master节点上下载然后批量的去配置四个节点2监控Nginx1、查看nginx的模块nginx要用nginx-exporter工具需要开启nginx_stub_status模块2、解压到nginx_exporter目录下对于这个工具我们只需要其中的可执行文件其它的都可以不要3、编写剧本4、执行剧本并到node节点查看查看端口号5、在monitor节点上配置监控源6.热更新并查看7、测试两个服务都运行中关闭nginx服务exporter服务也自动关闭告警发送成功3监控keepalived1、将keepalived-exporter工具解压到keeplived-exporter目录下2、编写剧本keepalived不需要开启什么模块或是配置keepalived.conf文件3、执行剧本并去lb节点查看4、配置监控源5、测试成功。四、总结本次项目让我对ansible的操作更加熟悉已经可以用ansible去搭建大部分的服务而批量化操作在业务中是必不可少的这可以大大的提高集群搭建的效率当然本次项目碍于电脑性能只能够去搭建总共六台主机但实际业务中肯定不止于此所以ansible的实用性更能得到体现再来几台主机也只需要加入到主机清单中就可以管理。本次项目中没有过多的介绍Grafana,但自己在做的时候发现Grafana的仪表盘确实可以很清晰的看到每台主机中的各种数据无论是磁盘CPU还是内存。然后是keepalived和LVS的组合使用高可用和负载均衡一次性搞定只需配置keepalived的配置文件用keepalived去管理LVS很方便。最后是Prometheus的监控使用这次用的是二进制安装的方式但其实通过docker、k8s去搭建prometheus会更加方便好用容器化的方式可以帮我们省去很多配置的编写。当然练习二进制的方式还是有必要的这种方式更能体会到整个监控的流程加深理解。那么本次项目就到这里结束了。