基于saltstack实现的配置集中化管理[原创]
Saltstack是一个具备puppet与func功能为一身的集中化管理平台,saltstack基于python实现,功能十分强大,各模块融合度及复用性极高,官方极力推荐作为云计算平台的基础架构。轻松维护成千上万台服务器不是问题,现分享作者基于saltstack实现一个集中化的配置管理平台,以Nginx配置例子展开,涉及salt的grains、grains_module、pillar、States、jinja(template)等,本文适合有salt基础的同学阅读。
一、设备环境说明
有两组web业务服务器,组名分别为web1group与web2group,设备硬件配置、web根目录存在异常,见下图:

二、master配置说明
1、关键配置定义:
2、定义的文件树结构(具体文件后续说明)

三、自定义grains_module
1)#vi /srv/salt/_grains/nginx_config.py
2)同步grains模块
salt '*' saltutil.sync_all
3)刷新模块(让minion编译模块)
salt '*' sys.reload_modules
4)验证max_open_file key的value
[root@SN2013-08-020 _grains]# salt '*' grains.item max_open_file
SN2013-08-022:
max_open_file: 1024
SN2013-08-021:
max_open_file: 1024
SN2012-07-011:
max_open_file: 1024
SN2012-07-012:
max_open_file: 1024
SN2012-07-010:
max_open_file: 1024
四、配置pillar
本例使用分组规则定义pillar,即不同分组引用各自的sls属性
1)定义入口top.sls
#vi /srv/pillar/top.sls
2)定义私有配置,本例只配置web_root的数据,当然可以根据不同需求进行定制,格式为python的字典形式,即"key:value"。
#vi /srv/pillar/web1server.sls
#vi /srv/pillar/web2server.sls
3)验证配置结果:
#salt 'SN2013-08-021' pillar.data nginx
SN2013-08-021:
----------
root:
/data
#salt 'SN2012-07-010' pillar.data nginx
SN2012-07-010:
----------
root:
/www
五、配置States
1)定义入口top.sls
#vi /srv/salt/top.sls
2)定义nginx配置及重启服务SLS,其中salt://nginx/nginx.conf为配置模板文件位置。
#vi /srv/salt/nginx.sls
3)Nginx配置文件(引用jinja模板)
功能点:
1、worker_processes参数采用grains['num_cpus'] 上报值(与设备CPU核数一致);
2、worker_cpu_affinity分配多核CPU根据当前设备核数进行匹配,分别为2\4\8\其它核;
3、worker_rlimit_nofile参数与grains['max_open_file'] 获取的系统ulimit -n一致;
4、worker_connections 参数理论上为grains['max_open_file'];
5、 root参数为定制的pillar['nginx']['root']值。
#vi /srv/salt/nginx/nginx.conf
4)同步配置
#salt '*' state.highstate

(由于非第一次运行,看不到配置文件比对的信息)
5)验证结果:
1、登录root@SN2013-08-021
#vi /etc/nginx/nginx.conf


2、登录root@SN2012-07-010
#vi /etc/nginx/nginx.conf

一、设备环境说明
有两组web业务服务器,组名分别为web1group与web2group,设备硬件配置、web根目录存在异常,见下图:

二、master配置说明
1、关键配置定义:
2、定义的文件树结构(具体文件后续说明)

