ansible應用之安裝elk框架

最近在學習ansible,先大致看了下視頻 , 現在需要練習使用了 。對照視頻中的練習方式,我覺得用處也不是太大 , 正好現在還要學習elk,以集群方式部署es,需要執行一些批量命令 , 而且還有一些修改配置文件的步驟,需要對每臺主機操作 。故此,嘗試結合ansible的學習 , 讓安裝更加的自動化,有以下思路 。說明一下,有些方案其實ansible也能執行,但感覺必要性不是特別的大 。
1,es不能使用root用戶啟動es不能使用root用戶啟動 , 故需要主機上創建普通的用戶,給普通用戶sudo免密權限 , visudo命令,在root    ALL=(ALL)       ALL這行下添加,內容是把以上root改成普通用戶,最后的ALL換成NOPASSWD:ALL 。實際工作中,如果以openstack等方式 , 需要es主機的話,自動創建好普通es用戶,該要的權限也都可以添加好 。最好后面部署的時候,不使用sudo的方式 , 我自己的練習用戶是wenwen , 所有部署目錄都在/home/wenwen下,以后會嘗試把用戶做成變量 , 另外一些主機ip和目錄的配置,也盡量做成變量 , 以便支持web平臺的相關操作 。
2,使用VMware練習,要準備四臺虛擬機如果是使用VMware練習,準備四臺虛擬機 。ansible功能大多依賴python,如果是centos7以上,默認安裝python , 不用再裝了 。然后選擇一臺,安裝ansible,其余的不用 , 這是ansible方便的地方 。安裝ansible的主機,我喜歡稱之為跳板機或者堡壘機,后面都稱為跳板機 。為什么呢 , 因為即使ansible執行后,輸入遠程主機密碼會保存會話,下次不用再輸入了,但萬一遠程主機密碼修改或會話失效呢,還要重新來 。而設置免密登錄 , 以rsa方式認證,則大致能避免這個問題 。免密登錄配置方式,可以參考別人的博客 , https://www.cnblogs.com/276815076/p/10449354.html#5113218,里面有一些我遇到坑時的解決方式 。我推測如果有openstack方式,則連免密登錄配置都不用手動做了,跳板機上生成的公鑰,當作openstack的一個變量應用于初始機器的authorized_key了,方便很多 。這只是我的一種思路 , 實際上如果是使用密碼,ansible也是支持把賬號密碼寫到/etc/ansible/hosts里的,如下方法一 主機+端口+密碼[webserver]192.168.1.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"方法二 主機+端口+密碼[webserver]192.168.1.3[1:3][webserver:vars]ansible_ssh_pass="123456"
3,ansible執行時sudo的用戶是普通用戶還是root用戶ansible在遠程主機上執行時,可能會需要一些root權限,一般編寫playbook會將remote_user設置為root , 以下選項不用開啟也可以,但是remote_user為root,就需要給root加免密登錄了 。我不想做root的免密 , 就讓remoter_user為我自己的wenwen用戶,然后開啟以下的配置 。修改ansible安裝目錄的ansible.cfg文件,以下配置開啟[privilege_escalation]become=True***//使用“true”或“yes”來表示啟用這個特權,如:become=true表示打開了become開關 。become_method=sudo *//********表示用什么方式將普通賬戶切換到root或所需的其他賬戶,這里可以用su或sudo 。*#become_user=root *//********設置為root賬戶 , 相當于我們以普通賬戶登入到遠程主機時,再使用su - root切換為root賬戶 。*#become_ask_pass=False*//表示詢問密碼*
4,開始編寫創建roles和playbook每個軟件的安裝都是一個role,在roles目錄下,創建以下目錄,剛創建的目錄中再創建task,vars,handle,templates等,安裝的role有以下:install-openjdk-epel-npm-unzip-nodejs-bzip2  這是一些需要yum的安裝,需要將上面3中提到的sudo用戶為root,使用我的wenwen用戶就提示不讓,也不知道為啥,明明給wenwen配置了所有root權限了 , 可能還是有些地方普通用戶還是沒有配好吧 。install-es 使用wenwen用戶安裝es和es-head,但是es-head的運行放到一個單獨的playbook中了,因為可能需要sudo用戶為root , 后面再提 。install-kibana  , 使用wenwen用戶安裝kibana并運行,需要es安裝好并且es的全部節點都啟動成功了 。install-logstash  , 使用wenwen用戶安裝logstash并運行,配置的logstash.conf的output為es,也需要es節點都啟動成功 。注意事項:install-es中還有一個修改系統配置文件的步驟 , 是需要root用戶執行的,yml文件是task下的modifysys.yml , 這個修改也太清楚作用 , 因為這個編寫是用echo追加文件的方式,卸載elk里如果刪除這幾個配置的話,擔心影響其它非elk軟件的使用,所以如果確認主機上沒有配置過 , 則可以去掉修改main.yml中的注釋安裝,執行后 , 再加上注釋 。不然下次安裝,就重復添加了 。es-playbook 這是es-head的啟動需要的playbook,沒有做成role方式,為了不混淆安裝卸載的role,將npm運行拆分出來了,和roles目錄平級 。里面是一個playbook的yml文件 , 第一次執行需要sudo為root用戶,后面可以為普通用戶,啟動的的命令配置的nohup輸出為/dev/null,我若配置到輸出文件中,就不能正常啟動 , 是不是因為輸出到文件中的問題也不清楚,就只好按照能啟動成功的方式來寫了 。卸載的role:uninstall-elk 停止進程,刪除目錄 , 移除yum的一些組件,如openjdk , npm等,同樣存在卸載風險,一些工具如jdk,可能非elk的軟件也在用,卸載的話,就得不償失了 。把卸載依賴軟件的部分在main.yml文件中注釋了,保留了停止進程和刪除目錄的步驟,并打了tags , 這樣可以有選擇的執行停止elk某個組件進程或者刪除目錄 。如果需要卸載依賴軟件,需要使用root用戶 。

推薦閱讀