设为首页 收藏本站
查看: 1683|回复: 0

[经验分享] Salt实战之自动安装部署MooseFS

[复制链接]
累计签到:15 天
连续签到:1 天
发表于 2015-11-26 12:07:33 | 显示全部楼层 |阅读模式
  转自:http://wiki.saltstack.cn/reproduction/salt-auto-deploy-moosefs
  



  • 作者: Rainbow+
  

暮然回首,我做运维已经有六年多了,从最开始那个一无所知的菜鸟,到现在能够胸有成竹的管理公司几百台服务器,中间走了不少的弯路。


就拿批量管理服务器这块儿来说吧,几年前自己只会Shell脚本,在服务器不多的时候,感觉还忙的过来,到后来服务器越来越多的时候就不行了。写了很多的脚本放到计划任务中定期执行,能解决一部分工作,但效率还是很低下,因为服务器太多了,每次脚本有变动就需要在所有服务器上都更新一遍,非常痛苦,后来我学会了用expect来处理交互,但效率依然很低下,等脚本自动登录完所有的机器并执行完相关命令,至少30分钟过去了。


然后,我加入了一些技术群,了解到了像Func,Puppet以及Chef这样的工具,并试着使用它们来管理服务器,效果真的很好。


就在几个星期以前,在Puppet群里面,我听到了Salt这个词,“绿肥”天天在群里“拉客”,号称是Func+Puppet,用Python实现的,由于我对Python很有好感,也还算有点基础,于是就试着用了用Salt。


学一个东西最快的方法就是用它去解决现有的实际问题,我选择了使用Salt来自动安装部署一套MooseFS分布式文件系统,结果,我花了1天的时间就完成了整个工作,同时对Salt好感也超越了Puppet,说实话,我现在非常愿意将线上所有Puppet相关的代码都用Salt来重写一遍,其中包括整个Hadoop集群的自动部署。


好了,废话不多说,下面开始讲解整个实战过程!


Salt其实也仅仅只是一个工具,解决问题的关键是我们的思路,正比如我能够用Salt来实现自动安装部署MooseFS,那么前提肯定是我了解手动安装部署MooseFS的整个过程。因此,建议大家先阅读我的《在CentOS上安装部署MooseFS分布式文件系统》http://heylinux.com/archives/2467.html 这篇文章,了解如何通过手动的方式来安装部署MooseFS。


接下来,我们首先要对Salt的基础进行一系列的学习,这里,我强烈推荐官网的Tutorial:http://docs.saltstack.com/topics/tutorials/walkthrough.html 在完成了整个Tutorial之后,通过Module
Index页面,我们能够快速查阅Salt所有模块的功能与用法:http://docs.saltstack.com/py-modindex.html


我的整个Salt代码结构如下:


$ tree
.
├── pillar
│   ├── moosefs
│   │   └── params.sls
│   ├── _salt
│   │   └── params.sls
│   ├── schedules
│   │   └── params.sls
│   ├── top.sls
│   └── users
│       └── lists.sls
├── README.md
├── salt
│   ├── moosefs
│   │   ├── files
│   │   │   └── index.html
│   │   ├── states
│   │   │   ├── chunkserver.sls
│   │   │   ├── client.sls
│   │   │   ├── common.sls
│   │   │   ├── master.sls
│   │   │   └── metalogger.sls
│   │   └── templates
│   │       ├── httpd.conf
│   │       ├── mfschunkserver.cfg
│   │       ├── mfsexports.cfg
│   │       ├── mfshdd.cfg
│   │       ├── mfsmaster.cfg
│   │       └── mfsmetalogger.cfg
│   ├── _roles
│   │   ├── backup.sls
│   │   ├── datanode.sls
│   │   └── master.sls
│   ├── _salt
│   │   ├── states
│   │   │   └── minion.sls
│   │   └── templates
│   │       └── minion
│   ├── top.sls
│   └── users
│       └── states
│           └── create.sls
└── tools
    ├── install_salt_minion.sh
    └── tips.txt