三、自定义grains_module
1)#vi /srv/salt/_grains/nginx_config.py
2)同步grains模块
salt '*' saltutil.sync_all
3)刷新模块(让minion编译模块)
salt '*' sys.reload_modules
4)验证max_open_file key的value
[root@SN2013-08-020 _grains]# salt '*' grains.item max_open_file
SN2013-08-022:
max_open_file: 1024
SN2013-08-021:
max_open_file: 1024
SN2012-07-011:
max_open_file: 1024
SN2012-07-012:
max_open_file: 1024
SN2012-07-010:
max_open_file: 1024
四、配置pillar
本例使用分组规则定义pillar,即不同分组引用各自的sls属性
1)定义入口top.sls
#vi /srv/pillar/top.sls
2)定义私有配置,本例只配置web_root的数据,当然可以根据不同需求进行定制,格式为python的字典形式,即"key:value"。
#vi /srv/pillar/web1server.sls
#vi /srv/pillar/web2server.sls
3)验证配置结果:
#salt 'SN2013-08-021' pillar.data nginx
SN2013-08-021:
----------
root:
/data
#salt 'SN2012-07-010' pillar.data nginx
SN2012-07-010:
----------
root:
/www
五、配置States
1)定义入口top.sls
#vi /srv/salt/top.sls
2)定义nginx配置及重启服务SLS,其中salt://nginx/nginx.conf为配置模板文件位置。
#vi /srv/salt/nginx.sls
3)Nginx配置文件(引用jinja模板)
功能点:
1、worker_processes参数采用grains['num_cpus'] 上报值(与设备CPU核数一致);
2、worker_cpu_affinity分配多核CPU根据当前设备核数进行匹配,分别为2\4\8\其它核;
3、worker_rlimit_nofile参数与grains['max_open_file'] 获取的系统ulimit -n一致;
4、worker_connections 参数理论上为grains['max_open_file'];
5、 root参数为定制的pillar['nginx']['root']值。
#vi /srv/salt/nginx/nginx.conf
4)同步配置
#salt '*' state.highstate

(由于非第一次运行,看不到配置文件比对的信息)
5)验证结果:
1、登录root@SN2013-08-021
#vi /etc/nginx/nginx.conf


2、登录root@SN2012-07-010
#vi /etc/nginx/nginx.conf


bj-F
2016/05/01 10:00
saltstack2015.5.9下,如果pillar定义有中文,执行时总是提示SaltRenderError和UnicodeDecodeError请问楼主有解决方法吗谢谢
718097281

2015/07/22 16:44
LZ的书我买了,我觉得salt的反射是不是得讲讲,我感觉这才是salt的重点
hanxiao


2015/03/17 17:31
我知道是什么问题了,是因为minion主机没有设置id号,
hanxiao


2015/03/17 16:16
其实我知道上午的主要问题是什么了,主要是 nodegroup match不成功,但我不知道为什么不成功,master配置文件里已经添加了node group信息
hanxiao


2015/03/17 11:07
感觉 YAML格式要求很严格,行首空格、制表符多一个少一个都不行。我在在配置 pillar 时遇到了问题1、设置了nodegroups :web1group、web2groupsalt -N web1group test.pingvm0: Truevm1: True2、然后按书上的写了 top.sls、web1server.sls、web2server.sls刷新 salt '*' saltutil.refresh_pillar
hanxiao


2015/03/17 10:57
感觉YAML的格式要求很严格,行首多一个空格或制表符都不行我在配置pillar时,就有困惑,我使用salt -N web1group test.ping #正常salt -N web1group test.ping vm1: Truevm0: True写了 /srv/pillar/top.sls、web1server.sls、web2server.sls,然后刷新 salt '*' saltutil.refresh_pillar但在master上执行 salt 'vm0' pillar.data nginxvm0: ----------后来我直接复制了你的sls文件,也不行,这是怎么回事呢,前面的 max_open_file倒测试正常。我是个新手,向你学习
甄码农


2014/11/06 10:03
请教个问题,在master上_grains目录下的python文件同步到minion服务器上的说呢么位置了?grain调试有什么好的方法? 谢谢
网游加速器

2014/08/17 16:55
感觉管理好麻烦的啊
变压器

2014/07/27 20:50
路过,偷偷带走,谢谢分享
园林假山


2014/07/24 08:44
不错,学习学习,欢迎回访
胶水


2014/07/21 16:10
我是来打酱油的,欢迎回访我的博客。
ran
2014/02/21 14:31
saltstack针对编译安装的服务怎么维护呢?怎么进行服务的 - enable: True - reload: True这两个功能?
张伟

2013/10/23 15:52
哈哈,我被主机名勾引出来了
刘天斯 回复于 2013/10/28 16:18
汗颜~
一路狂飙

2013/10/14 09:18
生成了如何分发呢?
刘天斯 回复于 2013/10/14 18:09
运行#salt '*' state.highstate 就是包含校验、分发,具体项看SLS配置。
藤家具

2013/09/24 17:25
确实很有压力的呀
北南
2013/09/05 16:46
谢谢分享!回去捣鼓下。
chenqing


2013/09/04 12:59
不错,楼主依然强悍。。。
分页: 1/1
1

