日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Puppet基于Master/Agent模式实现LNMP平台部署

發布時間:2024/4/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Puppet基于Master/Agent模式实现LNMP平台部署 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

隨著IT行業的迅猛發展,傳統的運維方式靠大量人力比較吃力,運維人員面對日益增長的服務器和運維工作,不得不把很多重復的、繁瑣的工作利用自動化處理。前期我們介紹了運維自動化工具ansible的簡單應用,本期帶來的是運維自動化神器puppet基于Master/Agent模式實現LNMP平臺部署。

Puppet

簡介

Puppet是基于ruby語言開發的一種Linux、Unix、Windows平臺的集中配置管理系統,可以C/S模式或獨立運行,使用自有的puppet描述語言,可管理配置文件、用戶、cron任務、軟件包、系統服務等。

工作流程

①Agent向Master端發起認證請求

②Master端驗證其合法性,允許其連接

③Agent將本機變量(主機名、內存大小、IP地址等)通過SSL連接發送給Master

④Master檢測Agent的主機名,然后找到manifest對應的node配置,并對該部分內容進行解析。解析結果生成一個“偽代碼”(catelog),并將其發給Agent

⑤Agent接收到“偽代碼”,開始執行

⑥執行時判斷有沒有File文件,如果有,則向fileserver發起請求

⑦判斷有沒有配置Report,如果已配置,則把執行結果發送給服務器

⑧執行結束,檢測系統狀態

實現過程

實驗拓撲

1 2 3 #系統環境:CentOS6.6 #各主機間可通過域名通信,基于hosts實現 #各主機時間已同步

Puppet Master配置

安裝所需軟件包

1 [root@node1?~]#?yum?install?puppet?puppet-server?-y

創建模塊目錄

1 2 [root@node1?~]#?cd?/etc/puppet/modules/ [root@node1?modules]#?mkdir?nginx/{files,manifests}?php/{files,manifests}?mysql/{files,manifests}?-pv

準備各服務配置文件

1 2 3 [root@node1?modules]#?cp?/root/files/nginx.conf?nginx/files/ [root@node1?modules]#?cp?/root/files/www.conf?php/files/ [root@node1?modules]#?cp?/root/files/my.cnf?mysql/files/

創建各模塊

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 [root@node1?modules]#?vim?nginx/manifests/init.pp class?nginx?{ ????package{'nginx': ????????ensure??=>?present, ????????name????=>?nginx, ????} ????file{'nginx.conf': ????????ensure??=>?file, ????????source??=>?'puppet:///modules/nginx/nginx.conf', ????????path????=>?'/etc/nginx/nginx.conf', ????????require?=>?Package['nginx'], ????} ???service{'nginx': ????????ensure??=>?true, ????????enable??=>?true, ????????subscribe?=>?File['nginx.conf'], ????} } [root@node1?modules]#?vim?php/manifests/init.pp class?php?{ ????package{'php-fpm': ????????ensure??=>?present, ????????name????=>?php-fpm, ????} ????file{'www.conf': ????????ensure??=>?file, ????????source??=>?'puppet:///modules/php/www.conf', ????????path????=>?'/etc/php-fpm.d/www.conf', ????????require?=>?Package['php-fpm'], ????} ???service{'php-fpm': ????????ensure??=>?true, ????????enable??=>?true, ????????subscribe?=>?File['www.conf'], ????} } [root@node1?modules]#?vim?mysql/manifests/init.pp class?mysql?{ ????package{'mysql-server': ????????ensure??=>?present, ????????name????=>?'mysql-server', ????} ????file{'my.cnf',: ????????ensure??=>?file, ????????source??=>?'puppet:///modules/mysql/my.cnf', ????????path????=>?'/etc/my.cnf', ????????require?=>?Package['mysql-server'], ????} ???service{'mysqld': ????????ensure??=>?true, ????????enable??=>?true, ????????subscribe?=>?File['my.cnf'], ????} } [root@node1?modules]#?cd?../manifests/ [root@node1?manifests]#?mkdir?server [root@node1?manifests]#?vim?server/node3.pp node?'node3.scholar.com'?{ ??include?mysql } [root@node1?manifests]#?vim?server/node4.pp node?'node4.scholar.com'?{ ??include?nginx,php } [root@node1?manifests]#?vim?site.pp? import?"server/*.pp"

