saltstack之haproxy的安装配置
使用saltstack编译安装haproxy:
1 2 3 | mkdir /srv/salt/prod/pkg mkdir /srv/salt/prod/haproxy mkdir /srv/salt/prod/haproxy/files |
在创建上述目录之前需要修改salt的master配置文件,打开prod环境:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [root@node1 base] # egrep -v "^$|^#" /etc/salt/master publisher_acl: wadeson: - test . ping - network.* jsonhc: - node1*: - test . ping file_roots: base: - /srv/salt/base test : - /srv/salt/test prod: - /srv/salt/prod pillar_roots: base: - /srv/pillar/base |
1、构建编译环境:
1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@node1 pkg] # pwd /srv/salt/prod/pkg [root@node1 prod] # cat pkg/pkg-init.sls pkg-init: pkg.installed: - names: - gcc - gcc -c++ - glibc - make - autoconf - openssl - openssl-devel |
构建编译开发环境,如果上述不满足需求,可以更换为下面:
1 2 3 4 5 | # cat pkg_group-init.sls pkg_group-init: cmd.run: - name: yum groupinstall "Development tools" "Server Platform Development" - unless: yum grouplist| grep "Development tools" |
2、使用saltstack进行编译安装haproxy
2.1将下载好的haproxy源码包放置在haproxy目录下面的files目录中(files目录提供需要用的源码包,文件等)
1 2 3 4 | [root@node1 prod] # ll haproxy/files/ 总用量 1552 -rw-r--r-- 1 root root 1580214 6月 18 21:45 haproxy-1.6.13. tar .gz -rwxr-xr-x 1 root root 2395 10月 9 22:25 haproxy.init |
2.2haproxy的源码包和启动脚本准备好后,开始进行安装haproxy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | [root@node1 haproxy] # pwd /srv/salt/prod/haproxy [root@node1 haproxy] # cat install.sls include: - pkg.pkg-init pkg.pkg-init前面的pkg是以目录prod为基准,也就是目录根 haproxy- install : haproxy的安装 file .managed: - name: /usr/local/src/haproxy-1 .6.13. tar .gz - source : salt: //haproxy/files/haproxy-1 .6.13. tar .gz - user: root - group: root - mode: 755 cmd.run: - name: cd /usr/local/src/ && tar xf haproxy-1.6.13. tar .gz && cd haproxy-1.6.13 && make TARGET=linux26 PREFIX= /usr/local/haproxy && make install PREFIX= /usr/local/haproxy - unless: test -d /usr/local/haproxy 判断目录,如果存在即返回TRUE则不会执行name中的命令 - require: - pkg: pkg-init haproxy的安装依赖编译环境的安装,如果编译环境安装失败,haproxy安装将不会进行 - file : haproxy- install haproxy的安装也依赖于 /usr/local/src/haproxy-1 .6.13. tar .gz haproxy-init: 为haproxy提供启动脚本,并添加到启动项 file .managed: - name: /etc/init .d /haproxy - source : salt: //haproxy/files/haproxy .init - user: root - group: root - mode: 755 - require: - cmd: haproxy- install cmd.run: - name: chkconfig --add haproxy - unless: chkconfig --list| grep haproxy - require: - file : /etc/init .d /haproxy net.ipv4.ip_nonlocal_bind: 能够监听本机以外的ip(keepalived的vip漂移做准备) sysctl.present: - value: 1 haproxy-config- dir : 为haproxy创建配置目录 file .directory: - name: /etc/haproxy - user: root - group: root - mode: 755 |
haproxy的安装sls写完后,验证是否成功,当前目录为:
1 2 3 4 5 6 | [root@node1 haproxy] # ll total 8 drwxr-xr-x 2 root root 4096 Oct 9 23:40 files -rw-r--r-- 1 root root 1033 Oct 10 11:12 install .sls [root@node1 haproxy] # pwd /srv/salt/prod/haproxy |
salt默认是从base环境下面进行查找sls文件(如果没有添加到top.sls文件中),于是需要如下操作来执行install这个sls文件:
salt 'node1' state.sls haproxy.install env=prod 这种报错
查找文档:salt.modules.state.sls(mods, saltenv=None, test=None, exclude=None, queue=False, env=None, **kwargs)
于是解决办法为:salt 'node1' state.sls haproxy.install saltenv=prod
3、安装完haproxy后,并且haproxy已经有了启动脚本,接下来需要给haproxy提供配置文件,最后将haproxy服务开启,由于根据业务需求的不同,可能用到的haproxy的配置文件会有区别,
所以这里将配置文件与haproxy的安装分隔开进行状态管理配置,以后minion的haproxy可以根据配置文件的不同而提供安装
1 2 3 4 5 6 7 8 9 | [root@node1 haproxy] # mkdir /srv/salt/prod/cluster [root@node1 haproxy] # mkdir /srv/salt/prod/cluster/files [root@node1 haproxy] # pwd /srv/salt/prod/haproxy [root@node1 files] # ll 总用量 4 -rw-r--r-- 1 root root 1252 10月 9 22:25 haproxy-outside.cfg [root@node1 files] # pwd /srv/salt/prod/cluster/files |
开始编译状态配置文件,将haproxy的安装与配置文件结合起来,并且将haproxy的服务开启
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@node1 cluster] # cat haproxy-outside.sls include: - haproxy. install include进来haproxy的安装 haproxy-service: 启动haproxy服务 file .managed: 复制配置文件 - name: /etc/haproxy/haproxy .cfg - source : salt: //cluster/files/haproxy-outside .cfg - user: root - group: root - mode: 644 service.running: 开启haproxy服务,并添加到开机启动 - name: haproxy - enable : True - reload: True 当该服务有reload则,当配置文件发生变化时,会reload,而不是restart - require: - cmd: haproxy-init - watch : 监控某状态,当配置文件发生变化,自动reload(没有reload则会restart) - file : haproxy-service |
上述sls文件中,第一步骤是haproxy的安装,接下来才是给安装好的haproxy提供配置文件,最后才是将haproxy服务开启(如果需要开机启动则添加enable)
将上述haproxy整个项目添加到base环境下面的top.sls中
1 2 3 4 5 6 7 8 | [root@node1 base] # cat top.sls base: '*' : - init.env_init prod: 'node1' : - cluster.haproxy-outside |
于是haproxy的整个项目执行命令为salt '*' state.highstate
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | [root@node1 salt] # tree . ├── base │ ├── init │ │ ├── audit.sls │ │ ├── dns.sls │ │ ├── env_init.sls │ │ ├── files │ │ │ ├── echo .sh │ │ │ ├── resolv.conf │ │ │ ├── test .txt │ │ │ ├── zabbix-agent-3.0.10-1.el6.x86_64.rpm │ │ │ └── zabbix-sender-3.0.10-1.el6.x86_64.rpm │ │ ├── history .sls │ │ ├── sysctl.sls │ │ └── zabbix_agent.sls │ ├── _modules │ ├── test │ │ ├── create_file.sls │ │ ├── file -manage.sls │ │ ├── file .text │ │ ├── httpd-remove.sls │ │ ├── if_unless.sls │ │ └── test1.sls │ └── top .sls ├── prod │ ├── cluster │ │ ├── files │ │ │ └── haproxy-outside.cfg │ │ └── haproxy-outside.sls │ ├── haproxy │ │ ├── files │ │ │ ├── haproxy-1.6.13. tar .gz │ │ │ └── haproxy.init │ │ └── install .sls │ └── pkg │ └── pkg-init.sls └── test |
haproxy-outside.sls中包含haproxy的安装,配置文件的添加,haproxy服务的启动,而haproxy的安装包含编译环境的构建,haproxy编译安装的命令步骤,启动脚本的添加
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!