¶Ôϵͳ¹¤³ÌʦÀ´Ëµ£¬ÅäÖùÜÀíÒѾÏòǰԾ½øÁËÒ»´ó²½.
ϵͳÅäÖõÄ×Ô¶¯»¯²»½ö¿ÉÔ¤²â,¿ÉÖØ¸´, »¹¾ßÓпɹÜÀíÐÔ. ÅäÖùÜÀí¹¤¾ßͨ³£Ê¹Óð汾¿ØÖÆ»¯µÄÅäÖÃÄ£°åÀ´ÃèÊö»ù´¡ÉèÊ©µÄÄ¿±ê״̬¡£Æ¾½è°æ±¾¿ØÖÆ»¯µÄÅäÖ㬿ÉÒÔ½«»·¾³»Ø¹ö£¨»òǰ¹ö£©µ½Ç°Ã棨»òºóÐò£©×´Ì¬£»»·¾³ÅäÖÃÎļþµÄ×Ô¶¯»¯¹ÜÀíÒ²ÊdzÖÐø***¸¶¹ÜµÀµÄ±ØÒªÌØÐÔ¡£
CFEngine, PuppetºÍChef(°´ÄêÁä½µÐò)ÊÇ¿ªÔ´ÁìÓòÁ÷ÐеÄÅäÖùÜÀí¹¤¾ß¡£ ÎÒÊÇÒ»¸öPuppetµÄ³¤ÆÚÓû§,
Óë×Ô¶¨ÒåµÄÅäÖýű¾Ïà±È£¬ËüÔÚϵͳ×Ô¶¯»¯µÄ×éÖ¯ÐԺͿɿ¿ÐÔ·½Ãæ´øÀ´Á˾޴óµÄÌáÉý¡£(ÎÒÊÇÔÚ2009Äê×÷³öÕâÒ»´Î·ÉÔ¾£¬Óë´ËÏà±È,
ÒÔǰµÄÈÕ×Ó¼òÖ±ÊÇ»ìÂÒ²»¿°…).
ËäÈ»ÅäÖùÜÀí¹¤¾ß¾«ÓÚÃèÊö²¢´ïµ½ÏëÒªµÄ״̬, µ«²¢²»É󤶯̬µØ²éѯ»òÉèÖÃ״̬. ÕâÒ»µãÔÚ״̬×ÊÔ´»¹Ã»Óб»ÄÉÈëÅäÖùÜÀíÊ±ÌØ±ðÃ÷ÏÔ¡£Llinuxϵͳ¹ÜÀíÔ±µÄ´«Í³½â¾ö°ì·¨ÊÇsshÑ»·µÇ½½ÚµãÁÐ±í²¢Ö´ÐÐÒ»¶ÑÃüÁî¡£Õâ²»½öÈÝÒ׳ö´í,
ÇÒÿһ´ÎÑ»·¶¼Òª´ò¿ªÐµÄssh»á»°£¬Ð§ÂʵÍÏ¡£ÏëÏñÒ»ÏÂÒªÔÚ1000̨»úÆ÷ÉÏ˳ÐòÖ´ÐÐÃüÁ¸ü²»ÓÃËµÍøÂ簲ȫ£¬sshÃÜÔ¿ºÍÃüÁîÖ´ÐÐȨÏÞµÄÎÊÌâ¡£Õ⵱ȻÊÇÒ»ÖÖ¿ÉÐеİ취,µ«È±ÉÙÒ»ÖֿɹÜÀíµÄ¿ò¼Ü¡£
Õâ¾ÍÊÇÃüÁî±àÅŹ¤¾ß²úÉúµÄÔÒò¡£ÕâЩ¹¤¾ßÖ¼ÔÚ´óÁ¿µÄ½ÚµãÉϲ¢ÐÐÖ´ÐÐÃüÁîºÍʵʱ²Ù×÷¡£CFEngine, PuppetºÍChef¸÷×ÔÓò»Í¬µÄ·½·¨À´½â¾öÃüÁî±àÅÅÎÊÌâ¡£PuppetʹÓÃMCollective×÷ΪÆäÎäÆ÷,²¢½«Æä¼¯³Éµ½ÉÌÒµ°æÖС£
½üÀ´£¬ÎÒ¿ªÊ¼Ì½Ë÷ʹÓÃSaltStackÀ´½â¾öÅäÖùÜÀíºÍÃüÁî±àÅÅÕâÁ½¸öÎÊÌâ¡£SaltStack¿ªÊ¼ÓÚ2011Ä꣬ÊÇÒ»¸öÏà¶Ô½ÏеÄÏîÄ¿£¬µ«ÔÚϵͳ¹ÜÀíÔ±ºÍDevOps¹¤³ÌʦÖÐÓµÓÐÔ½À´Ô½¶àµÄ·ÛË¿¡£ÎÒ½«ÔÚ±¾ÎÄÖÐ̽ÌÖSalt×÷Ϊǰ;¹âÃ÷µÄÌæ´úÕߣ¬²¢ÓëPuppet×÷±È½ÏÒÔ̽Ë÷ÆäÌØÐÔ¡£
°²×°
´´ÊÀÖ®³õ£¬ÂúÊǿհ׺ÍÎÞÐò£¬ºÚ°µÁýÕÖ×ÅÕû¸öϵͳ……È»ºóÉñ°²×°ÁËÅäÖùÜÀíÆ÷£¬ÓÚÊÇÑô¹âÆÕÕÕ£¡Î¨Ò»µÄÂé·³ÊÇ£¬ÎÒÃÇ»¹ÐèÒª°²×°ÒÀÀµ……È»ºóÅäÖùÜÀíÆ÷±¾Éí»¹µÃ±»ÅäÖÃ……²¢ÇÒÓÐʱÊÂÇé»áÓÐÄÇôһµã³óª¡£
SaltÔÚUbuntuºÍCentOSÉϵݲװ¹ý³ÌÒì³£¼òµ¥,ÎÒÏàÐÅÔÚÓа²×°Ö¸ÄϵıðµÄϵͳҲһÑù (Arch
Linux, Debian, Fedora, RedHat, CentOS, FreeBSD, Gentoo,
Windows, Solaris). YMMV. µäÐͰ²×°¹ý³ÌÒþ²ØÁ˲»±ØÒªµÄϸ½ÚÅäÖ㬳ý·ÇÄãÐèÒªÐÞ¸ÄËûÃÇ¡£Ê×ÏȰ²×°salt
master£¬È»ºó°²×°salt minions, ½«minionsÖ¸Ïòmaster£¬°²×°Íê³É¡£Èç¹ûsalt
masterµÄÖ÷»úÃûÊÇ"salt"£¬¶¼²»ÐèÒª½«minionsÖ¸Ïòmaster£¬Ö±½Ó¾Í¿ÉÒÔÔËÐС£
È»¶ø, Èç¹ûÄã²»ÊÇʹÓÃÉÏÃæÌáµ½µÄ·¢Ðаæ»ò²Ù×÷ϵͳ, ÄãºÜ¿ÉÄÜÐèÒª¾íÆðÐä×Ó×Ô¼ºÊÖ¶¯°²×°Ò»Ð©ÒÀÀµ¡£°üÀ¨Python
(>= 2.6 < 3.0), ZeroMQ, pyzmq, PyCrypto, msgpack-pythonºÍYAMLµÄPython°ó¶¨.
ÁíÒ»·½Ãæ, PuppetÔÚ¶àÊý»ù´¡°²×°Ê±Ö»ÒÀÀµRubyºÍFacter, ÒÀÀµ´øÀ´µÄÂé·³ÏÔÖø¼õÉÙ. È»¶ø£¬PuppetµÄÒÀÀµÁбí¿ÉÒÔ½øÒ»²½Ôö¼Ó£¬°üÀ¨augeas-libs,
dmidecode, hiera, libselinux-ruby, pciutils, ruby-augeas,
ruby-irb, ruby-rdoc, rubygem-json, ruby-shadow, rubygems.
ÕâÈ¡¾öÓÚPuppetµÄ°æ±¾ºÍÄãÏëҪʹÓõŦÄÜ¡£
ÎÒϲ»¶Salt°ü°²×°µÄ¼òµ¥Ã÷ÁË¡£For the cases mentioned it is trivial
to set up and get going. Èç¹ûÄãÏëÇ××Ô°²×°ºÍÅäÖõķ±¹ý³Ì, ¸ú×Ű²×°Ö¸ÄÏ×ö¼´¿É¡£
If you are like me though and you prefer your provisioning
and configuration all in one gift wrapped package, que
Vagrant to the rescue and download this project by elasticdog
on github.
ÅäÖùÜÀí
ÅäÖÃ״̬
ÅäÖùÜÀí¶ÔPuppetÀ´ËµÊÇС²ËÒ»µþ£¬¶ÔSaltÓÖÈçºÎÄØ¡£ÈÃÎÒ£¨¸ßÐ˵쩾ªÑȵÄÊÇ£¬Õâ¼þʼòµ¥µ½ÁîÈË·¢Ö¸¡£ºÍPuppetÒ»Ñù£¬ÔÚSaltÖпÉÒÔÃèÊöϵͳµÄÄ¿±ê״̬¡£.
Salt½«Æä³ÆÖ®ÎªÒ»¸östate, ÅäÖÃÄ£¿éÊÇstateÄ£¿é¡£SaltµÄStateÄ£¿éÎļþÓÃYAMLд³É£¬ÒÔ.sls½áβ¡£ËüÃÇ´Ó¹¦ÄÜÉϵÈͬÓÚPuppetÄ£¿éµÄmanifestÎļþ£¬ºóÕßÓÃPuppet
DSLд³É£¬ÒÔ.pp½áβ¡£
SaltÔÚmasterµÄÅäÖÃÎļþÖÐÖ¸¶¨"file roots", ÀàËÆÓÚPuppetµÄ"module
path", µ«Í¬Ê±°üº¬ÁËÄ£¿é¸ùĿ¼ºÍ»·¾³ÀàÐÍ¡£¾ÙÀýÀ´Ëµ£¬ÔÚSaltÖÐÎÒÃÇ¿ÉÒÔ·Ö±ðÖ¸¶¨developmentºÍtest»·¾³ÅäÖÃÎļþ·¾¶.
×¢Òâbase»·¾³ÊDZØÐë´æÔڵġ£
file_roots: base: - /srv/salt/ dev: - /srv/salt/dev prod: - /srv/salt/prod |
base»·¾³±ØÐë°üº¬SaltµÄÈë¿ÚtopÎļþ(½Ð×ötop.sls).base¶¨ÒåÁËÒ»¸ö»ò¶à¸ö»·¾³£¬ÓÃÕýÔòÀ´Æ¥Åä½Úµã£¬È»ºóÒýÓÃÏàÓ¦µÄSalt
states. topÎļþÓëPuppetµÄnodesÎļþÏàËÆ¡£(PuppetÈë¿ÚµãÊÇsiteÎļþ,ÔÚSaltÖв»ÐèÒª).
¼ÙÉèÓÐÒ»¸öSalt masterºÍÁ½¸öminions (ÓÉElasticdog githubÌṩ)£¬ÎÒÏëÒªÔÚÁ½¸öminionsÉϰ²×°mongodb¡£Èç¹ûÔÚĬÈϵÄÈí¼þ²Ö¿âÖÐÓÐmongodb°ü£¬Ö»ÐèÒª3²½¼´¿É¡£
1, ÔÚtop.slsÖÐÖ¸¶¨½Úµã¡£
dev: 'minion*.example.com': - mongodb |
2, ÔÚdev/mongodb.slsÖÐÃèÊö״̬:
mongodb: pkg: - installed |
3, ´«µÝ״̬µ½salt minions:
# salt 'minion*' state.highstate -v Executing job with jid 20121218102842533621 -------- minion1.example.com: ---------- State: - pkg Name: mongodb Function: installed Result: True Comment: Package mongodb installed Changes: libicu: {'new': '3.6-5.16.1', 'old': ''} mongodb: {'new': '1.6.4-1.el5', 'old': ''} boost: {'new': '1.33.1-15.el5', 'old': ''} js: {'new': '1.70-8.el5', 'old': ''} minion2.example.com: ---------- State: - pkg Name: mongodb Function: installed Result: True Comment: Package mongodb installed Changes: libicu: {'new': '3.6-5.16.1', 'old': ''} mongodb: {'new': '1.6.4-1.el5', 'old': ''} boost: {'new': '1.33.1-15.el5', 'old': ''} js: {'new': '1.70-8.el5', 'old': ''} |
ÅäÖÃÃèÊöÎļþÓëPuppet·Ç³£ÏàËÆ¡£µ«¸ñʽ²î±ðºÜ´ó¡£ÕâÊÇÒòΪPuppetʹÓÃ×Ô¼ºµÄruby-like DSL,
¶øSaltʹÓÃYAML. ÕýÊÇÓÉÓÚÕâµã²»Í¬£¬Ôì¾ÍÁËSalt stateÅäÖÃÎļþÔÚÊÓ¾õÉϵļò½àÐÔ¡£YAML¶ÔÈËÀà¿É¶ÁÒ²ÈÝÒ×±»Ó³Éäµ½Êý¾Ý½á¹¹,
·Ç³£ÊʺÏ×öÅäÖùÜÀíÖеÄ×ÊÔ´ÃèÊö¡£Õâ²»ÊÇ˵Puppet DSL²»ÇåÎú»ò²»½á¹¹»¯- it is neither
- µ«ºÜÄÑʤ¹ýYAML. YAML¿ÉÒÔ¿ìËÙд³É£¬ÔÚÎҵľÑé¿´£¬±ÈPuppet DSLÒªÈÝÒ×Éú³É.
×¢Òâ: ÅäÖùÜÀíÉçÇø¹ØÓÚÉùÃ÷ÅäÖõÄ×î¼Ñ·½Ê½Ò»Ö±´æÔÚÕùÂÛ¡£²¿·ÖÈËÇàíùÓÚÀûÓñà³ÌÓïÑÔ£¨±ÈÈç˵Ruby£©µÄÁé»îÐÔ¡£ChefÊÇÆäÖеĴú±í¡£Puppet´¦ÓÚÖÐ¼äµØ¶Î¡£µ±Ê¹ÓÃÏֳɵŦÄÜʱ£¬Puppet
DSL·Ç³£Ç¿´ó¡£µ«Òª¸øÅäÖÿª·¢Õ߸ü´óµÄÄÜÁ¦£¬¾Í±ØÐëʹÓÃÄÚ²¿µÄRuby DSL¡£ÔÚ²¨Æ×µÄÁíÒ»¶Ë£¬SaltµÄ¼òµ¥YAML״̬ÃèÊö·Ç³£½á¹¹»¯¡£È»¶ø£¬SaltÒ²Ö§³ÖäÖȾÖîÈçJSON,
Mako, WempyºÍJinjaÀ´À©Õ¹ÆäÄÜÁ¦, ÔÚ½«À´»¹»áÖ§³ÖXML,ÔÉúPython¼°ÆäËû¡£
ÄÚÖõÄstateÄ£¿é
ÎÒÖªµÀSaltÊDZÈPuppet½üµÄÏîÄ¿£¬ ÎÒÍêÈ«¿ÉÒÔÔ¤Áϵ½²»»áÓÐÌ«¶à¿ÉÓõÄÄÚÖÃÄ£¿é¡£ÎÒ´íÁË: SaltÓдóÁ¿µÄÄÚÖÃÄ£¿é£¬°üº¬PuppetÖеĴ󲿷ֱØÒªÄ£¿é±ÈÈç
cron, exec (SaltÊÇcmd), file, group, host, mount, package
(SaltÖÐÊÇpkg), service, ssh_authorized_key (SaltÊÇssh_auth)ºÍuser¡£
¾¡¹ÜÈç´Ë, PuppetÈÔÈ»¾ßÓв¿·ÖÓÅÊÆ¡£±ÈÈç, Îҷdz£Ï²»¶PuppetµÄAugeasÄ£¿é¡£Augeas°ÑÄÚÈݵ±×÷valueÊ÷£¬ÔÊÐíÄãÐÞ¸Ä(¶ø²»ÊǸ²¸Ç)Ò»¸öÒÑ´æÔÚµÄÅäÖÃÎļþ¡£
ËäÈ»SaltÓÐÒ»¸öAugeas executionÄ£¿é£¬µ«ºÜ²»ÐÒÃ²ËÆÃ»ÓÐAugeasµÄstateÄ£¿é¡£ËäÈ»ÕâÑù£¬SaltÒ²ÓÐһЩ×Ô¼ºÌØÓеĶ«Î÷£¬±ÈÈçÕë¶Ôgit,
hgºÍsvnµÄÄÚÖÃstateÄ£¿é.
Ä£°å
Puppet¾ßÓпªºÐ¼´ÓõÄÄ£°åϵͳ¡£PuppetÓÐfile×ÊÔ´ºÍtemplate×ÊÔ´µÄ¸ÅÄÕâЩ×ÊÔ´·Ö²¼ÔÚÄ£¿éĿ¼½á¹¹µÄ²»Í¬Â·¾¶Ï¡£ÔÚSaltÖÐ,
filesºÍtemplatesÔÚͬһ¸öλÖá£Í¨¹ýΪtemplateÖ¸ÁîÖ¸¶¨typeÀ´Çø·ÖÊÇtemplate»¹ÊÇÆÕͨÎļþ×ÊÔ´,
type¿ÉÒÔÊÇjinja, mako»òwempy¡£ºÃ´¦ÊÇ¿ÉÒÔºÜÈÝÒ×Ϊfile×ÊÔ´Ôö¼ÓÂß¼¡£stateÎļþ¿ÉÄÜ¿´ÆðÀ´ÏñÏÂÃæÕâÑù£º
/etc/myapp.conf: file.managed: - source: salt://files/myapp.conf - mode: 644 - owner: root - group: root - template: jinja |
×¢Òâ×îºóÒ»ÐÐ, Ö¸Ã÷±»¹ÜÀíµÄÎļþÊÇÒ»¸öjinjaÄ£°å¡£
ÅäÖÃÎļþ¿ÉÒÔʹÓÃjinjaµÄÓï·¨À´Ôö¼ÓÂß¼¡£¾ÙÀýÀ´Ëµ, ¼ÙÉèÄãµÄÓ¦ÓóÌÐòÅäÖÃÎļþÖÐÓõ½ÁËÖ÷»úÃû¡£ÔÙ¼ÙÉèÔÚUbuntuh
Ö»ÐèÒª¶ÌÖ÷»úÃû£¨hostname£©£¬ÔÚCentOSÐèÒªFQDN¡£Õâ¿ÉÒÔºÜÈÝÒ×µØÔÚÄ£°åÎļþmyapp.confÖÐÖ¸¶¨:
{% if grains['os'] == 'Ubuntu' %} host: {{ grains['host'] }} {% elif grains['os'] == 'CentOS' %} host: {{ grains['fqdn'] }} {% endif %} |
ÔÚCentOS½Úµãminion1ÉϽá¹ûÎļþ/etc/myapp.conf½«°üº¬ÒÔÏÂÄÚÈÝ
host: minion1.example.com |
±äÁ¿
SaltÖеÄÈ«¾Ö±äÁ¿²»ÄÜÔÚʹÓÃʱ¶¨Òå¡£ÔÚ¶Ô±äÁ¿µÄÖ§³Ö·½ÃæPuppet¸ü¼ÓÖ±¹ÛºÍÁé»î¡£ÔÚSaltÖÐ, ËùÓеıäÁ¿±£´æÔÚµ¥¶ÀµÄλÖá£ÕâÑù×ö²»¹»Áé»î£¬µ«ÓÅÊÆÊǸüÓÐÖÈÐò¡£ÓÃSaltµÄ»°½²£¬±äÁ¿½Ð×ö"pillars"¡£pillarsµÄλÖÃÔÚsalt
masterµÄÅäÖÃÎļþÖÐÖ¸¶¨:
pillar_roots: base: - /srv/salt/pillar |
ºÍstateÎļþÒ»Ñù, Ê×ÏÈ´´½¨Ò»¸ötopÎļþ£¬ÔÚÆäÖпÉÒÔÒýÓÃÏà¹ØµÄpillarÄ£¿é¡£
Õâ¸ötopÎļþÒýÓÃÁËÃûΪpackages.slsµÄstateÎļþ, ÆäÖаüº¬½«Òª°²×°µÄÈí¼þ°üµÄ°æ±¾ºÅµÄ±äÁ¿£¬ÈçÏÂËùʾ:
mongodb: mongodb-1.6.4-1 httpd: httpd-2.2.3-65 |
ÉùÃ÷ÁËÁ½¸öpillar, mongodbºÍhttpd, È»ºó¿ÉÒÔÔÚstateÎļþÖÐÓÃÈçÏ·½Ê½ÒýÓÃ:
pillar['mongodb'] pillar['httpd'] |
Ä£ÄâÖ´ÐÐ(Dry run)
¹ÜÀíϵͳÓеãÏñ¼ÝÊ»·É»ú¡£Èç¹û²»Ð¡ÐĽ÷É÷£¬½«»áÊǸ߷çÏÕµÄÊÂÇé¡£¼ÙÉèÎÒÊÇÒ»¸öË«Òí·É»úµÄ¼ÝʻԱ£¬½«×öÒ»¸öΣÏÕµÄaerial
manoeuvre, ÎÒ¶à°ë»áÏ£ÍûÄܹ»ÏÈÄ£Äâ·ÉÐС£³ý·ÇÎÒÏñRed BaronÒ»ÑùÎÞËùη¾å¡£ÎÞÂÛÈçºÎ£¬»¹ºÃÔÚÖ´ÐÐSalt֮ǰ¿ÉÒÔÏÈ×ö²âÊÔ¡£ÄãÐèÒª×öµÄ½ö½öÊǽ«TestÉèÖÃΪTrue¡£
# salt 'minion1.example.com' state.highstate -v test=True minion1.example.com: ---------- State: - file Name: /etc/myapp.conf Function: managed Result: None Comment: The following values are set to be changed: newfile: /etc/myapp.conf Changes: |
×ܽá
ÔÚÅäÖùÜÀí·½Ãæ£¬SaltÔÚPuppetÃæÇ°»¹ÊÇÄܹ»Õ¾ÎȽŸúµÄ¡£Salt°²×°·Ç³£¼òµ¥£¬ÊôÓÚ¼òµ¥Ö÷ÒåµÄ¿ª·¢·ç¸ñ,
¹¦Äܷḻ¡£×ܵÄÀ´Ëµ£¬²»ÐèÒª¹ý¶àµÄ²Ù×÷¾Í¿ÉÒÔÍê³ÉÊÂÇé¡£ÎÒ·¢ÏÖµÄΨһÎÊÌâÊÇsalt-masterºÍminionÖ®¼äµÄÁ¬½ÓÓÐʱ»áÎ޹ʶϵô¡£ËÑË÷Ò»·¬ºó£¬ÎÒ·¢ÏÖÆäËûÈËÔÚSalt
0.10.5Õâ¸ö°æ±¾ÉÏÒ²Óöµ½ÁËͬÑùµÄÎÊÌ⡣ϣÍûÕâ¸öÎÊÌâÔÚÏÂÒ»¸ö°æ±¾Öеõ½½â¾ö¡£
ÃüÁî±àÅźÍÔ¶³ÌÖ´ÐÐ
MCollective
MCollectiveÊÇ PuppetµÄÃüÁî±àÅŽâ¾ö·½°¸¡£ÓÉR.I.PienaarÔÚPuppetLabsÄǰïÈËÒýÆðÖØÊÓ֮ǰ¶ÀÁ¢¿ª·¢Íê³É¡£MCollectiveʹÓÃmessage
broker (±ÈÈçActiveMQ)ͨ¹ýpub-sub×ÜÏßÀ´´«µÝÏûÏ¢, ¿ÉÒÔ²¢ÐÐͨÐÅ£¬Õâ±ÈÓÃssh¿ìµÃ¶à¡£ÕâÊÇÒ»¿ÉÒÔÀí½âÌØ¶¨ÏûÏ¢²¢²úÉúÏìÓ¦µÄ¿ò¼Ü¡£PuppetºÍMCollectiveÏÖÔÚ¿ÉÒÔÔÚͬһ¸ö¿ò¼ÜϹ¤×÷£¬Í¬Ê±ÌṩÍê³ÉÅäÖùÜÀíºÍÃüÁî±àÅŵŦÄÜ¡£
ÏȲ»¹ÜMCollectiveµÄÓÅÊÆ£¬ÓÐÁ½¸ö¸ºµ£Äܹ»´ò»÷ÄãµÄ¼¤Çé¡£µÚÒ»£¬MCollectiveÖ»ÊǺÍPuppetËÉÉ¢¼¯³É£¬ÖÁÉÙ¶ÔÉçÇø°æ±¾À´½²ÊÇÕâÑù
¡£MCollectiveÓе¥¶ÀµÄ°²×°°ü£¬¶ÀÁ¢µÄÅäÖÃÎļþ¡£ÁíÍâÄ㻹ÐèÒª°²×°ÅäÖÃbroker(±ÈÈçActiveMQ)£¬À´ÓëMCollectiveÒ»Æð¹¤×÷.
ËäÈ»²»ÄÑ£¬µ«ºÜ·±Ëö¡£×îºó£¬Ä㻹²»µÃ²»×Ô¼º½â¾öÉú²ú»·¾³ÖÐͨÐÅÇþµÀµÄ°²È«ÎÊÌâ¡£²»ÐÒµÄÊÇ£¬Õâ¸ö¾ÍÓеãÀ§ÄÑ¡£
MCollectiveµÄµÚ¶þ¸öÎÊÌâÊÇÏà¶ÔÀ´½²È±ÉÙһЩ×Ô´øµÄ¹¦ÄÜ¡£ÓкܶàÏֳɵIJå¼þ¿ÉÒÔÏÂÔØ°²×°(https://github.com/puppetlabs/mcollective-plugins),
ÓÃRubyд×Ô¼ºµÄ²å¼þÒ²²»ÊǺܸ´ÔÓ£²»¹ýÏëÒªÁ¢¼´Ê¹Óõϰ£¬Õϰ±ÈÏëÏñµÃÒª´ó¡£Nevertheless,
given that the framework is solid and extensible, dabbling
in Ruby plugins soon makes the real power of MCollective
apparent.
Salt
ÁíÒ»·½Ã棬SaltÉúÀ´¾ÍÓÐÃüÁî±àÅŵŦÄÜ¡£×îÏÈÉèÏëµÄ¾ÍÊÇÔ¶³ÌÖ´Ðм¼Êõ£¬È»ºó²ÅÌí¼ÓµÄÅäÖùÜÀí¹ÜÀí¡£SaltʹÓÃÇáÁ¿µÄZeroMQÀ´´¦ÀíÏûÏ¢¡£½á¹û¾ÍÊDz»ÐèÒªµ¥¶ÀµÄ°²×°¡£×°ºÃSaltºó£¬ÅäÖùÜÀíºÍÃüÁî±àÅžͿÉÒÔ¹¤×÷ÁË¡£ºÁ²»¾ªÆæ,Salt
stateÄ£¿éºÍexecutionÄ£¿éµÄÃüÁîÔÚÓï·¨ÉÏÀàËÆ£¬ËùÒÔºÜÖ±¹Û¡£ÔÙ¿´PuppetºÍMCollective×éºÏ,¸÷×ÔʹÓò»Í¬µÄ¹¤¾ßºÍÓï·¨½á¹¹£¬ÐèÒª¶îÍâµÄʱ¼äȥѧϰ¡£
SaltÔ¶³ÌÖ´Ðй¦ÄܵĿÉÓÃÐÔÁîÈËÓ¡ÏóÉî¿Ì¡£µ±Ç°µÄÔÚÏßÎĵµÁгöÁ˳¬¹ý100¸ö²»Í¬µÄÄÚÖÃexcutionÄ£¿é£°üÀ¨augeas£¡(ËùÒÔaugeas³ÉΪstateÄ£¿éÖ»ÊÇʱ¼äÉϵÄÎÊÌâ).
¾Ù¸ö¼òµ¥µÄÀý×Ó£¬¿´¿´Í¨ÓõÄ"cmd.run"Ä£¿éºÍÖ¸Áî¡£ÕâÔÚÄãÖªµÀÏëÒªÖ´ÐеÄÃüÁîÈ´ÓÖûÓÐÏֳɵÄÄ£¿é¿ÉÓÃʱ·Ç³£ÓÐÓã¬-
»òÕßÄã½ö½öÏëÒª¿ìËÙµØÔ¶³ÌÖ´ÐÐÃüÁî¡£¼ÙÉèÎÒÏëÔÚËùÓнڵãÉϼì²éÔËÐеÄÄں˰汾ºÅ£º
[root@salt salt]# salt '*' cmd.run "uname -r"
minion1.example.com: 2.6.18-274.18.1.el5 minion2.example.com:
2.6.18-274.18.1.el5 salt.example.com: 2.6.18-274.18.1.el5
»òÕßÎÒÏë¿´¿´´ÅÅÌʹÓÃÇé¿ö:
salt '*' cmd.run "df -h"
˳±ã˵һÏÂ, SaltÓÐÒ»¸öÄ£¿éÓÃÀ´²é¿´´ÅÅÌÓÃÁ¿ÒÔ¼°ÆäËû´ÅÅÌÏà¹ØµÄ²éѯ:
salt '*' disk.usage
ʹÓÃÄÚÖÃÄ£¿é¶ø²»ÓÃcmd.run·¢ËÍshellÃüÁîµÄºÃ´¦ÊÇ£¬Ä£¿éͨ³£·µ»Ø¹Ì¶¨½á¹¹µÄÊý¾Ý¡£Äܹ»ÒÔ±à³ÌµÄ·½Ê½ÓÃÔÚ×Ô¶¯»¯´¦ÀíÉÏ¡£
ÓкܶàÏֳɵÄexecutionÄ£¿éÀ´Âú×ãͨÓõĹÜÀíÈÎÎñ£¬±ÈÈçapt, at, cp, cron, disk,
extfs, file, hosts, iptables, mount, network, pam, parted,
pkg, ps, selinux, shadow, ssh, and test. Ò²ÓдóÁ¿µÄÄ£¿éÓÃÓÚÖ¸¶¨µÄÈí¼þ°üºÍÓ¦ÓóÌÐò£¬±ÈÈçapache,
cassandra, djangomod, git, mongodb, mysql, nginx, nova,
postgres, solr, sqlite3, ºÍtomcat.
ÉõÖÁÖ§³ÖÖ´ÐÐPuppet³ÌÐò¡£
×ܽá
ºÁÎÞÒÉÎÊ£¬SaltÔ¶³ÌÖ´ÐбÈPuppet¼ÓMCollective¸üÓÅÑÅ£¬¸½´ø¿ÉÓõŦÄܸü¶à¡£Ö§³Ö¶¯Ì¬²éѯºÍ´ó¹æÄ£µÄ·þÎñ±àÅÅ¡£Òª²é¿´ÍêÕûµÄ¹¦ÄÜ£¬Çë²Î¿¼salt
executionÄ£¿éµÄÎĵµ¡£
¸½¼Ó¹¦ÄÜ
Dashboard
PuppetʹÓÃPuppet dashboard. SaltĿǰûÓÐͼÐλ¯µÄ½çÃæ¡£ÎÒÖªµÀ£¬ÎÒÃǶ¼´ó°®ÃüÁîÐС£²»¹ý£¬ÓÐʱ¿´µ½ÂúÆÁÄ»µÄÂÌÉ«»òÊǵãµã°´Å¥Ò²ÊǺÜã«ÒâµÄ¡£
ÈÏÕæµÄ½²£¬dashboardÊÇ»ñµÃÄãËù¹ÜÀíµÄ½ÚµãÍøÂçstate¸ÅÀÀµÄºÃ¹¤¾ß¡£SaltµÄ·ÏßͼÖÐûÓÐͼÐνçÃæ£¬Ï£Íû×îÖÕ»á³öÏÖ¡£
Returners
ReturnersÊÇminion·µ»ØÊý¾Ýµ½´ïºó±»µ÷ÓõÄÄ£¿é¡£²»½«·µ»ØÊý¾Ý´«µÝ¸øsalt master£¬¶øÊǵ÷ÓÃReturnerÄ£¿éÀ´½«Êý¾Ý·¢¸øÆäËû·þÎñ£¬Í¨³£ÊÇÊý¾Ý¿â¡£SaltĿǰ֧³ÖµÄreturner£¬¿ÉÒÔÁ¬½Ócassandra,
mongo, redisºÍmysql. Ò²¿ÉÒÔºÜÈÝÒ×µÄÓÃPython½Å±¾ÎªÆäËû·þÎñдһ¸öreturner¡£
Salt Syndic
SaltÎĵµ½«Salt SyndicÃèÊöΪ"Ò»¸ö¿ÉÒÔ¹¹½¨SaltÃüÁîÍØÆËµÄÇ¿´ó¹¤¾ß“¡£Êµ¼ÊÒâÒåÉÏ£¬Salt
Syndic¿ÉÒÔÈÃÒ»¸öÔËÐÐSyndic·þÎñµÄSalt masterÁ¬½Óµ½¸ü¸ß²ãµÄmaster¡£
¼ÙÉèÄãÓжà¸ö²»Í¬µÄSalt»·¾³£¬Ã¿¸ö»·¾³¶¼ÓÐÒ»¸ömaster¡£ÕâЩ»·¾³¿ÉÄÜÊÇÌØµÄÔÆ»òÊÇÓзÀ»ðǽµÄÍøÂç¡£¼ÙÉèÄãÏëͬʱ¿ØÖÆÕ⼸¸ö»·¾³ÖеÄminions¡£Äã¿ÉÒÔÔÚÏëÒª¿ØÖƵÄmasterÖ÷»úÉϰ²×°Salt
Syndic¡£Salt Syndic´´½¨ÁË´«Êä½Ó¿Ú£¬ÔÚ×î¶¥²ãµÄmaster¿´À´£¬¾ÍÏñÊÇ¿ØÖÆÁ˺ܶàµÄminion,µ«ÅäÖÃ״̬ʵ¼ÊÉÏÊÇ´«µÝ¸øÁ˶à¸ömaster¡£¿ÉÒÔ½«ÆäÏëÏñΪ¾ü¶ÓµÄÃüÁî´«µÝϵͳ¡£
¼¯³É²âÊÔ
ÓÐÁ½¸ö²ÉÓÃÏÖÓвâÊÔ¿ò¼ÜµÄÏîÄ¿¸øPuppetÔö¼Ó²âÊÔ¹¦ÄÜ£¬Ãû×ÖÊÇcucumber-puppet (ʹÓÃ
Cucumber¿ò¼Ü)ºÍrspec-puppet (ʹÓÃRSpec).
Salt²ÉÈ¡µÄ×ö·¨ÊÇͨ¹ýһϵÁеÉÀàÌṩ¶Ô¼¯³É²âÊÔµÄÖ§³Ö£¬roadmapÖÐÌᵽδÀ´»áʹÓÃUnittest2ºÍpytest×öµ¥Ôª²âÊÔ¡£
×Ô¶¯»¯¼¯³É²âÊÔÊdzÖÐø***¸¶¹ÜµÀ±»ºöÊÓµÄÁìÓò£¬ÄÜÓÐһЩÄÚ½¨µÄÖ§³ÖÊǷdz£ºÃµÄ¡£ÕâÒ²ÊÇÒÔºóµÄ²©ÎÄÖн«Ì½ÌÖµÄÓÐȤÁìÓò
½áÂÛ
ÎÒµÄÄ¿µÄÊÇ¿´¿´Salt StackÊÇ·ñÄÜ×öΪÅäÖùÜÀíºÍϵͳÃüÁî±àÅŵĽâ¾ö·½°¸¡£Îҵķ½·¨ÊÇÓëPuppetÖÐ×î³£ÓõŦÄÜ×÷±È½Ï£¬ÒÔ̽Ë÷SaltµÄ¹¦ÄÜ¡£½áÂÛÊǺÜÒ«Ñ۵ġ£Salt
Stack²»½ö×Ô´øÁ˺ܶ๦ÄÜ£¬ÇÒÒ×ÓÚ°²×°£¬Ê¹Óã¬À©Õ¹¡£ ºÜÃ÷ÏÔ£¬Saltǰ;һƬ¹âÃ÷¡£ |