以上資源詳解

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 #package詳解 ensure:程序包目標狀態,{present(installed)|absent|purged|held|latest} name:資源名稱,即軟件包名字,可省略,如果省略,將繼承title的值 provide:軟件包管理器,會自動識別 source:程序包文件路徑 install_options:安裝選項,最常用的是通過INATALLDIR來制定安裝目錄 #file詳解 ensuce:目標狀態,{present|absent|directory|file|link} backup:通過filebacket資源來備份文件,值通常為filebucket資源的名稱 content:文件內容,生成方式有三種(content,source,target),三者彼此互斥 source:通過制定的url下載文件至本地,格式:puppet:///modules/MODULE_NAME/file_name target:為符號鏈接指定目標 links:文件為符號連接,{follow|manage} path:文件路徑,必須使用雙引號 mode:定義權限,通常為8進制數字 owner:?定義文件的屬主 group:定義文件的屬組 force:強制執行刪除文件、鏈接或目錄,僅用于ensure為absent時 purge:清除指定目錄中存在的,但未在資源中定義的文件 resurce:目錄遞歸,{true|false|inf|remote} replace:替換,本地存在的文件與資源中指定的文件內容不同時是否執行替換,默認為否 #service詳解 ensure:服務目標狀態,{?true(running)|false(stopped)} enable:是否開機自動啟動,{true|false} name:服務名稱,可以省略,如果省略,將繼承title的值 path:服務腳本路徑,默認為/etc/init.d/ start:是否啟動服務 stop:是否關閉服務 restart:是否重啟服務 status:判斷服務是否運行 #特殊屬性 require:需要依賴于某個資源 before:應該先執行本資源,在執行別的資源 notify:?將當前資源的變動信息通知給別的資源 subscribe:訂閱某資源變動信息 ->?:后資源需要依賴前資源 ~>?:前資源變動通知后資源調用

啟動服務

首次啟動puppet-server守護進程時,其會自動進行運行環境的初始化,例如創建一個本地CA及服務器端相關的證書和密鑰等。初始化操作完成后,puppet就會監聽指定的套接字并等待客戶端的連接請求。默認情況下,其證書和密鑰等文件位于/var/lib/puppet/ssl/目錄中。

出于調試的目的,首次啟動puppet服務進程可以以非守護進程方式進行,并讓其輸出詳解信息以便于觀察初始化過程。如下所示過程,其逐步展示了創建本地CA、作為puppet服務器的本地主機向CA申請證書、獲得證書以及CA移出證書簽署請求的過程等,而后啟動服務進程并準備接受各agent的連接請求。為下面的命令額外使用--debug選項,還可以獲得更為詳細的輸出信息。


如果上述的測試啟動沒有問題,可中止當前的啟動,正式啟動服務了

1 2 3 4 [root@node1?manifests]#?service?puppetmaster?start Starting?puppetmaster:?????????????????????????????????????[??OK??] [root@node1?manifests]#?ss?-tnlp?|?grep?puppet LISTEN?????0??????5??????????????*:8140?????????*:*??????users:(("puppetmasterd",3186,5))

Puppet Agent配置

安裝所需軟件包

1 [root@node3?~]#?yum?install?puppet?-y

指定puppet server

1 2 3 4 5 [root@node3?~]#?vim?/etc/puppet/puppet.conf???#也可手動命令指定 [agent] server?=?node1.scholar.com

啟動服務之前先來看一下各agent端所需軟件是否安裝

1 2 3 4 5 6 [root@node3?~]#?rpm?-q?mysql-server package?mysql-server?is?not?installed [root@node4?~]#?rpm?-q?ngnix package?ngnix?is?not?installed [root@node4?~]#?rpm?-q?php-fpm package?php-fpm?is?not?installed

