±¾ÎÄÊÔͼÕÒµ½ÀàËÆPuppet¡¢Chef¡¢AnsibleÕâÑù×Ô¶¯»¯ÅäÖùÜÀí¹¤¾ßµÄ¹²ÐÔ£¬ÒÔ²»ÖÁÓÚÃÔʧÔÚÔÓÂҵij¾ÊÀÖС£×Ü»áÓи÷ÖÖÈËΪ¸÷ÖÖÄ¿µÄÔì¸ÅÄÀ´ÈÃÊÀ½ç¸ü¸´ÔÓ¡£
±¾ÎÄͬÑùÊÊÓÃÓÚûÓÐÔËά¾ÑéµÄÈË¡£ÒòΪÎÒ¾ÍÊÇÒ»¸öûÓÐÔËά¾ÑéµÄÈË¡£»¶Ó¸«Õý¡£
ÓëÕâØíÖ®¼äµÄÀúÊ·
±¾È˽Ӵ¥×Ô¶¯»¯ÔËάµÄʱ¼ä±È½ÏÍí£¬Ò²¾ÍÒ»Äêǰ²ÅÖªµÀPuppet¼°×Ô¶¯»¯ÔËά£¨Ö»ÏÞÓÚÖªµÀ£©£¬¶øChef¡¢Ansible¾Í¸üÍíÁË¡£È»¶øÔÚѧϰËüÃÇ֮ǰ£¬ÎÒ¶ÔÔËάҪ×öÄÄЩÊÂÇ鲢ûÓиÅÄî¡£Õâ¾Í¶ÔÎÒѧϰPuppet£¬ChefºÍAnsibleÔì³ÉµÄÕϰ¡£ÒòΪ²»ÖªµÀÕâÈý¸ö¹¤¾ßÔÚÔËάÁìÓòµÄλÖ㬽â¾öÔËά¹ý³ÌÖеÄÄÄЩÎÊÌâ¡£ÎÒ¶ÔÕâÈý¸ö¹¤¾ßµÄ×î³õÓ¡Ïó¾ÍÊÇÓÐÁËËüÃÇ£¬²»ÓÃÎÒÊÖ¹¤µÄSSHÉÏ·þÎñÆ÷£¬È»ºóÒ»ÌõÌõÃüÁîÈ¥Ö´Ðа²×°Èí¼þ£¬²»ÓÃSCP
war°üÉÏ·þÎñÆ÷µÈ£¬¶Ô·þÎñÆ÷µÄ²Ù×÷¶¼¿ÉÒÔ×Ô¶¯»¯ÁË¡£
Õâ¸ö×î³õÓ¡ÏóÒ²¾ÍÊÇÎÒ¸úËüÃǵÄÀúÊ·¡£ÎªÊ²Ã´ÒªËµÕâÐ©ÄØ£¿¾ÍÊÇÒòΪÕâ¸ö×î³õÓ¡Ïó£¬ÈÃÎÒ¾õµÃËüÃÇÊÇÓй²ÐÔ¡£Ëùν¹²ÐÔ¾ÍÊÇ´æÔÚһЩ¹²Í¨µÄ¸ÅÄî»òÔÀíÖ®ÀàµÄ¶«Î÷£¬ÕÆÎÕÕâЩ¡°¶«Î÷¡±£¬ÎҾͿÉÒÔÕ¾ÔÚÒ»¸ö¸ü¸ßµÄ¸ß¶Èȥ˼¿¼¡£Puppet,
Chef, Ansible¶¼Êǹ¤¾ß£¬¶ÔÓÚ¹¤¾ßÀ´Ëµ£¬¹²ÐÔÖ¸µÄÊÇËüÃǹ²Í¬Òª½â¾öµÄÎÊÌâ¡£
µ«Êǵ±ÎÒ·Á˲»ÉÙÎÄÕºóÒÀȻûÓнá¹û¡£ËùÒÔ£¬ÎÒ¾ö¶¨×Ô¼ºÈ¥ÕÒËüÃǵĹ²ÐÔ£¬²¢¼Ç¼ÏÂÀ´¡£
×ÔÖÆÒ»¸ö×Ô¶¯»¯ÔËά¹¤¾ß
µ«ÊÇÒª´Ó¶à¸öÏàËÆµÄ¶«Î÷ÖÐÕÒµ½¹²ÐÔ£¬ËƺõÐèҪͬʱºÜÊìϤËüÃÇ¡£µ«ÊÇÎÒûÓÐÄÇô¶àʱ¼ä¡£ËùÒÔ£¬ÎÒÑ¡ÔñÁËÁíÒ»ÖÖ·½·¨£ºÔÚ´óÄÔÖÐÔ¤Ïë×Ô¼ºÈ¥ÊµÏÖÒ»Ì××Ô¶¯»¯ÔËά¹¤¾ß¡£µ«ÎÊÌâÊÇ£¬ÎÒ¶¼²»ÖªµÀ¡°×Ô¶¯»¯ÔËά¹¤¾ßҪʵÏÖÄÄЩ¹¦ÄÜ¡£
ÄÇÎÒ¾ÍÏȰÑÄ¿±ê½µµÍһЩ£¬°ÑÎÊÌâ¼ò»¯Ò»Ï£º½«ÎÒ×î³õµÄ¡°Ó¡Ïó¡±ÊµÏÖ×Ô¶¯»¯ÁË¡£ÎÒÄÜÏëµ½µÄ¾ÍÊÇдһ¸öbash½Å±¾£º
ssh ....
apt-get install -y java
apt-get -y nginx
scp ..
ºÃ£¬ÏÖÔÚ½«ÎÊÌâÄѶȼӴ󣺶Զą̀·þÎñÆ÷½øÐÐͬÑùµÄ²Ù×÷¡£ÎÒÄܵ½Ïë¾ÍÊǽ«ËùÓеķþÎñÆ÷µÄIP·ÅÔÚÒ»¸öÊý×éÀȻºóÓÃforÑ»·Ö´ÐС£ÎÊÌâÀ´ÁË£¬Èç¹ûÎÒ¶Ô·þÎñÆ÷ÒѾִÐÐÁËÒ»´ÎÃüÁîʱ¿ÉÄÜ»áʧ°Ü£¬ÎÒÔÙÏëÖ´Ðеڶþ´ÎÔõô°ìÄØ£¿Õâʱ£¬ÎÒÃÇ¿ÉÒÔÔÚbash½Å±¾Àï¼ÓÉÏifÓï¾ä£¬Èç¹û°²×°ÁËjava¾Í²»°²×°µÚ¶þ´ÎÁË¡£
ÏÔÈ»ÏÖʵÖл¹»áÓкܶàÎÊÌ⣬È磺
·´ÏòÅäÖÃÎÊÌ⣬Õâʱ£¬ÎÒÃÇÓ¦¸ÃÁíдһ¸öbash½Å±¾À´½â¾öÕâ¸ö·´ÏòµÄÎÊÌ⣿Èç¹û²ÉÓÃÕâÖÖ·½°¸£¬ÎÒÃÇbash½Å±¾ÊýÁ¿ÉÏÉýµ½Ò»¶¨³Ì¶È£¬ÈçºÎ¹ÜÀíÕâЩ½Å±¾¼°ËüÃÇÖ®¼äµÄ¹ØÏµ£¬Õâ¸ö·½°¸´øÀ´µÄеĸ´ÔÓÐÔ½«»á³ÉΪÎÒÃǵÄÐÂÎÊÌ⣻
·þÎñÆ÷ÉϲÙ×÷ϵͳµÄ¼æÈÝÐÔÎÊÌ⣺²»Í¬µÄ²Ù×÷ϵͳ£¬ÎÒÃǵÄbashÃüÁî»á²»Í¬£»
Èí¼þµÄ°æ±¾Éý¼¶»ò½µ¼¶ÎÊÌâµÈµÈ¡£
Ãæ¶ÔÕâЩÎÊÌ⣬ÎÒÃÇÊÇ¿ÉÒÔÿ´Î¶¼ÓÃbash½â¾ö£¬µ«ÊÇÕâÑùʼÖÕ²»ÊǸö°ì·¨¡£ÒòΪ£¬bash¶ÔÓÚ½¨Á¢Ò»¸ö×Ô¶¯»¯ÔËά¹¤¾ß¹ýÓڵײ㡣˵µ½Õâ¾ä»°£¬ÄãÓ¦¸ÃºÜÈÝÒ×¾ÍÏëµ½Éè¼ÆÒ»ÖÖDSL¡£µ½Õâ¸öµã£¬ÎÒ¾õµÃÎÒÃǵķ½ÏòÒѾÃ÷ÀÊ¡£Puppet,
ChefºÍAnsible¶¼·Ö±ð²ÉÓò»Í¬µÄDSL¡£¶øÕâÖÖDSLÊÇÐèÒª±àÒë³É·þÎñÆ÷¿ÉÖ´ÐеĶ«Î÷µÄ¡£Ê²Ã´¶«Î÷ÊÇ¿ÉÖ´Ðеģ¿Ä¿Ç°£¬ÎÒÃǼÙÉèÕâ¸ö¶«Î÷ÊÇbash½Å±¾¡£
µ«ÊÇÕâ¸öDSLÊÇ·ÅÔÚÄÄÀï±àÒëÄØ£¿·ÅÔÚÊܿػúÆ÷¶Ë£¬»¹ÊÇÖ÷¿Ø»úÆ÷ÉÏ£¿ËùÒÔ£¬ÎÒÈÏΪËùÓеÄ×Ô¶¯»¯ÔËά¹¤¾ß¶¼»áÓöµ½Õâ¸öÎÊÌ⡣ʲôÊÇÊܿػúÆ÷ÓëÖ÷¿Ø»úÆ÷£¿Äã¾ÍÀí½â³Éһ̨»úÆ÷Ö»·¢ÃüÁÁíһ̨»úÆ÷Ö»Ö´ÐÐÃüÁî¡£
ÎÒÃǸոÕ̸µÄÊÇÉè¼ÆDSL¡£µ«ÊÇ£¬ÒªÉè¼ÆÒ»¸öÍêÕûµÄ×Ô¶¯»¯ÔËά¹¤¾ß£¬ÎÒÃÇ×îÏÈÓ¦¸Ã¿¼ÂÇÊÇÖ÷¿Ø»úÆ÷ÈçºÎÓëÊܿػúÆ÷ͨÐÅ¡£Õâ¸öÎÊÌâÈÃÎҺܳ¤Ê±¼ä¸Ðµ½ºÜÎÞÁ¦£¬ÒòΪÎÞ´ÓÏÂÊÖ¡£ºóÀ´ÐÑÎò£¬ÔÀ´Äã²»Äܵ¥¶À¿¼ÂÇÕâ¸öÎÊÌ⣬ͨÐÅ·½Ê½»¹ÓëÄãÉè¼ÆµÄDSL¼°±àÒëDSLµÄ·½Ê½Óйء£Í¬Ê±£¬ÊܿػúÆ÷µÄÖ´Ðнá¹ûÕâ¸öÎÊÌ⣬ҲӰÏì×ÅÎÒÃÇÉè¼ÆDSL¡£
ÉÏÃæÎÒÃÇËÆºõÍü¼ÇÁËÒ»¸öÊÂʵ£º×Ô¶¯»¯ÔËά¹¤¾ßÓ¦¶ÔµÄÍùÍù²»ÊÇһ̨»úÆ÷£¬¶øÊǺܶą̀»úÆ÷¡£µ±Ãæ¶Ô¶ą̀»úÆ÷ʱ£¬¾Í»á²úÉúÒ»¸öеÄÎÊÌ⣺ÈçºÎ×éÖ¯ËüÃÇ£¿ÒòΪ²»Í¬µÄ»úÆ÷µÄÖ°Ôð²»Í¬£¬Ëù¶ÔÓ¦µÄÅäÖÃÒ²¾Í²»Í¬¡£
ÎÒÏëÎÒÃÇÒѾ֪µÀ×Ô¶¯»¯ÔËά¹¤¾ß¶¼Òª½â¾öµÄÎÊÌâÁË£º
1. ÈçºÎÓëÊܿػúÆ÷ͨÐÅ
2. ÈçºÎ×éÖ¯³É°ÙÉÏǧ̨»úÆ÷
3. DSLµÄÉè¼ÆÓë±àÒë
4. ÈçºÎµÃµ½Ö´Ðнá¹û
ÎÒ²»È·¶¨ÎÒÃǵÄ˼·ÓëPuppet£¬ChefºÍAnsibleµÄ×÷ÕßÒ»Ñù¡£Ò²²»Ò»¶¨ÍêÈ«ÕýÈ·¡£µ«ÊÇÖÁÉÙ£¬ÎÒÃÇ´ó¸ÅÖªµÀ×Ô¶¯»¯ÔËά¹¤¾ßÒª½â¾öÄÄЩÎÊÌâÁË¡£¶øËüÃÇÊDz»ÊÇ×Ô¶¯»¯ÔËά¹¤¾ßµÄ¹²ÐÔ£¿ÎÒ²»È·¶¨¡£
µ«ÊÇûÓйØÏµ£¬ÎÒÃǼÙÉèËüÃǾÍÊÇËùÓÐÅäÖùÜÀí¹¤¾ß¶¼Òª½â¾öµÄÎÊÌ⣬ËüÃǵĹ²ÐÔ£¬½ÓÏÂÀ´ÎÒÃÇÀ´¿´¿´ËüÃÇ·Ö±ðÊÇÔõô½â¾öÕâЩÎÊÌâµÄ¡£
ÕâØíµÄ±³¾°
ÔÚ½øÈëѧϰ֮ǰ£¬ÎÒÃÇÏÈ¿´¿´ËüÃǵı³¾°£º