Salt的默认配置需要存放在/srv下,在/srv/pillar中主要存放的是各类“参数”,而在/srv/salt下存放的是具体的state“代码文件”,以及配置文件的“模板”。


Salt的入口文件分别是/srv/pillar/top.sls 与 /srv/salt/top.sls,入口文件的意思就是,在minion“客户端”上,每次请求服务端配置的时候,它们实际上所请求的是这两个文件,虽然在上面有很多的文件,但其实它们都是通过这两个文件所关联起来的。


比如在/srv/pillar/top.sls文件的内容是:


base:
  '*':
    - _salt.params
    - schedules.params
    - moosefs.params
    - users.lists


即针对所有的服务器('*'),引用_salt,schedules以及moosefs目录下params.sls中的配置和users目录下lists.sls的配置。


而/srv/salt/top.sls文件的内容是:


base:
  '*':
    - _salt.states.minion
    - users.states.create

  'ip-10-197-29-251.us-west-1.compute.internal':
    - _roles.master
    - _roles.datanode

  'ip-10-196-9-188.us-west-1.compute.internal':
    - _roles.backup
    - _roles.datanode

  'ip-10-197-62-239.us-west-1.compute.internal':
    - _roles.datanode


即针对所有的服务器('*'),引用_salt/states目录下minion.sls中的配置,以及users/states目录下create.sls中的配置;针对服务器ip-10-197-29-251.us-west-1.compute.internal,引用_roles目录下master.sls中的配置,其余两个主机类似。


而_roles/master.sls文件的内容是:


include:
  - moosefs.states.master


即引用 moosefs/states 目录下 master.sls的配置,进一步查看 master.sls 的配置,就可以看到如下内容:


include:
  - moosefs.states.common

mfsmaster:
  service:
    - running
    - require:
      - cmd.run: mfsmaster
  cmd.run:
    - name: 'cp metadata.mfs.empty metadata.mfs'
    - cwd: /var/mfs/
    - user: daemon
    - unless: 'test -e metadata.mfs.back'
    - require:
      - file: /etc/mfs/mfsmaster.cfg

mfs-cgi:
  pkg.installed:
    - require:
      - pkg: httpd
...

/etc/httpd/conf/httpd.conf:
  file.managed:
    - source: salt://moosefs/templates/httpd.conf
    - template: jinja
    - user: root
    - group: root
    - mode: 644
    - require:
      - pkg: httpd
...


即具体的配置步骤,包括了mfsmaster的service启动,初始化数据文件,修改httpd.conf配置文件等,而这一部分的具体配置,大家可以在我的GitHub站点上看到所有详细的代码: https://github.com/mcsrainbow/HeyDevOps/tree/master/Salt


Salt默认的很多示例,目录结构非常简单,而我因为有“分类强迫症”,不喜欢将各类不同类型的文件放在同一个目录下,所以我创建了states和files以及templates目录来分别存放states,普通文件和配置文件。而创建_nodes目录并在top.sls中引用,而不是通过直接引用moosefs.states.master这种方式,原因是我手里的服务器全是EC2上的云主机,主机名默认已经固定了,不方便自定义的规划,因此我在_nodes目录下根据自身需要,根据线上服务器的角色创建了一些文件,在这些文件中再去引用相关的配置,这样,今后每台服务器就需要绑定好它对应的角色就可以了,更新_nodes目录下的文件就可以更新所有对应的服务器。


当然,这些都是我实际环境中遇到的问题,也是我所构思出来的解决方法,我在本文中着重讲解了我的思路,以及Salt的工作流程,是因为我发现在我学习的过程中,它们给我带来的困扰和疑惑是最大的。具体的states实现,大家可以通过我在GitHub中分享的代码https://github.com/mcsrainbow/HeyDevOps/tree/master/Salt,参考《在CentOS上安装部署MooseFS分布式文件系统》文章中的步骤,来学习和理解。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-143865-1-1.html 上篇帖子: moosefs2.0初探及部署 下篇帖子: linux的initrd机制和initramfs机制之initrd
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表