saltstack应用之批量部署mysql

  • A+
所属分类:saltstack

源码包:http://pan.baidu.com/s/1mgic8U8

应用环境:

使用salt写了个自动部署mysql的配置配置管理文件,由于mysql的有版本号,端口等不确定属性,需要使用pillar来单独配置每个minion的属性。

一,原始方法

例如,需要在salt id为10.1.1.1-centos.game.web的服务器上部署mysql,版本号为5.5.25,实例有3个,3306,3307,3308, 正常情况下的流程是这样的:

1,在/srv/salt/top.sls中添加配置信息,确保mysql对应的配置被加载

2,在/srv/pillar/top.sls配置minion对应的sls文件位置(ps:salt文件中不能再带".",否则会报错)

3,新建/srv/pillar/custom/10-1-1-1-centos-game-web.sls,内容如下:

4,执行同步命令

二,改进方法
oh,shit,说好的自动化呢,怎么还要这么多步骤,这可不行!
利用py模式的sls配置文件(其实就是python脚本,只要返回yaml格式的字典文件就好了),我们可以将以上的操作简化成1步,思路如下:
1,/srv/pillar/top.sls中编写配置:

2,使用py模式编写/srv/pillar/custom/init.sls,自动读取pillar配置,例如salt id是:10.1.1.1-centos.game.web,那么project为game,然后根据获取的pillar_root组合成路径/srv/pillar/custom/game/10.1.1.1-centos.game.web.yaml,利用yaml模块从文件中读取信息,返回字典
3,在/srv/salt/top.sls文件中匹配所有的minion

4,/srv/salt/centos/public_services/init.sls文件使用py模式编写,配置会获取对应的minion的pillar信息,如果包含mysql配置信息且配置正确的话,则返回mysql实例的配置。

那现在要怎么使用呢,很简单,例如你的id为10.1.1.1-centos.game.web,首先在/srv/pillar/custom/目录下建个game目录(从salt id获取的项目名),然后在game目录先新建文件10.1.1.1-centos.game.web.yaml,里面写上配置信息:

静静的等待执行完成就好了!

三,具体代码

/srv/pillar/custom/init.sls

/srv/salt/centos/public_services/init.sls

/srv/salt/centos/public_services/mysql/5/init.sls

/srv/salt/centos/public_services/mysql/5/packet.sls
mysql软件包要放到相应的目录中,具体位置参考下面配置

/srv/salt/centos/public_services/mysql/5/my_cnf.sls
注意修改最后的初始化密码
my.cnf配置文件需要放到对应的目录中,my.cnf文件中要设置对应的模板变量:

/srv/salt/centos/public_services/mysql/5/instance.sls
mysql启动脚本需要放到对应的目录中,启动脚本中要设置对应的模板变量:

四,总结
这个方法不仅可以用在mysql,同样的nginxredis等都可以举一反三,配置文件编写完成后,仅仅需要简单的在pillar中添加几个变量就可以轻松批量部署了。

weinxin
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:4   其中:访客  3   博主  0   引用   1

    • db 1

      你好请教下,/srv/salt/centos/public_services/init.sls这个文件是用python编写的,我按照上面做slat会报错,我想问下这种写法这个文件属于什么模块,我看好像也不是runner也不是module。
      另外可以把百度云共享的代码重新发出一份呢?现在已经不可用了,或则发我一份也好。
      谢谢!

      • 请输入您的QQ号 1

        您好请问/srv/salt/centos/public_services/init.sls,这些sls文件用python编写是怎么实现的呢?我按照上面的步骤做会报错。这个文件是属于什么模块呢?我看好像也不是runner,也不是moudle。
        另外百度云共享的代码已经过期了,能不能再重新更新一个呢,或者发我一份呢?

        • 新手 1

          已经可以用salt安装mysql的人, 费了好大劲
          还是看不懂 , 不过谢谢楼主了

        • 来自外部的引用: 1

          • saltstack应用之简化pillar配置步骤