Bu yazıda mCollective ismi verilen yönetim aracının kurulumu ve Puppet ile kullanımı ele alınacaktır. Puppet kurulumu, kullanımı, merkezi istemci yönetimi konularında daha önce yayınlanan 4 yazıya buradan erişebilirsiniz.
Daha önce yayınlanan “Puppet Merkezi İstemci Yönetimi” isimli yazıda mCollective’den bahsedilmiş ancak kurulumu ve kullanım detayları bu yazıya bırakılmıştır.
İçindekiler
mCollective Kurulumu ve Kullanımı
Marionette Collective olarak bilinen bu araç sunucu orkestrasyonu ve paralel iş çalıştırma amaçlı kullanılmaktadır. Kümeler halindeki sunucular üzerinde sistematik bir şekilde iş çalıştırmayı sağlamaktadır. İyi derecede ölçeklenebilir bir yapıya ve oldukça hızlı paralel iş çalıştırma yeteneğine sahiptir.
“mCollective” terminolojisinde kavramlar Puppet’a göre biraz daha farklıdır. Örneğin Puppet’ta agent’ların çalıştığı istemciler, mCollective için spesifik bir işi yapan “sunucu” olarak geçmekte ve bu sunucular bir “client” vasıtasıyla yönetilmektedir. Bu örnekte mCollective istemcisi puppet-master sunucusu, mCollective sunucuları da Puppet istemcileri olarak belirlenmiştir. Bununla birlikte bahsi geçen client ile server’ların iletişimini sağlayan ve bir mesajlaşma ortamı sağlayan orta katman yazılımı mevcuttur.
Mcollective kurulumunda Puppet kullanmak akıllıca olacaktır. Her istemci için ayrı ayrı değişiklik yapmak yerine mevcut Puppet altyapısı ile dağıtım yapmak pratik ve hızlı bir çözüm sunmaktadır.
Gereksinimler
Kurulumdan önce aşağıdaki isterlerin belirlenmesi gerekmektedir.
- Dokümanın devamında referans verilen $certdir ve $privatekeydir dizinleri puppet ile kullanılanların aynısıdır. Puppet ile kullanılan dizinler aşağıdaki komut ile alınabilir.
1 2 3 4 5 6 7 |
ubuntu@puppet-client:~$ sudo puppet agent --configprint certdir,privatekeydir certdir = /var/lib/puppet/ssl/certs privatekeydir = /var/lib/puppet/ssl/private_keys ubuntu@puppet-master:~$ sudo puppet master --configprint certdir,privatekeydir certdir = /var/lib/puppet/ssl/certs privatekeydir = /var/lib/puppet/ssl/private_keys |
- Orta katmanda kullanılacak olan ActiveMQ ile kullanmak üzere bir kullanıcı ismi (mCollective) ve bir şifre (bu örnekte mc_pass) belirlenmelidir.
- Sertifika Otoritesi: Puppet ile kullanılan sertifika otoritesi (puppet-master) kullanılacaktır. Her sunucuda $certdir/ca.pem altında bir kopyası bulunur.
- ActiveMQ Sertifikası: ActiveMQ için varolan puppet agent sertifikaları kullanılacaktır. Bahsedilen sertika $certdir/{istemci_adı}.pem ve özel anahtar $privatekeydir/{istemci_adı}.pem lokasyonunda bulunmalıdır.
- Paylaşılan Sunucu Anahtarları: Bu anahtar oluşturulmalıdır. Puppet-master sunucusunda “sudo puppet cert generate mCollective-servers” komutu ile oluşturulmalıdır. Komutun çıktısı aşağıdaki gibi olmalıdır.
1 2 3 4 |
Notice: mCollective-servers has a waiting certificate request Notice: Signed certificate request for mCollective-servers Notice: Removing file Puppet::SSL::CertificateRequest mCollective-servers at '/var/lib/puppet/ssl/ca/requests/mCollective-servers.pem' Notice: Removing file Puppet::SSL::CertificateRequest mCollective-servers at '/var/lib/puppet/ssl/certificate_requests/mCollective-servers.pem' |
İlgili sertifika ve özel anahtar $certdir/mCollective-servers.pem ve $privatekeydir/mCollective-servers.pem lokasyonunda bulunacaktır.
- Sunucu Sertifikaları: Burada bahsi geçen sunucular Puppet’taki istemcilerdir. Her sunucuda zaten mevcut olan puppet agent sertifika ve özel anahtarı kullanılacaktır.
- İstemci Sertifikaları: İstemciler mCollective direktiflerini sunuculara iletecek olan bileşenlerdir. Bu aşamada Puppet sırasında kullanılan aynı kullanıcı ile puppet-master sunucusunda sertifika üretilmelidir. Komutun çıktısı aşağıdaki gibi olmalıdır.
1 2 3 4 5 |
ubuntu@puppet-master:~$ sudo puppet cert generate mCollective-client Notice: mCollective-client has a waiting certificate request Notice: Signed certificate request for mCollective-client Notice: Removing file Puppet::SSL::CertificateRequest mCollective-client at '/var/lib/puppet/ssl/ca/requests/mCollective-client.pem' Notice: Removing file Puppet::SSL::CertificateRequest mCollective-client at '/var/lib/puppet/ssl/certificate_requests/mCollective-client.pem' |
Üretilen sertifika ve özel anahtar $certdir/mCollective-client.pem ve $privatekeydir/mCollective-client.pem lokasyonunda bulunacaktır.
Orta Katman Kurulumu ve Yapılandırılması
Kurulum yapılacak sunucu üzerinde öncelikle orta katman için seçilen ActiveMQ kurulmalıdır. Bu örnekte orta katman yazılımı puppet-master sunucusuna kurulmuştur. Öncelikle ön gereksinim olan java runtime environment kurulmalıdır.
1 |
sudo apt-get install openjdk-7-jre |
Daha sonra Apache ActiveMQ sayfasından son kararlı sürüm indirilerek açılmalı ve /opt klasörü altına taşınmalıdır.
1 2 3 4 5 |
cd /tmp wget -c http://www.apache.org/dyn/closer.cgi?path=/activemq/5.12.1/apache-activemq-5.12.1-bin.tar.gz tar -zxvf apache-activemq-5.12.1-bin.tar.gz sudo mv apache-activemq-5.12.1 /opt/ sudo chown -R activemq:activemq /opt/apache-activemq-5.12.1/ |
Ardından activemq.xml dosyası bulunarak bu dosya örnek dosya ile değiştirilmelidir.
1 2 3 4 5 6 |
sudo updatedb sudo locate activemq.xml sudo mv /opt/apache-activemq-5.12.1/conf/activemq.xml /opt/apache-activemq-5.12.1/conf/activemq.xml.orig sudo wget https://raw.githubusercontent.com/puppetlabs/marionette-collective/master/ext/activemq/examples/single-broker/activemq.xml sudo mv activemq.xml /opt/apache-activemq-5.12.1/conf/activemq.xml sudo chown activemq:activemq /opt/apache-activemq-5.12.1/conf/activemq.xml |
admin ve mCollective kullanıcıları için şifreler değiştirilmelidir.
1 2 3 4 5 6 7 8 9 10 11 12 |
vi /opt/apache-activemq-5.12.1/conf/activemq.xml ... <plugins> <simpleAuthenticationPlugin> <users> <authenticationUser username="mCollective" password="mc_pass" groups="mCollective,everyone"/> <authenticationUser username="admin" password="adm_pass" groups="mCollective,admins,everyone"/> </users> </simpleAuthenticationPlugin> <!-- ... authorization goes below... --> </plugins> … |
Daha sonra stomp transport connector’daki port ve protokol aşağıdaki gibi değiştirilmelidir.
1 |
stomp+nio+ssl://0.0.0.0:61614?needClientAuth=true&transport.enabledProtocols=TLSv1,TLSv1.1,TLSv1.2 |
Sıradaki işlem “keystore guide” dokümanında anlatıldığı gibi sertifika ve anahtarları bir araya getirme işlemidir. Bunun için yeni bir dizin açılarak gerekli sertifika ve anahtarlar burada toplanır.
1 2 3 4 5 6 |
cd ~ mkdir mc_certs cd mc_certs sudo cp /var/lib/puppet/ssl/certs/ca.pem . sudo cp /var/lib/puppet/ssl/certs/puppet-master.vm1.huseyincotuk.com.pem . sudo cp /var/lib/puppet/ssl/private_keys/puppet-master.vm1.huseyincotuk.com.pem puppet-master.vm1.huseyincotuk.com.key |
Sonra “truststore” ve “keystore” oluşturulmalıdır. Her ikisi için aynı şifre kullanılacak, daha sonra bu şifreye activemq.xml dosyasında ihtiyaç duyulacaktır. Truststore hangi sertifikaların ActiveMQ’ya bağlanacağını tanımlamaktadır. Eğer truststore içerisine bir CA sertifikası import edilirse bu CA tarafından imzalanmış her sertifika bağlantı yapma hakkına sahip olacaktır. Her sertifika ayrı ayrı yüklenebileceği gibi burada CA sertifikası yüklenerek imzalı sertifikalara izin verilecektir.
1 |
sudo keytool -import -alias "Huseyin CA" -file ca.pem -keystore truststore.jks |
Ekrana gelen bölüme şifre yazılarak doğrulandıktan sonra son olarak sertifikaya güvenilsin mi sorusuna “yes” cevabını vererek işlem tamamlanmalıdır. Böylece turstore kullanıma hazır hale gelecektir. Ardından ActiveMQ broker’a ait sertifika ve özel anahtarı tutan keystore oluşturulmalıdır. Aşağıdaki komutlar ile özel anahtar ve sertifika bir dosyada birleştirilerek gerekli keystore oluşturulmalıdır.
1 2 3 |
sudo cat puppet-master.vm1.huseyincotuk.com.key puppet-master.vm1.huseyincotuk.com.pem > temp.pem sudo openssl pkcs12 -export -in temp.pem -out activemq.p12 -name activemq.vm1.huseyincotuk.com sudo keytool -importkeystore -destkeystore keystore.jks -srckeystore activemq.p12 -srcstoretype PKCS12 -alias activemq.vm1.huseyincotuk.com |
Aynı şifre kullanılarak doğrulandıktan sonra bulundugunuz dizinde keystore.jks ve truststore.jks dosyaları bulunmalıdır.
1 2 3 4 |
ubuntu@puppet-master:~/mc_certs$ ls activemq.p12 puppet-master.vm1.huseyincotuk.com.key truststore.jks ca.pem puppet-master.vm1.huseyincotuk.com.pem keystore.jks temp.pem |
Ardından ActiveMQ konfigürasyon dizinine geçilerek oluşturulan keystore ve truststore dosyaları buraya taşınmalı ve sadece activemq kullanıcısı tarafından okunabildigine emin olunmalıdır.
1 2 3 4 5 6 7 |
cd /opt/apache-activemq-5.12.1/conf/ sudo mv ~/mc_certs/keystore.jks . sudo mv ~/mc_certs/truststore.jks . sudo chown activemq:activemq keystore.jks sudo chown activemq:activemq truststore.jks sudo chmod 600 keystore.jks sudo chmod 600 truststore.jks |
activemq.xml dosyası içerisinde ssl contextinde bu dosyalar şifreleri ile birlikte belirtilmelidir. XML validation bug’ı nedeniyle bu listenin alfabetik sırayla yazılması önemlidir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
sudo vi /opt/apache-activemq-5.12.1/conf/activemq.xml <beans ...> … <broker ...> <sslContext> <sslContext keyStore="keystore.jks" keyStorePassword="belirlenen_sifre" trustStore="truststore.jks" trustStorePassword="belirlenen_sifre" /> </sslContext> ... </broker> ... </beans> sudo cp activemq /etc/init.d/ sudo update-rc.d activemq defaults |
Son olarak activemq yeniden başlatılmalıdır.
1 |
sudo service activemq restart |
mCollective Kurulumu
Bu adımda mCollective paketi tüm puppet istemcilerine yüklenecek ve çalıştırılacaktır. Puppet-master sunucusuna ise mCollective-client kurulacaktır. Ancak öncelikle Debian ve Ubuntu’da mCollective paketi için gerekli ruby-stomp paketi hem istemcilere, hem de master sunucuya kurulmalıdır.
1 |
sudo apt-get install ruby-stomp |
Ardından master sunucuda mCollective-client, tüm istemcilerde mCollective kurulmalıdır.
1 2 3 |
ubuntu@puppet-master:~$ sudo apt-get install mCollective-client ubuntu@puppet-client:~$ sudo apt-get install mCollective |
İstemcilerin Yapılandırılması
Daha önce Puppet ile oluşturulan sertifikaların kullanılacağı belirtilmiş, tüm istemcilerde kullanmak üzere master sunucuda oluşturulan mCollective-servers isimli sertifika ve özel anahtar her istemcide ilgili dizinlere kopyalanmıştır.
1 2 |
sudo mv mCollective-servers.pem /var/lib/puppet/ssl/certs/ sudo mv mCollective-servers.key /var/lib/puppet/ssl/private_keys/ |
mCollective içerisinde istemci olarak kullanılacak her sunucu için (bu örnekte puppet-master) daha önce oluşturulan client sertifikası ilgili dizine kopyalanmalıdır.
1 2 |
sudo mkdir /etc/mCollective/clients sudo mv mCollective-client.pem /etc/mCollective/clients/ |
Ardından her istemcide “fact” dosyası oluşturulmalıdır. Bu dosyanın her istemcide oluşturulması için aşağıda yer alan kod parçasına sahip bir kaynağın her istemci için “include” edilmesi gerekmektedir.
1 2 3 4 5 6 7 |
file{"/etc/mCollective/facts.yaml": owner => root, group => root, mode => 400, loglevel => debug, # reduce noise in Puppet reports content => inline_template("<%= scope.to_hash.reject { |k,v| k.to_s =~ /(uptime_seconds|timestamp|free)/ }.to_yaml %>"), # exclude rapidly changing facts } |
Bunun için önce mc-fact isimli bir modül oluşturulmalıdır.
1 2 |
/etc/puppet/modules sudo puppet module generate mcfacts |
Ardından ilgili modülün içerisine yukarıdaki kod eklenmelidir.
1 2 3 4 5 6 7 8 9 10 11 |
sudo vi /etc/puppet/modules/mcfacts/manifests/init.pp class mcfacts { file{"/etc/mCollective/facts.yaml": owner => root, group => root, mode => 400, loglevel => debug, # reduce noise in Puppet reports content => inline_template("<%= scope.to_hash.reject { |k,v| k.to_s =~ /(uptime_seconds|timestamp|free)/ }.to_yaml %>"), # exclude rapidly changing facts } } |
Bu modülün her istemcide kullanılması için main manifest dosyası site.pp içerisinde aşağıdaki satır eklenmelidir.
1 2 3 4 |
sudo vi /etc/puppet/manifests/site.pp ... include mcfacts ... |
Ardından herhangi bir istemcide modülün ve ilgili sınıfın çalıştığı kontrol edilir.
1 2 3 4 5 6 7 8 9 10 11 |
ubuntu@puppet-client:~$ sudo puppet agent --test Notice: Ignoring --listen on onetime run Info: Retrieving pluginfacts Info: Retrieving plugin Info: Loading facts Info: Caching catalog for puppet-client.vm1.huseyincotuk.com Info: Applying configuration version '1452247234' Info: Computing checksum on file /etc/mCollective/facts.yaml Info: /Stage[main]/Mcfacts/File[/etc/mCollective/facts.yaml]: Filebucketed /etc/mCollective/facts.yaml to puppet with sum 385b230b5b4b558f86657dbafe1b5a17 Notice: Finished catalog run in 1.77 seconds |
Aynı modül içerisinde tüm istemcilerde server.cfg dosyasının sunucuya spesifik şekilde oluşturulması için yine Puppet kullanılacaktır. Öncelikle baz alınacak template dosyası aşağıdaki içerik ile templates dizini altında oluşturulmalıdır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
sudo mkdir /etc/puppet/modules/mcfacts/templates sudo vi /etc/puppet/modules/mcfacts/templates/server.cfg.erb <% ssldir = '/var/lib/puppet/ssl' %> <% @activemq_server = 'activemq.vm1.huseyincotuk.com' %> <% @activemq_mCollective_password = 'mc_pass' %> # /etc/mCollective/server.cfg # ActiveMQ connector settings: connector = activemq direct_addressing = 1 plugin.activemq.pool.size = 1 plugin.activemq.pool.1.host = <%= @activemq_server %> plugin.activemq.pool.1.port = 61614 plugin.activemq.pool.1.user = mCollective plugin.activemq.pool.1.password = <%= @activemq_mCollective_password %> plugin.activemq.pool.1.ssl = 1 plugin.activemq.pool.1.ssl.ca = <%= ssldir %>/certs/ca.pem plugin.activemq.pool.1.ssl.cert = <%= ssldir %>/certs/<%= scope.lookupvar('::clientcert') %>.pem plugin.activemq.pool.1.ssl.key = <%= ssldir %>/private_keys/<%= scope.lookupvar('::clientcert') %>.pem plugin.activemq.pool.1.ssl.fallback = 0 # SSL security plugin settings: securityprovider = ssl plugin.ssl_client_cert_dir = /etc/mCollective/clients plugin.ssl_server_private = <%= ssldir %>/private_keys/mCollective-servers.key plugin.ssl_server_public = <%= ssldir %>/certs/mCollective-servers.pem # Facts, identity, and classes: identity = <%= scope.lookupvar('::fqdn') %> factsource = yaml plugin.yaml = /etc/mCollective/facts.yaml classesfile = /var/lib/puppet/state/classes.txt # No additional subcollectives: collectives = mCollective main_collective = mCollective # Registration: # We don't configure a listener, and only send these messages to keep the # Stomp connection alive. This will use the default "agentlist" registration # plugin. registerinterval = 600 # Auditing (optional): # If you turn this on, you must arrange to rotate the log file it creates. rpcaudit = 1 rpcauditprovider = logfile plugin.rpcaudit.logfile = /var/log/mCollective-audit.log # Authorization: # If you turn this on now, you won't be able to issue most MCollective # commands, although `mco ping` will work. You should deploy the # ActionPolicy plugin before uncommenting this; see "Deploy Plugins" below. # Logging: logger_type = file loglevel = info logfile = /var/log/mCollective.log keeplogs = 5 max_log_size = 2097152 logfacility = user # Platform defaults: # These settings differ based on platform; the default config file created by # the package should include correct values. If you are managing settings as # resources, you can ignore them, but with a template you'll have to account # for the differences. <% if scope.lookupvar('::osfamily') == 'RedHat' -%> libdir = /usr/libexec/mCollective daemonize = 1 <% elsif scope.lookupvar('::osfamily') == 'Debian' -%> libdir = /usr/share/mCollective/plugins daemonize = 1 <% else -%> # INSERT PLATFORM-APPROPRIATE VALUES FOR LIBDIR AND DAEMONIZE <% end %> |
Bu template dosyasını baz alarak ilgili dosyayı istemcilerde oluşturacak ve ardından mcollect yazılımını yeniden başlatacak kod aynı sınıf içerisine eklenmelidir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
sudo vi /etc/puppet/modules/mcfacts/manifests/init.pp class mcfacts { file{"/etc/mCollective/facts.yaml": owner => root, group => root, mode => 400, loglevel => debug, # reduce noise in Puppet reports content => inline_template("<%= scope.to_hash.reject { |k,v| k.to_s =~ /(uptime_seconds|timestamp|free)/ }.to_yaml %>"), # exclude rapidly changing facts } file { "server.cfg": require => File["/etc/mCollective/facts.yaml"], path => '/etc/mCollective/server.cfg', ensure => file, owner => "root", group => "root", mode => 0640, content => template('mcfacts/server.cfg.erb'), } exec { "mCollective_start_service": require => File["server.cfg"], path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", command => "service mCollective restart" } |
Son olarak istemci sunucularda “puppet agent –test” komutu çalıştırılarak dosyanın oluşturulması ve servisin yeniden başlatılması sağlanmalıdır. Buna göre çıktı aşağıdaki gibi olmalıdır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
ubuntu@ns2:~$ sudo puppet agent --test Notice: Ignoring --listen on onetime run Info: Retrieving pluginfacts Info: Retrieving plugin Info: Loading facts Info: Caching catalog for ns2.vm1.huseyincotuk.com Info: Applying configuration version '1452259788' Notice: /Stage[main]/Mcfacts/File[server.cfg]/content: --- /etc/mCollective/server.cfg 2015-08-21 20:12:02.000000000 +0300 +++ /tmp/puppet-file20160108-27931-10yt6jl 2016-01-08 15:35:09.245537000 +0200 @@ -1,22 +1,72 @@ -main_collective = mCollective -collectives = mCollective -libdir = /usr/share/mCollective/plugins -logfile = /var/log/mCollective.log -loglevel = info -daemonize = 1 - -# Plugins -securityprovider = psk -plugin.psk = unset - -connector = activemq -plugin.activemq.pool.size = 1 -plugin.activemq.pool.1.host = stomp1 -plugin.activemq.pool.1.port = 6163 -plugin.activemq.pool.1.user = mCollective -plugin.activemq.pool.1.password = marionette - -# Facts -factsource = yaml -plugin.yaml = /etc/mCollective/facts.yaml + + + + # /etc/mCollective/server.cfg + # ActiveMQ connector settings: + connector = activemq + direct_addressing = 1 + plugin.activemq.pool.size = 1 + plugin.activemq.pool.1.host = activemq.vm1.huseyincotuk.com + plugin.activemq.pool.1.port = 61614 + plugin.activemq.pool.1.user = mCollective + plugin.activemq.pool.1.password = mc_pass + plugin.activemq.pool.1.ssl = 1 + plugin.activemq.pool.1.ssl.ca = /var/lib/puppet/ssl/certs/ca.pem + plugin.activemq.pool.1.ssl.cert = /var/lib/puppet/ssl/certs/ns2.vm1.huseyincotuk.com.pem + plugin.activemq.pool.1.ssl.key = /var/lib/puppet/ssl/private_keys/ns2.vm1.huseyincotuk.com.pem + plugin.activemq.pool.1.ssl.fallback = 0 + + # SSL security plugin settings: + securityprovider = ssl + plugin.ssl_client_cert_dir = /etc/mCollective/clients + plugin.ssl_server_private = /var/lib/puppet/ssl/private_keys/mCollective-servers.key + plugin.ssl_server_public = /var/lib/puppet/ssl/certs/mCollective-servers.pem + + # Facts, identity, and classes: + identity = ns2.vm1.huseyincotuk.com + factsource = yaml + plugin.yaml = /etc/mCollective/facts.yaml + classesfile = /var/lib/puppet/state/classes.txt + + # No additional subcollectives: + collectives = mCollective + main_collective = mCollective + + # Registration: + # We don't configure a listener, and only send these messages to keep the + # Stomp connection alive. This will use the default "agentlist" registration + # plugin. + registerinterval = 600 + + # Auditing (optional): + # If you turn this on, you must arrange to rotate the log file it creates. + rpcaudit = 1 + rpcauditprovider = logfile + plugin.rpcaudit.logfile = /var/log/mCollective-audit.log + + # Authorization: + # If you turn this on now, you won't be able to issue most MCollective + # commands, although `mco ping` will work. You should deploy the + # ActionPolicy plugin before uncommenting this; see "Deploy Plugins" below. + + # rpcauthorization = 1 + # rpcauthprovider = action_policy + # plugin.actionpolicy.allow_unconfigured = 1 + + # Logging: + logger_type = file + loglevel = info + logfile = /var/log/mCollective.log + keeplogs = 5 + max_log_size = 2097152 + logfacility = user + + # Platform defaults: + # These settings differ based on platform; the default config file created by + # the package should include correct values. If you are managing settings as + # resources, you can ignore them, but with a template you'll have to account + # for the differences. + libdir = /usr/share/mCollective/plugins + daemonize = 1 + Info: Computing checksum on file /etc/mCollective/server.cfg Info: /Stage[main]/Mcfacts/File[server.cfg]: Filebucketed /etc/mCollective/server.cfg to puppet with sum fa9e329fc3617875d5187b7733f179b3 Notice: /Stage[main]/Mcfacts/File[server.cfg]/content: content changed '{md5}fa9e329fc3617875d5187b7733f179b3' to '{md5}d82a73be2809418cd826a97e637a8ae6' Info: Computing checksum on file /etc/mCollective/facts.yaml Info: /Stage[main]/Mcfacts/File[/etc/mCollective/facts.yaml]: Filebucketed /etc/mCollective/facts.yaml to puppet with sum 256ded6d17d9493a916175248c0e6357 Notice: Finished catalog run in 0.20 seconds |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
ubuntu@ns2:~$ sudo puppet agent --test Notice: Ignoring --listen on onetime run Info: Retrieving pluginfacts Info: Retrieving plugin Info: Loading facts Info: Caching catalog for ns2.vm1.huseyincotuk.com Info: Applying configuration version '1452261118' Info: Computing checksum on file /etc/mCollective/facts.yaml Info: /Stage[main]/Mcfacts/File[/etc/mCollective/facts.yaml]: Filebucketed /etc/mCollective/facts.yaml to puppet with sum 94f6c7cb4da84a78e33f4d6d7bf3b8fd Notice: /Stage[main]/Mcfacts/File[server.cfg]/content: --- /etc/mCollective/server.cfg 2016-01-08 15:35:09.333537000 +0200 +++ /tmp/puppet-file20160108-28343-1oh6kro 2016-01-08 15:52:19.593537000 +0200 @@ -50,10 +50,6 @@ # commands, although `mco ping` will work. You should deploy the # ActionPolicy plugin before uncommenting this; see "Deploy Plugins" below. - # rpcauthorization = 1 - # rpcauthprovider = action_policy - # plugin.actionpolicy.allow_unconfigured = 1 - # Logging: logger_type = file loglevel = info Info: Computing checksum on file /etc/mCollective/server.cfg Info: /Stage[main]/Mcfacts/File[server.cfg]: Filebucketed /etc/mCollective/server.cfg to puppet with sum d82a73be2809418cd826a97e637a8ae6 Notice: /Stage[main]/Mcfacts/File[server.cfg]/content: content changed '{md5}d82a73be2809418cd826a97e637a8ae6' to '{md5}7193d64695a64a5e7d7ccc688a0ef6d6' Notice: /Stage[main]/Mcfacts/Exec[mCollective_start_service]/returns: executed successfully Notice: Finished catalog run in 2.54 seconds |
Master Sunucunun Yapılandırılması
Puppet ile yapılandırılan istemcilerin aksine puppet-master sunucusu manuel olarak yapılandırılacaktır. Yönetici yetkisine sahip her kullanıcı, kendisine ait kimlik bilgileri için için talepte bulunmalı, edinmeli ve gerekli lokasyonda bulundurmalıdır. client.cfg dosyasını düzenleyerek işlem tamamlanmalıdır.
İlk yönetici yetkisine sahip kullanıcı için daha önceki adımlarda oluşturulan client.pem sertifikası kullanılacaktır. Öncelikle kullanıcı ev dizininde .mCollective.d dizini ve altında credentials dizini açılarak kullanılacak sertifikalar buraya kopyalanır. Ardından Puppet ile kullanabilmek için sertifikaların bulunması sağlanır.
1 2 3 4 5 6 7 8 9 10 11 |
mkdir -p ~/.mCollective.d/credentials sudo cp /var/lib/puppet/ssl/certs/mCollective-client.pem ~/.mCollective.d/credentials/certs/ sudo cp /var/lib/puppet/ssl/certs/mCollective-servers.pem ~/.mCollective.d/credentials/certs/ sudo cp /var/lib/puppet/ssl/certs/ca.pem ~/.mCollective.d/credentials/certs/ sudo cp /var/lib/puppet/ssl/certs/puppet-master.vm1.huseyincotuk.com.pem ~/.mCollective.d/credentials/certs/ sudo cp /var/lib/puppet/ssl/private_keys/puppet-master.vm1.huseyincotuk.com.pem ~/.mCollective.d/credentials/private_keys/ sudo cp /var/lib/puppet/ssl/private_keys/mCollective-client.pem ~/.mCollective.d/credentials/private_keys/ sudo puppet certificate find mCollective-client.pem --ssldir ~/.mCollective.d/credentials/certs --ca-location local sudo puppet certificate find mCollective-servers.pem --ssldir ~/.mCollective.d/credentials/certs --ca-location local sudo puppet certificate find ca.pem --ssldir ~/.mCollective.d/credentials/certs --ca-location local sudo chown -R ubuntu:ubuntu ~/.mCollective.d/credentials/private_keys/ |
Son olarak client.cfg dosyası .mCollective dizinine kopyalanarak aşağıdaki gibi düzenlenmelidir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
sudo cp /etc/mCollective/client.cfg .mCollective sudo vi .mCollective main_collective = mCollective collectives = mCollective libdir = /usr/share/mCollective/plugins logger_type = console loglevel = warn # Plugins securityprovider = psk plugin.psk = unset connector = activemq plugin.activemq.pool.size = 1 plugin.activemq.pool.1.host = activemq.vm1.huseyincotuk.com plugin.activemq.pool.1.port = 61614 plugin.activemq.pool.1.user = mCollective plugin.activemq.pool.1.password = mc_pass plugin.activemq.pool.1.ssl = 1 plugin.activemq.pool.1.ssl.ca = /home/ubuntu/.mCollective.d/credentials/certs/ca.pem plugin.activemq.pool.1.ssl.cert = /home/ubuntu/.mCollective.d/credentials/certs/puppet-master.vm1.huseyincotuk.com.pem plugin.activemq.pool.1.ssl.key = /home/ubuntu/.mCollective.d/credentials/private_keys/puppet-master.vm1.huseyincotuk.com.pem plugin.activemq.pool.1.ssl.fallback = 0 # SSL security plugin settings: securityprovider = ssl plugin.ssl_server_public = /home/ubuntu/.mCollective.d/credentials/certs/mCollective-servers.pem plugin.ssl_client_private = /home/ubuntu/.mCollective.d/credentials/private_keys/mCollective-client.pem plugin.ssl_client_public = /home/ubuntu/.mCollective.d/credentials/certs/mCollective-client.pem # Interface settings: default_discovery_method = mc direct_addressing_threshold = 10 ttl = 60 color = 1 rpclimitmethod = first # No additional subcollectives: collectives = mCollective main_collective = mCollective # Platform defaults: # These settings differ based on platform; the default config file created # by the package should include correct values or omit the setting if the # default value is fine. libdir = /usr/libexec/mCollective helptemplatedir = /etc/mCollective # Logging: logger_type = console loglevel = warn # Facts factsource = yaml plugin.yaml = /etc/mCollective/facts.yaml |
mCollective Kullanımı
Böylece mCollective kurulumu tamamlanmış olacaktır. puppet-master sunucusu üzerinden “mco” komutu denenebilir.
1 2 3 4 5 6 7 |
ubuntu@puppet-master:~$ mco ping ns1.vm1.huseyincotuk.com time=87.42 ms puppet-client.vm1.huseyincotuk.com time=125.92 ms ns2.vm1.huseyincotuk.com time=127.61 ms ---- ping statistics ---- 3 replies max: 127.61 min: 87.42 avg: 113.65 |
Herhangi bir istemcideki envanteri almak için aşağıdaki komut kullanılabilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
ubuntu@puppet-master:~$ mco inventory puppet-client.vm1.huseyincotuk.com Inventory for puppet-client.vm1.huseyincotuk.com: Server Statistics: Version: 2.8.4 Start Time: 2016-01-11 13:52:04 +0200 Config File: /etc/mCollective/server.cfg Collectives: mCollective Main Collective: mCollective Process ID: 9952 Total Messages: 5 Messages Passed Filters: 5 Messages Filtered: 0 Expired Messages: 0 Replies Sent: 4 Total Processor Time: 0.32 seconds System Time: 0.1 seconds Agents: discovery rpcutil Data Plugins: agent collective fact fstat Configuration Management Classes: apache apache::default_confd_files apache::default_mods apache::mod::alias apache::mod::authn_core apache::mod::authn_file apache::mod::authz_user apache::mod::autoindex apache::mod::cgid apache::mod::dav apache::mod::dav_fs apache::mod::deflate apache::mod::dir apache::mod::filter apache::mod::mime apache::mod::negotiation apache::mod::reqtimeout apache::mod::setenvif apache::mod::worker apache::params apache::service apache::version concat::setup mcfacts puppet-client settings Facts: architecture => amd64 augeasversion => 1.2.0 bios_release_date => 04/01/2014 bios_vendor => SeaBIOS bios_version => 1.7.5-20150310_111955-batsu blockdevice_vda_size => 107374182400 blockdevice_vda_vendor => 0x1af4 blockdevices => vda caller_module_name => clientcert => puppet-client.vm1.huseyincotuk.com clientnoop => false clientversion => 3.8.4 concat_basedir => /var/lib/puppet/concat domain => vm1.huseyincotuk.com environment => production facterversion => 2.4.4 filesystems => ext2,ext3,ext4,vfat fqdn => puppet-client.vm1.huseyincotuk.com gid => root hardwareisa => x86_64 hardwaremodel => x86_64 hostname => puppet-client id => root interfaces => eth0,lo ipaddress => 10.61.2.117 ipaddress_eth0 => 10.61.2.117 ipaddress_lo => 127.0.0.1 is_pe => false is_virtual => true kernel => Linux kernelmajversion => 3.13 kernelrelease => 3.13.0-29-generic kernelversion => 3.13.0 lsbdistcodename => trusty lsbdistdescription => Ubuntu 14.04.3 LTS lsbdistid => Ubuntu lsbdistrelease => 14.04 lsbmajdistrelease => 14.04 macaddress => fa:16:3e:fd:62:e4 macaddress_eth0 => fa:16:3e:fd:62:e4 manufacturer => OpenStack Foundation memorysize => 3.86 GB memorysize_mb => 3953.32 module_name => mcfacts mtu_eth0 => 1500 mtu_lo => 65536 name => mcfacts netmask => 255.255.255.0 netmask_eth0 => 255.255.255.0 netmask_lo => 255.0.0.0 network_eth0 => 10.61.2.0 network_lo => 127.0.0.0 operatingsystem => Ubuntu operatingsystemmajrelease => 14.04 operatingsystemrelease => 14.04 os => {"name"=>"Ubuntu", "family"=>"Debian", "release"=>{"major"=>"14.04", "full"=>"14.04"}, "lsb"=>{"distcodename"=>"trusty", "distid"=>"Ubuntu", "distdescription"=>"Ubuntu 14.04.3 LTS", "distrelease"=>"14.04", "majdistrelease"=>"14.04"}} osfamily => Debian package_provider => apt partitions => {"vda1"=>{"uuid"=>"b8e63ae8-3db1-4afe-b24b-2f564471b377", "size"=>"192937984", "mount"=>"/", "filesystem"=>"ext4"}, "vda2"=>{"size"=>"2"}, "vda5"=>{"uuid"=>"6899e765-6d43-4183-9118-0d0c80752299", "size"=>"16771072", "filesystem"=>"swap"}} path => /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin physicalprocessorcount => 2 processor0 => AMD Opteron 23xx (Gen 3 Class Opteron) processor1 => AMD Opteron 23xx (Gen 3 Class Opteron) processorcount => 2 processors => {"models"=>["AMD Opteron 23xx (Gen 3 Class Opteron)", "AMD Opteron 23xx (Gen 3 Class Opteron)"], "count"=>2, "physicalcount"=>2} productname => OpenStack Nova ps => ps -ef puppet_vardir => /var/lib/puppet puppetversion => 3.8.4 root_home => /root rubyplatform => x86_64-linux rubysitedir => /usr/local/lib/site_ruby/1.9.1 rubyversion => 1.9.3 selinux => false serialnumber => 44454c4c-3700-104b-8053-b9c04f58344a serverip => 10.61.2.116 servername => puppet-master.openstacklocal serverversion => 3.8.4 service_provider => upstart sshdsakey => AAAAB3..m/J sshecdsakey => AAAA..Y= sshed25519key => AAAA..l6 sshfp_dsa => SSHFP 2 1 11..d0 SSHFP 2 2 8b..13 sshfp_ecdsa => SSHFP 3 1 d3..08 SSHFP 3 2 b5..11 sshfp_ed25519 => SSHFP 4 1 5e..f5 SSHFP 4 2 b5..04 sshfp_rsa => SSHFP 1 1 62..64 SSHFP 1 2 7c..8b sshrsakey => AAAA..etd swapsize => 8.00 GB swapsize_mb => 8189.00 system_uptime => {"seconds"=>1201625, "hours"=>333, "days"=>13, "uptime"=>"13 days"} timezone => EET title => mcfacts type => Other uniqueid => 3d0a7502 uptime => 13 days uptime_days => 13 uptime_hours => 333 uuid => D3E88230-F7E0-4EE9-AA07-F0E0242505EC virtual => kvm |
mCollective Plugin Yükleme
mCollective’in envanter toplama dışında özelliklerinin kullanılabilmesi için sunucu ve istemcilere plugin yüklenmesi gerekmektedir. Ayrı kendi altyapınızda amaca özel işleriniz için kendi plugin’lerinizi yazmanız da mümkündür.
Agent Plugin’lerin Kurulumu
mCollective tarafından yapılan önemli işlerin büyük bir bölümü agent plugin’ler tarafından yapılmaktadır. puppet-master sunucusuna ve varsa diğer yönetim sunucularına DDL dosyaları yüklenmelidir. Rutin işlerin yapıldığı sunuculara (puppet kurulumundaki istemciler) ise agent ile ilgili tüm bileşenler yüklenmelidir.
mCollective tarafında kullanılabilecek agent’ların listesine resmi sayfadan ulaşılabilmektedir. Tüm kurulumlar için azından puppet, service ve package agent’ları en çok tercih edilenler arasında yer almaktadır. Ayrıca kendi amaçlarınız doğrultusunda kendinize ait agent yazmanız da mümkündür. Detaylara buradan erişebilirsiniz.
Agent plugin’lerin en kolay kurulumu paket yöneticileri vasıtasıyla mümkün olmaktadır. Alternatif olarak cfg dosyalarında belirtilen libdir dizinine gerekli dosyaları kopyalayarak da kurulum yapılabilmektedir.
Örneğin Puppet, package ve service agent’larının kurulumu için puppet-master sunucusunda aşağıdaki paketlerin yüklenmesi gerekmektedir.
1 |
sudo apt-get install mCollective-puppet-client mCollective-package-client mCollective-service-client mCollective-puppet-common mCollective-package-common mCollective-service-common |
İstemcilerin her birisinde ise aşağıdaki paketler kurulmalıdır.
1 2 |
sudo apt-get install mCollective-puppet-agent mCollective-package-agent mCollective-service-agent mCollective-puppet-common mCollective-package-common mCollective-service-common sudo service mCollective restart |
Ardından örneğin service plugin’i test etmek için aşağıdaki komut çalıştırılabilir.
1 2 3 4 5 6 7 8 9 10 11 12 |
ubuntu@puppet-master:~$ mco rpc service status service=ssh Discovering hosts using the mc method for 2 second(s) .... 3 * [ ============================================================> ] 3 / 3 puppet-client.vm1.huseyincotuk.com Service Status: running ns1.vm1.huseyincotuk.com Service Status: running ns2.vm1.huseyincotuk.com Service Status: running Summary of Service Status: running = 3 Finished processing 3 / 3 hosts in 101.83 ms |
Package plugin test etmek her istemciye mssh paketini kurmak üzere aşağıdaki komut çalıştırılabilir.
1 2 3 4 5 6 7 |
ubuntu@puppet-master:~$ mco rpc package install package=mssh Discovering hosts using the mc method for 2 second(s) .... 3 * [ ============================================================> ] 3 / 3 Summary of Ensure: 1.3-2 = 3 Finished processing 3 / 3 hosts in 33010.48 ms |
Son olarak puppet plugin testi için tüm istemcilerde bir kez çalıştırmak üzere aşağıdaki komut çalıştırılabilir. Bunun için no-noop parametresi geçmek gerekmektedir. Parametreler ile puppet agent kullanabilmek için tüm istemcilerde puppet servisini durdurmak gerekmektedir. Böylece özellikle çalıştırılması istenmediği sürece çalışmayacaktır.
1 2 3 |
ubuntu@puppet-master:~$ mco puppet runonce --no-noop * [ ============================================================> ] 3 / 3 Finished processing 3 / 3 hosts in 96.40 ms |
Sunuculardaki Puppet durumunu görmek için aşağıdaki komutu çalıştırmak gerekmektedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
ubuntu@puppet-master:~$ mco puppet status * [ ============================================================> ] 3 / 3 puppet-client.vm1.huseyincotuk.com: Currently stopped; last completed run 20 minutes 04 seconds ago ns1.vm1.huseyincotuk.com: Currently stopped; last completed run 14 minutes 57 seconds ago ns2.vm1.huseyincotuk.com: Currently stopped; last completed run 3 minutes 18 seconds ago Summary of Applying: false = 3 Summary of Daemon Running: stopped = 3 Summary of Enabled: enabled = 3 Summary of Idling: false = 3 Summary of Status: stopped = 3 Finished processing 3 / 3 hosts in 83.25 ms |
Puppet çalıştırabilen sunucuların istatistikleri aşağıdaki gibi elde edilebilmektedir.
1 2 3 4 5 6 7 8 9 10 |
ubuntu@puppet-master:~$ mco puppet count Total Puppet nodes: 3 Nodes currently enabled: 3 Nodes currently disabled: 0 Nodes currently doing puppet runs: 0 Nodes currently stopped: 3 Nodes with daemons started: 0 Nodes without daemons started: 3 Daemons started but idling: 0 |
Puppet üzerindeki durum özeti aşağıdaki komut ile alınabilmektedir.
1 2 3 4 5 6 7 8 9 |
ubuntu@puppet-master:~$ mco puppet summary Summary statistics for 3 nodes: Total resources: ▇▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▄▁ min: 12.0 max: 249.0 Out Of Sync resources: ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ min: 2.0 max: 2.0 Failed resources: ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ min: 0.0 max: 0.0 Changed resources: ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ min: 2.0 max: 2.0 Config Retrieval time (seconds): ▇▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ min: 0.1 max: 1.4 Total run-time (seconds): ▇▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ min: 2.6 max: 4.4 Time since last run (seconds): ▇▁▇▁▁▁▁▁▁▁▇▁▁▁▁▁▁▁▁▁ min: 30.0 max: 51.0 |
Böylece mCollective kurulmuş ve örnek bir kaç agent ile kullanımı gösterilmiştir.