啟動服務

puppet agent在首次啟動時,會向為其指定的puppet server申請證書,并完成后續連接請求。同樣的理由,出于測試的目的,接入當前puppet集群中的首個agent節點可以以非守護進程的方式進行,以觀察其初始化過程

1 #所有agent端都執行以上系列操作

此時,在puppet服務器端使用puppet cert命令管理客戶端的證書請求,其--list選項能夠查看等待簽署證書的客戶端列表,而--sign選項可用于為指定指定節點簽署證書,如果要一次性地為多個節點的證書申請進行簽署可同時使用--all選項

正式啟動服務

1 2 3 4 [root@node3?~]#?service?puppet?start Starting?puppet:???????????????????????????????????????????[??OK??] [root@node4?~]#?service?puppet?start Starting?puppet:???????????????????????????????????????????[??OK??]

再次檢查各agent端軟件狀態

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@node3?~]#?rpm?-q?mysql-server mysql-server-5.1.73-5.el6_6.x86_64 [root@node3?~]#?service?mysqld?status mysqld?(pid??4526)?is?running... [root@node3?~]#?chkconfig?--list?mysqld mysqld???????????? 0:off?? 1:off?? 2:on??? 3:on??? 4:on??? 5:on??? 6:off [root@node4?~]#?rpm?-q?nginx? nginx-1.0.15-11.el6.x86_64 [root@node4?~]#?service?nginx?status nginx?(pid??6678)?is?running... [root@node4?~]#?chkconfig?--list?nginx nginx???????????? 0:off?? 1:off?? 2:on??? 3:on??? 4:on??? 5:on??? 6:off [root@node4?~]#?rpm?-q?php-fpm php-fpm-5.3.3-46.el6_6.x86_64 [root@node4?~]#?service?php-fpm?status php-fpm?(pid??6309)?is?running... [root@node4?~]#?chkconfig?--list?php-fpm php-fpm???????? 0:off?? 1:off?? 2:on??? 3:on??? 4:on??? 5:on??? 6:off

各服務已按預設啟動,Puppet基于Master/Agent模式實現LNMP平臺部署成功完成

Puppet Kick

agent跟master默認30分鐘通信一次,如果在這期間,某一服務出現bug或配置有誤,如何實現緊急推送,盡量減少業務損失呢?下面簡單說一下puppet kick功能的實現

Puppet Agent配置

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 [root@node3?~]#?vim?/etc/puppet/puppet.conf? [agent] listen=true [root@node3?~]#?vim?/etc/puppet/namespaceauth.conf [puppetrunner] allow?*.scholar.com [root@node3?~]#?vim?/etc/puppet/auth.conf? path?/run method?save allow?node1.scholar.com #?this?one?is?not?stricly?necessary,?but?it?has?the?merit #?to?show?the?default?policy?which?is?deny?everything?else path?/ auth?any [root@node3?~]#?service?puppet?restart Stopping?puppet:???????????????????????????????????????????[??OK??] Starting?puppet:???????????????????????????????????????????[??OK??] #所有agent都執行以上操作

Puppet Master推送

1 2 3 4 5 6 [root@node1?~]#?puppet?kick?-p?10?--host?node3.scholar.com Triggering?node3.scholar.com Getting?status status?is?success node3.scholar.com?finished?with?exit?code?0 Finished

推送成功,puppet kick功能實現,至此,Puppet基于Master/Agent模式實現LNMP平臺部署實驗全部完成

The end

Puppet基本應用就先說到這里了,Puppet功能強大,從管理規模方面較之Ansible,Puppet還是略勝一籌的,以上只是牛刀小試,有興趣的朋友可以深入研究,部署過程中遇到問題可留言交流。以上僅為個人學習整理,如有錯漏,大神勿噴~~~



本文轉自 北城書生 ?51CTO博客,原文鏈接:http://blog.51cto.com/scholar/1673562

總結

以上是生活随笔為你收集整理的Puppet基于Master/Agent模式实现LNMP平台部署的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。