Puppet

ÈçºÎÓëÊܿػúÆ÷ͨÐÅ
PuppetµÄÖ÷¿Ø»úÆ÷(Server)³ÆÎªPuppet master£¬ÊܿػúÆ÷(client)³ÆÎªPuppet
agent¡£ËüÃÇʹÓÃHTTPS½øÐÐͨÐÅ¡£ÔÚ°²×°puppet֮ǰ£¬ÐèÒª·Ö±ðÔÚÖ÷¿Ø»úÆ÷ºÍÊÜ¿ØÉÏÉèÖõÄhostname¡£
ÒòΪÊÇC/S¼Ü¹¹µÄ£¬Òâζ×ÅÄãÐèÒªÔÚÖ÷¿Ø»úÆ÷Éϰ²×°Puppet master£¬£¨°²×°µÄ¹ý³Ì»ò·ÔÄÆäËü½Ì³ÌµÄʱºò£¬Çë×¢Òâ½Ì³ÌËùʹÓõÄPuppetµÄ°æ±¾£¬Puppet°æ±¾Ö®¼äÊÇÓвîÒìµÄ£©ÎÒÃÇÒÔUbuntuΪÀý£º
sudo apt-get install -y puppetmaster |
ÔÚÊܿػúÆ÷Éϰ²×°Puppet agent:
sudo apt-get install -y puppet |
°²×°Íê³Éºó£¬ÊܿػúÆ÷ÐèÒªÉèÖÃÔÚ/etc/puppet/puppet.confÎļþµÄ[main]½ÚµãϼÓÈëserver=<master¡¯s
hostname>£¬Í¬Ê±ÔËÐÐsudo puppet agent ¡ªtestÏòÖ÷¿Ø»úÆ÷ÉêÇëÈÏÖ¤¡£Ö÷¿Ø»úÆ÷Ö´ÐÐsudo
puppet cert sign <agent¡¯s hostname>ÈÏÖ¤¡£
ÔÚÉú²ú»·¾³²¢²»Ò»¶¨²ÉÈ¡ÕâÑùµÄÊÖ¹¤ÈÏÖ¤¡£
DSLµÄÉè¼ÆÓë±àÒë1
PuppetµÄDSL³ÆÎªManifest £¬ÒÔ.ppΪÎļþÀ©Õ¹Ãû¡£ÏñÆäËü±à³ÌÓïÑÔÒ»Ñù£¬ËüÒ²ÓÐÒ»¸ö³ÌÐòµÄÈë¿Ú£¬ËüĬÈÏ·ÅÔÚ£º/etc/puppet/manifests/site.pp
£º
#vim /etc/puppet/manifests/site.pp
node 'mysqlserver.example.com' {
$mysql_password = 123456
package {
['mysql-common', 'mysql-client', 'mysql-server']:
ensure => present
}
service {
'mysql':
enable => true,
ensure => running,
require => Package['mysql-server']
}
exec {
'set-root-password':
path => "/usr/bin:/usr/sbin:/bin",
subscribe => [Package['mysql-common'], Package['mysql-client'],
Package['mysql-server']],
refreshonly => true,
unless => "mysqladmin -uroot -p$mysql_password
status",
command => "mysqladmin -uroot password
$mysql_password",
}
file {
'/etc/mysql/my.cnf':
content => template('my.cnf.erb'),
require => Package['mysql-server'],
notify => Service['mysql']
}
}
|
ManifestµÄ»ù±¾¸ñʽ£º
node NODENAME{ RESOURCE { NAME: ATTRIBUTE => VALUE, ... }
}
|
Nodenameʵ¼ÊÉϾÍÊǽڵãµÄhostname¡£ÕâÀïÓиöÌáÎÊ£ºÎªÊ²Ã´²»Ö±½ÓʹÓÃIPÄØ£¿Resource´ú±íµÄÊÇ×ÊÔ´£¬Ò²¾ÍÊÇPuppet½«½ÚµãÄÚËùÓеĶ«Î÷¶¼µ±×÷×ÊÔ´¡£¾ßÌåϸ½Ú£¬ÎÒÃÇÉÔºó»á½²µ½¡£
ÈçºÎ×éÖ¯³É°ÙÉÏǧ̨»úÆ÷
Èç¹ûÎÒÒª¿ØÖÆ1000̨»úÆ÷ÊDz»ÊÇÒâζ×ÅÎÒÒªÔÚsite.ppÖÐд1000¸ö ½Úµã node NODENAME{¡}ÄØ£¿´ð°¸Êǿ϶¨µÄ¡£
DSLµÄÉè¼ÆÓë±àÒë2
ÎÒÃÇ×¢Òâµ½`node`½ÚµãÖÐËù°üº¬µÄËùÓÐÄÚÈÝ£¬±¾ÖÊÉ϶¼ÊÇÔÚÃèÊöÕâ¸önodeµÄ״̬£¬È磺
service { 'mysql':
enable => true,
ensure => running
} |
Ö¸µÄÊÇ`service mysql`Õâ¸öResourceµÄ״̬ÊÇ¿ÉÓõÄÇÒÕýÔÚÔËÐеġ£PuppetÖÐÄÚ½¨Á˲»ÉÙResource¹©¸øÎÒÃÇʹÓã¬È磺file£¬exec,
packageµÈ¡£µ«Êǵ±PuppetÄÚ½¨µÄResource²»¹»ÓÃÁËÄØ£¿ËùÒÔ£¬ËüÓ¦¸ÃÖ§³ÖresourceµÄÀ©Õ¹¡£ÒÔ´ËÀàÍÆ£¬ËùÓеÄ×Ô¶¯»¯ÔËά¹¤¾ß¶¼Ó¦¸ÃÖ§³Ö´ËÀàÀ©Õ¹¡£
ͬʱ£¬PuppetÌṩÁËÄ£°å»úÖÆ¡£PuppetµÄÄ£°åģʽʹÓõÄÊÇRubyµÄERB¡£Ä㽫`.erb`µÄÎļþ·ÅÔÚ`/etc/puppet/templates`ºó£¬¾Í¿ÉÒÔÔÚpuppetµÄ´úÂëÖÐʹÓÃ`template('my.cnf.erb¡¯)`£º
#vim /etc/puppet/templates/my.cnf.erb [mysql] ... ... |
¼ÈÈ»ÓÐÄ£°å£¬ÔõôÉÙµÃÁ˱äÁ¿£¿±äÁ¿µÄ¶¨Ò壺$VAR_NAME = VALUE¡£ÓбäÁ¿µÄµØ·½£¬Ò»¶¨»áÒýÓÃ×÷ÓÃÓò¸ÅÄ²»ÂÛËüÊǾ²Ì¬×÷ÓÃÓò»¹ÊÇÈ«¾Ö×÷ÓÃÓò¡£¿ÉÒÔ¸æËßÄãPuppetÊǾ²Ì¬×÷ÓÃÓò¡£²Â²ÂPuppetµÄ±äÁ¿µÄ×÷ÓÃÓò·Ö¼¸¼¶£¿Êµ¼ÊÉÏ£¬Puppet£¬Chef£¬AnsibleµÄ±äÁ¿¶¼ÊǾ²Ì¬×÷ÓÃÓò¸ÅÄËüÃǵıäÁ¿×÷ÓÃÓò·ÖÓÖ¶¼·Ö³É¼¸¼¶£¿¶àÎÊÒ»¾ä£ºÕâÒ²ÊÇËüÃǵĹ²ÐÔÂð£¿
ÏÖÔÚÎÒÃÇÁ˽âÁËManifest¼°Æä»ù±¾¸ñʽ¡¢node¡¢resource¸ÅÄģ°åºÍ±äÁ¿¡£Í¬Ê±£¬ÎÒÃDz¢²»Ó¦¸Ã°ÑËùÓеÄÄÚÈݶ¼Ð´µ½Ò»¸ösite.ppÎļþÖУ¬Õâ¾ÍÏñÎÒÃDz»Ó¦¸Ã°ÑËùÓеÄÂß¼¶¼Ð´ÔÚCÓïÑÔÖеÄmainº¯ÊýÖÐÒ»Ñù¡£ÄÇPuppetµÄDSLÊÇÈçºÎ½â¾öÕâ¸öÎÊÌâµÄ£ºÈçºÎÈÿª·¢Õ߸ü·½±ãµÄ×éÖ¯´úÂë?
ÏÖÔÚÎÒÃÇÀ´¿´Ïà¶ÔÄ£¿é»¯Ò»Ð©µÄPuppet´úÂ룺
#vim /etc/puppet/manifests/site.pp
class mysql($mysql_password = "123456") { package { ['mysql-common', 'mysql-client', 'mysql-server']: ensure => present }
service {
'mysql':
enable => true,
ensure => running,
require => Package['mysql-server']
}
exec {
'set-root-password':
path => "/usr/bin:/usr/sbin:/bin",
subscribe => [Package['mysql-common'], Package['mysql-client'],
Package['mysql-server']],
refreshonly => true,
unless => "mysqladmin -uroot -p$mysql_password
status",
command => "mysqladmin -uroot password
$mysql_password",
}
file {
'/etc/mysql/my.cnf':
content => template('my.cnf.erb'),
require => Package['mysql-server'],
notify => Service['mysql']
}
}
node 'agent' {
include mysql
class { 'mysql':
mysql_password => '456789'
}
} |
Õâ¸ö°æ±¾µÄsite.ppÎÒÃÇÓõ½ÁËclass¸ÅÄî¡£Äã¿ÉÒÔ¶¨ÒåÁËÒ»¸öclass£¬È»ºó½«Ö°ÔðÏàͬµÄÂß¼·ÅÔÚÆäÖС£×îºóÔÚÆäËüµØ·½ÒýÓᣵ«ÊÇÒýÓõÄʱºòÒª·ÖÇé¿ö£¬Õâ¸öclassÓÐûÓдø²ÎÊý£¬
½«Ó°ÏìʹÓÃÕâ¸öclassµÄ·½Ê½¡£
µ«ÊǾÍËãÕâÑù£¬ÎÒÃǵÄsite.ppµÄ´úÂë¿Éά»¤ÐÔÒ»Ñù²»¸ß¡£ËùÒÔ£¬Puppet»¹ÌṩһÖÖmodule¸ÅÄʵ¼ÊÉÏ£¬ÓÃÁËÄã¾ÍÖªµÀ£¬puppet¾ÍÊǽ«class´Ósite.ppÒÆ³öÈ¥Á˵ÄÁíÒ»ÖÖ˵·¨¡£ÎÒÃÇÀ´¿´Ê¹ÓÃÁËmoduleµÄµÚÈý°æ£º
ÎÒÃǽ«mysql class³éµ½mysql moduleÖУº
#vim /etc/puppet/modules/mysql/manifests/init.pp class mysql($mysql_password = "123456") { package { ['mysql-common', 'mysql-client', 'mysql-server']: ensure => present }
service {
'mysql':
enable => true,
ensure => running,
require => Package['mysql-server']
}
exec {
'set-root-password':
path => "/usr/bin:/usr/sbin:/bin",
subscribe => [Package['mysql-common'], Package['mysql-client'],
Package['mysql-server']],
refreshonly => true,
unless => "mysqladmin -uroot -p$mysql_password
status",
command => "mysqladmin -uroot password
$mysql_password",
}
file {
'/etc/mysql/my.cnf':
content => template('mysql/my.cnf.erb'),
require => Package['mysql-server'],
notify => Service['mysql']
}
} |
ÔÚʹÓÃmodule֮ǰ£¬ÎÒÃǵÄÎļþ½á¹¹ÊÇÕâÑùµÄ£º
|-- auth.conf
|-- environments
|-- files
|-- manifests
| `-- site.pp
|-- puppet.conf
|-- templates
| `¡ªmy.cnf.erb |
ʹÓÃmoduleºó£º
|-- auth.conf
|-- environments
|-- files
|-- manifests
| `-- site.pp
|-- modules
| `-- mysql
| |-- manifests
| | `-- init.pp
| `-- templates
| `-- my.cnf.erb
|-- puppet.conf
`-- templates |
¶¨ÒåÁËmodule£¬ÄÇÔõôÓÃÄØ£¿
#vim /etc/puppet/manifests/site.pp node 'agent' { include mysql } |
µ½ÕâÀÎÒÏàÐÅÄãÖªµÀ´ó¸ÅÔõôдPuppet£¬µ«ÊÇÎÒ¾õµÃÊDz»¹»µÄ¡£ÎÒ²»Àí½âËüΪʲôÕâÑùÉè¼Æ¡£ÎÒÃÇΪʲô²»ÊÇ£º
node 'agent_hostname'{
install package [¡®mysql¡¯,¡¯mysqlserver¡¯]
start service ¡®mysql'
create template mysql.cnf
} |
ÎÒµÄÒâ˼ÊÇΪʲôÊÇÒÔÃû´Êµ¼ÏòµÄÃèÊöÐÔÓïÑÔ£¬¶ø²»ÊÇÒÔ¶¯´ÊΪµ¼Ïò¡£È»ºó£¬ÎÒ¾ÍÈ¥ÕÒ¡¶ÅäÖùÜÀí×î¼Ñʵ¼ù¡·¡£ÐÑÎòÁË£¬ÔÀ´ÅäÖùÜÀí²»ÊÇÒ»Á½¸ö¹¤¾ß¾Í¿ÉÒԸ㶨¡£ËüÊÇÒ»¸öϵͳ£¬°üÀ¨Áù¸öºËÐÄÖ°ÄÜ£º
1. Ô´´úÂë¹ÜÀí
2. ¹¹½¨¹¤³Ì
3. »·¾³ÅäÖÃ
4. ±ä¸ü¿ØÖÆ
5. ·¢²¼¹¤³Ì
6. ²¿Êð
ËùÒÔ£¬ÎÒÒÔǰһֱ²»Àí½â×Ô¶¯»¯ÔËάºÍ×Ô¶¯»¯ÅäÖùÜÀíÖ®¼äµÄÇø±ð¡£Í¬Ê±ÎÒ¿´µ½ÁËһЩÎÄÕÂÀÅäÖùÜÀíʵ¼ÊÉϾÍÊÇ״̬¹ÜÀí£¬²»ÂÛÊÇ·þÎñÆ÷״̬»¹ÊÇÈí¼þ״̬¡£
ÕâÏÂÖÕÓڸоõÃ÷°×ÁË£¬Ò²ÄѹÖPuppet£¬Chef£¬AnsibleµÄDSL¶¼ÊÇÃèÊöÐÔµÄÓïÑÔ¡£
µ«ÊÇ£¬PuppetÈçºÎ±àÒ룬ÔÚÄÄÀï±àÒëÎÒÃÇдºÃµÄmanifestÄØ£¿ÔÚÖ÷¿Ø»úÆ÷ÓëÊܿػúÆ÷ÈÏÖ¤³É¹¦ºó£¬ÊܿػúÆ÷»áÿ¸ôÒ»¶Îʱ¼ä¾ÍÏòÖ÷¿Ø»úÆ÷·¢ÇëÇó£¬Õâ¸öÇëÇ󽫻á°Ñ×Ô¼º£¨ÊܿػúÆ÷£©µÄÐÅÏ¢¸æËßÖ÷¿Ø»úÆ÷¡£Ö÷¿Ø»úÆ÷Äõ½ÕâЩÐÅÏ¢ºóÓëmanifestÁ´½Ó±àÒ룬×îºóÉú³ÉÒ»·ÝÊܿػúÆ÷£¨puppet¿Í»§¶Ë£©¿ÉÖ´ÐеÄcatalog¡£ÊܿػúÆ÷ÔÚÖ´ÐеĹý³ÌÖУ¬½«Ö´ÐÐÇé¿ö·´À¡¸øÖ÷¿ØÖ÷»ú¡£Õâ¾ÍÊÇPuppetÖÐÖ÷¿Ø»úÆ÷ÈçºÎµÃµ½ÊܿػúÆ÷µÄÃüÁîÖ´Ðнá¹ûµÄ¡£
µ½´Ë£¬ÎÒÃÇ¿´µ½ÁËPuppetÒѾ»Ø´ðÁËÎÒÃÇ֮ǰµÄËĸöÎÊÌâ¡£
С½á
1. ÈçºÎÓëÊܿػúÆ÷ͨÐÅ
²ÉÓÃC/S¼Ü¹¹£¬Ê¹ÓÃHTTPS£¬agentÏòmasterÉêÇëÖ¤Êé¡£
2. ÈçºÎ×éÖ¯³É°ÙÉÏǧ̨»úÆ÷
ÔÚmanifestÖÐʹÓÃ`node`¹Ø¼ü×Ö¶¨Òå¡£
3. DSLµÄÉè¼ÆÓë±àÒë
* ×éÖ¯´úÂëµÄ·½Ê½
PuppetÔÚmanifestÎļþÖж¨Òånode£¨Êܿؽڵ㣩£¬½«ËùÓÐnodeÖеĹ¹¼þ³éÏóΪresource£¬ÎÒÃÇ¿ÉÒÔ¸øÕâ¸öresourceµÄattributeÉèÖÃÖµ¡£nodeÏ¿ÉÒÔ°üº¬¶à¸öresource£¬ÕâЩresource¹²Í¬¹¹³ÉÁËÕâ¸önodeµÄ״̬¡£µ«ÊDz»¿ÉÄܽ«ËùÓеÄresource¶¼Ð´ÔÚÒ»¸öÎļþÖУ¬ÔÙ˵һ¸ömanifestÎļþͨ³£²»Ö¹Ò»¸önode¡£ËùÒÔ£¬ËùÒÔ£¬PuppetÌṩһÖÖmoduleºÍclass»úÖÆ£¬ÈÃÄãÄܽ«Ò»Ð©¹²Í¬Æðµ½Í¬Ò»Ö°ÔðµÄresource´ò°üµ½Ò»Æð¡£classÓëmoduleÓÐʲô²»Í¬ÄØ£¿class¿ÉÒÔÖ±½Óдµ½manifestÎļþÖУ¬¶ømodule±ØÐëÁíÍâн¨Ò»¸öĿ¼½á¹¹¡£Õâ¾ÍÊÇPuppet×éÖ¯´úÂëµÄ·½Ê½¡£
ÉîÈëѧϰ£ºÈç¹û´¦ÀíresourceÖ®¼äµÄ¹ØÏµÎÊÌ⣬ËüÃǺÜÓпÉÄÜÓÐÒÀÀµ¹ØÏµ¡£class¼°moduleÒ²»áÓÐͬÑùµÄÎÊÌâ¡£if
else¼°forÄØ£¿
* ±äÁ¿¶¨Ò壺 $VAR_NAME = VALUE¡£
ÉîÈëѧϰ£ºÁ˽â±äÁ¿µÄ×÷ÓÃÓò
* Ä£°å£ºÊ¹ÓÃrubyµÄerbÎļþ
4. ÈçºÎµÃµ½Ö´Ðнá¹û
ÊܿػúÆ÷Ö÷¶¯½«Ö´Ðнá¹û·¢Ë͸øÖ÷¿Ø»úÆ÷¡£
ËüÕæµÄÒ»¶¨ÒªÓÐmaster²ÅÄÜÓÃÂ𣿲»Êǵġ£PuppetÌṩÁ˵¥»ú°æµÄʹÓ÷½·¨¡£¾ßÌåÇëgoogle:
puppet apply¡£
Chef
ChefµÄÖÐÎÄÒâ˼ÊdzøÊ¦¡£ËùÒÔËü½«ËùÓеÄÊܿػúÆ÷¿´×÷¡°²ËëÈ¡±¡£µ«ÊÇÈç¹ûÎÒÃDz»¸ø¸æËßËü²ËÆ×£¨Cookbook£©£¬ËüÊDz»»á¸øÎÒÃÇ×ö²ËµÄ¡£²ËÆ×É϶¼Ð´×ÅÊ²Ã´ÄØ£¿ÊÇÅä·½£¨Recipe£©¡£ËùÒÔ£¬ÎÒÃǰÑrecipeÒ»¸ö¸öµÄдµ½CookbookÖУ¬×îºó½»¸øChef¡£

ChefͬÑùÊÇC/S¼Ü¹¹£¬CÓëSÒ²ÊÇʹÓÃHTTPS½øÐÐͨÐŵġ£Í¬ÑùµÄ£¬ÕýÒòΪÕâÑù£¬ÎÒÃÇ¿ÉÄÜÖØÓÃѧϰPuppetµÄpatternÀ´Ñ§Ï°Chef¡£µ«ÊÇÒòΪChefµÄC/SģʽµÄͶ×ʻر¨ÂÊÌ«µÍÁË£¬ËùÒÔ£¬ÎÒ¼á³ÖÒ»¶Îʱ¼äºó£¬¾Í·ÅÆúÁË¡£ºÍPuppetÒ»Ñù£¬ChefÒ²ÌṩÁ˵¥»ú°æ£ºChef-solo¡£

Ansible

Ansible˵ÊÇagentles£¨È¥¿Í»§¶Ë£©µÄ¡£µ«ÊÇʵ¼ÊÉÏ£¬ËüÒªÇóÊܿػúÆ÷ÉÏ×°ÓÐSSH¼°Python£¬²¢ÇÒ×°ÁËpython-simplejson°ü¡£Êµ¼ÊÉÏ£¬ÎÒÃÇÏÖÔڵĻúÆ÷»ù±¾ÉÏĬÈ϶¼ÒѾ°²×°ÕâЩ¡£ËùÒÔ£¬ÔÚʹÓÃAnsibleʱ£¬Äã²»ÐèÒªÌØÒâ×¼±¸Ò»Ì¨»úÆ÷×öΪÖ÷¿Ø·þÎñÆ÷¡£Ö»ÒªÄãÏ룬ÈκλúÆ÷ËæÊ±¶¼¿ÉÒÔ±ä³ÉÖ÷¿Ø»úÆ÷¡£
¹ØÓÚAnsibleµÄ°²×°¿´Îĵµ¾ÍºÃÁË¡£ÓëChefºÍPuppet²»Í¬µÄÊÇ£¬Ansible×éÖ¯ÊܿػúÆ÷µÄÄDz¿·ÖÂß¼³éÀ´µ¥¶À·Å£¬½ÐInventory¡£ËüÊÇÒ»¸öini¸ñʽµÄÎļþ£¬Èçhosts£º
[web] 192.168.33.10
[db]
192.168.33.11 |
ÎļþÃûºÍ·¾¶¶¼ÈÎÒ⣬µ«Êǽ¨ÒéʹÓñíÒâµÄÃû×Ö¼°ºÏÊʵÄ·¾¶¡£
PuppetºÍChef¶¼×Ô¼º×öÁËÒ»Ì×DSL£¬È»ºóÔÙ×Ô¼ºÐ´±àÒëÆ÷£¬µ«ÊÇAnsibleʹÓõÄÊÇyaml¸ñʽ¡£ÎÒ¾õµÃÕâÊǷdz£´ÏÃ÷µÄÉè¼Æ£ºÒ»ÊÇ´ó¼Ò¶¼ÊìϤyaml¸ñʽ±ÈÊìϤ×Ô¶¨ÒåµÄDSLÀ´µÃ¼òµ¥£¬¶þÊDz»ÐèÒª×Ô¼ºÉè¼ÆDSLÁË£¬ÈýÊDz»ÓÃ×Ô¼ºÐ´±àÒëÆ÷ÁË¡£ËùÒÔ£¬ÎÒ¸öÈËѧϰ¹ý³ÌÖУ¬·¢ÏÖËüÊÇÏà¶ÔPuppet£¬Chef¼òµ¥ºÜ¶à¡£
Á˽âyamlÎļþ¸ñʽºó£¬½ÓמÍÊÇÀí½âAnsibleµÄÒþÓ÷ÁË¡£AnsibleÊǵ¼ÑÝ£¬½«ËùÓеÄÊܿػúÆ÷Àí½âΪÑÝÔ±¡£¶øÎÒÃÇ¿ª·¢ÕßÔòÊDZà¾ç¡£ÎÒÃÇÖ»Òª°Ñ¾ç±¾(playbook)дºÃ£¬AnsibleÄþ籾ÔÙÓëInvenstoryÒ»¶ÔÉϺţ¬ÑÝÔ±Ö»»á°´Õվ籾ÉϵÄÈçʵ·¢»Ó£¬²»»áÓÐÈκεĸöÈË·¢»Ó¡£
ºÃ£¬ÎÒÃǾÍÀ´Ð´µÚÒ»°æ±¾µÄplaybook.yml£¨Â·¾¶ºÍÃû×Ö¶¼¿É×Ô¶¨Ò壩£º
--- - hosts: web tasks: - name: install nginx apt: name=nginx state=latest
- hosts: db
vars:
mysql_password: '123465'
tasks:
- name: install mysql
yum: name={{item}}
with_items:
- 'mysql-common'
- 'mysql-client'
- 'mysql-server'
- name: configurate mysql-server
template: src=my.cnf.j2 dest=/etc/mysql/my.cnf
- name: start service
service: name=mysql state=started |
#vim templates/my.cnf.j2 [mysql] ... passowrd={{mysql_password}} |
ÎÒÃǵľ籾°üÀ¨Á½¸öÑÝÔ±£ºweb£¬db¡£ËüÃǶ¼¶ÔÓ¦ÄÄЩÊܿػúÆ÷ÄØ£¿¿´InvenstoryÎļþ¾ÍÖªµÀÁË¡£ÄÇÕâЩÑÝÔ±¶¼Òª×öÄÄЩÊÂÇéÄØ£¿¿´tasks£¬ËüÏÂÃæ¸úµÄÊÇÒ»¸öÁÐ±í¡£Ïñ`yum`£¬`apt`£¬`template`£¬`service`£¬±»³ÆÎªmodule£¬ÀàËÆÓÚPuppetµÄresourceºÍChefµÄrecipe¡£Ansible±¾ÉíÌṩÁ˲»ÉÙmodule£¬µ«ÊÇÏë¶¼²»ÓÃÏ룬һ¶¨²»ÄÜÂú×ãËùÓÐÏîÄ¿µÄÐèÇó£¬ËùÒÔ£¬Äã¿ÉÒÔ¿ª·¢×Ô¼ºµÄmodule¡£
ͬÑùµÄ£¬AnsibleÌṩ±äÁ¿ºÍÄ£°å£¨Jinja2£©»úÖÆ¡£ÎÊÌâÀ´ÁË£¬AnsibleµÄ×÷ÓÃÓò·ÖΪ¼¸¼¶ÄØ£¿
ͬÑùµÄ£¬ÎÒÃÇ¿ÉÒÔ²»ÄÜÈÝḚ̀ÑËùÓеÄtask¶¼Ð´ÔÚÒ»¸öÎļþÀï¡£AnsibleÊÇÈçºÎ×éÖ¯´úÂëµÄÄØ£¿AnsibleÌá³öroleµÄ¸ÅÄî¡£Êǵ쬰çÑݹ²Í¬Ö°ÔðµÄtask£¬ÎÒÃǰÑËüÃǹ鵽ͬһ¸öroleÖС£ËùÒÔ£¬ÎÒÃÇÎļþ½á¹¹Ò²±äÁË£¬ÓÉÔÀ´µÄÖ»ÓÐÁ½¸öÎı¾Îļþ£¬µ½ÏÖÔÚÐèҪн¨Ä¿Â¼ÁË£º
©¤©¤ hosts
©À©¤©¤ playbook.yml
©¸©¤©¤ roles
©¸©¤©¤ mysql
©À©¤©¤ tasks
©¦ ©¸©¤©¤ main.yml
©¸©¤©¤ templcates
©¸©¤©¤ my.cnf.j2 |
Õâʱ£¬playbook.yml£º
-- - hosts: web tasks: - name: install nginx apt: name=nginx state=latest
- hosts: db
var:
mysql_password: '123456'
roles:
- mysql |
¶ømain.yml:
- name: install mysql yum: name={{item}} with_items: - 'mysql-common' - 'mysql-client' - 'mysql-server'
- name: configurate mysql-server
template: src=my.cnf.j2 dest=/etc/mysql/my.cnf
- name: start service
service: name=mysql state=started |
¾ÍÊÇtaskºÍroleÖ®¼äµÄ¹ØÏµ¡£ÄÇtaskÖ®¼äµÄ¹ØÏµ£¬roleÖ®¼äµÄ¹ØÏµÄØ£¿
AnsibleµÄDSL¾ÍÊÇÕâÑù×éÖ¯´úÂëµÄ¡£×îºóÒ»¸öÎÊÌâÈçºÎµÃµ½Ö´Ðнá¹ûÄØ£¿Õâ¾ÍҪ˵µ½AnsibleµÄÔÀí£ºAnsible½«±¾µØµÄymlÎļþ±àÒë³Épython´úÂ룬Ȼºó´«µ½ÊܿػúÆ÷£¬ÊܿػúÆ÷Ö´Ðнá¹ûÒÔJson¸ñʽ·µ»Ø¡£
AnsibleµÄÈëÃŷdz£¼òµ¥¡£
С½á
1. ÈçºÎÓëÊܿػúÆ÷ͨÐÅ
Ö»ÒªÖ÷¿Ø»úÆ÷ÓëÊܿػúÆ÷Ë«·½½«ÓÐSSH
2. ÈçºÎ×éÖ¯³É°ÙÉÏǧ̨»úÆ÷
ʹÓÃInvenstory¹ÜÀí
3. DSLµÄÉè¼ÆÓë±àÒë
* ×éÖ¯´úÂëµÄ·½Ê½
Ansible LanguageµÄÈë¿Ú¾ÍÊÇplaybook¡£Äã¿ÉÒÔÖ±½ÓÔÚplaybookÀï¼Ó`tasks`¡£ºÜ×ÔÈ»£¬ÎÒÃÇÏëµ½µÄÕâ¸ötasksÀïÊÇÒ»ÅúСtask¡£ÊÂʵµÄÈ·ÊÇÕâÑù£¬µ«ÊÇÔÚAnsibleÖУ¬Ëü½Ðmodule¡£µ«ÊÇ£¬ÎÒÃDz»Ï£ÍûËùÓеÄtaskдÔÚͬһ¸öÎļþÖУ¬Õâʱ£¬AnsibleµÄrole»úÖÆ¾ÍÆð×÷ÓÃÁË¡£Äã¿ÉÒÔ°ÑÍê³ÉͬһְÔðµÄÒ»Åú·ÅÔÚÒ»¸öroleÖоͺÃÁË¡£
ÉîÈëѧϰ£ºmoduleÖ®¼äµÄÒÀÀµÎÊÌ⣬if-elseÎÊÌâ
* ±äÁ¿¶¨Ò壺²»Í¬µÄ¼¶±ðÓв»Í¬µÄ¶¨Òå·½·¨
ÉîÈëѧϰ£ºÁ˽â±äÁ¿µÄ×÷ÓÃÓò
* Ä£°å£ºÊ¹ÓÃJinja2
4. ÈçºÎµÃµ½Ö´Ðнá¹û
ÊܿػúÆ÷Ö÷¶¯½«Ö´Ðнá¹û·¢Ë͸øÖ÷¿Ø»úÆ÷¡£
×ܽá
Ãæ¶Ô²ã³ö²»ÇîµÄбà³ÌÓïÑÔ¡¢Ð¿ò¼Ü¡¢Ð¸ÅÄÎÒÃdzÌÐòÔ±×ÜÊÇѧ²»Íê¡£³ÏÈ»£¬ÎÒ¼ÙÉè´ó¼Ò¶¼°®Ñ§Ï°£¬µ«ÊÇ£¬ÎÒÃǸüÐèÒªÎÊ£ºÑ§µ½µÄÕâЩ¶«Î÷£¬µ½µ×ÊôÓÚ½â¾öÓò»¹ÊÇÎÊÌâÓò¡£ËùÒÔ£¬À´ÁËж«Î÷£¬ÎÒ×ÜÊÇÒªÎÊÕâ¶«Î÷½â¾öÁËʲôÎÊÌ⣿ΪʲôËüÄܽâ¾ö£¬ÒÀ¾ÝÊÇʲô£¿ÎÒÃÇÐèÒªµÄÊÇÎÊÌâµÄ±¾ÖʺÍÎÊÌâµÄ½â¾öÄ£ÐÍ£¬¶ø²»ÊDZðÈ˺ù«ÀïµÄÒ©¡£
˵ԶÁË¡£Êµ¼ÊÉÏ£¬³ýÁËÉÏÊöµÄØí×Ô¶¯»¯ÅäÖùÜÀí¹¤¾ß£¬ÊÐÃæ»¹Óкܶà±ðµÄ¡£×ܵÄÀ´£¬ÎÒ¾õµÃ¶¼¿ÉÒÔÓÃÒÔÉÏ˼·ȥѧϰ¡£»Øµ½ÎÒÃÇ×ʼµÄÎÊÌ⣺Puppet£¬Chef£¬AnsibleµÄ¹²ÐÔÊÇʲô£¿
ÎÒÄܲ»ÄÜ˵ÄÇËĸöÎÊÌâ¾ÍÊÇËüÃǵĹ²ÐÔ£¬´ð°¸ÊÇÎÒÒ²²»ÖªµÀ¡£ |