網絡測試
現在可以進行網絡上的測試,其網絡的測試也很容易,就是将各個主機進行ping通就可以了。首先在安裝了Ansible軟體的虛拟機對192.168.30.101/24,192.168.30.102/24和192.168.30.103/24進行ping通。
圖 4.1‑1 ping 192.168.30.101
圖 4.1‑2 ping 192.168.30.102
圖 4.1‑3 ping 192.168.30.103
這樣就說明192.168.30.7/24可以ping通192.168.30.101/24,192.168.30.102/24和192.168.30.103/24網段。其餘的192.168.30.101/24,192.168.30.102/24和192.168.30.103/24的網段,兩兩ping通就可以了。我的網絡測試均是成功的。這裡就不做研究;至此網絡測試的環節就完成了。
模拟測試
- 模拟1:使用Playbook完成基礎操作,對192.168.30.101-192.168.30.102進行增加新檔案,建立新使用者,安裝httpd服務,發送簡單的html檔案,啟動httpd服務。
- 建立一個file.yml檔案。編輯以下内容,并且進行驗證。
圖 4.2‑1 cat file.yml
圖 4.2‑2 ansible-playbook file.yml
- 可以先使用ansible-playbook -C file.yml進行驗證,該指令不需要對目标主機進行傳送指令,Ansible自己先對指令進行一遍執行,若有報錯,就可以對.yml檔案進行修改。
圖 4.2‑3 ansible-playbook -C file.yml
- 驗證過程:
- 建立新檔案
圖 4.2‑4建立新檔案
- 建立新使用者
圖 4.2‑5 建立新使用者
- 檢查httpd服務是否安裝成功,可以檢查其端口,預設是80端口,
圖 4.2‑6 檢查80端口
在其中,還傳送了index.html檔案,檢查如下,這也可以說明httpd服務已經啟動了:
圖 4.2‑7 驗證80端口
- 模拟2:Ansible實作Template管理Nginx,這裡主要做的是Nginx根據主機的CPU個數進行配置設定,這樣可以有效的提高效率。
Nginx是一個輕量級的Web伺服器/反向代理伺服器以及電子郵件代理伺服器,其特點是占有的記憶體少,并發的能力強,在實際操作中Nginx的并發能力在同類型的網頁伺服器中表現較好,是一款Apache伺服器不錯的替代品。現在時網際網路上非常流行,中國大陸使用Nginx網站使用者就有:百度,京東,騰訊,淘寶,網易等等。可見其Nginx的實力之強大。
- 首先要在Ansible伺服器端安裝Nginx服務
第一步:添加Nginx存儲庫,使用的指令是:yum install epel-release;
圖 4.2‑8 yum install epel-release
第二步:安裝Nginx,使用的指令是:yum install nginx。
圖 4.2‑9 yum install nginx
第三步:啟動Nginx,指令是:systemctl start nginx,如果想要在系統啟動的時候,Nginx就啟動的話,指令是:systemctl enable nginx
第四步:驗證nginx是否啟動成功,指令是ps -ef | grep nginx,也可以打開虛拟機浏覽器輸入:IP位址:80
圖 4.2‑10 ps -ef | grep nginx
圖 4.2‑11 浏覽器打開
- 為了測試實驗,我将192.168.30.101主機的CPU改為2,192.168.30.102主機的CPU改為4,後續的操作。我希望配置檔案傳過去的時候,可以根據CPU的個數,自動生成相應的配置檔案。是以需要模闆Template。
編輯一個playbook。内容如下并且進行這個playbook以及複制nginx的配置到建立的檔案/ansible/templatees/nginx.conf.j2并且修改該檔案:
圖 ‑12 修改/ansible/templatees/nginx.conf.j2
圖 ‑13 cat testtempl.yml
圖 4.2‑14 ansible-playbook testtempl.yml
驗證(由于與Httpd服務公用一個端口80,是以他們是一種互斥的關系,是以要把Httpd服務停掉,指令有ansible websrvs -m service -a 'name=httpd state=stopped' ;ansible websrvs -m shell -a ‘rpm -q nginx’;ansible websrvs -m shell -a ‘ss -ntpl’; ansible websrvs -m shell -a ‘ps -aux | grep nginx’):
圖 4.2‑15 ansible websrvs -m shell -a ‘rpm -q nginx’
圖 4.2‑16 ansible websrvs -m shell -a ‘ss -ntpl’
圖 4.2‑17 ansible websrvs -m shell -a ‘ps -aux | grep nginx’
圖 4.2‑18 ansible websrvs -m setup | grep cpu
CentOS 6的配置檔案複制到192.168.30.7主機中,CentOS 6執行指令
scp /etc/nginx/nginx.conf
192.168.30.7:/root/ansible/templates/nginx.conf6.j2以及更改名稱:
圖 4.2‑19 scp /etc/nginx/nginx.conf 192.168.30.7:/root/ansible/templates/nginx.conf6.j2
圖 4.2‑20 更改名稱
根據主機自身的系統,來配置相應的Nginx服務;即CentOS 7系統就執行CentOS 7的相應操作,CentOS 6系統就執行CentOS 6的相應操作。
圖 4.2‑21 cat testtempl.yml
圖 4.2‑22 ansible-playbook testtempl.yml
- 模拟3:實作Roles運維自動化;Roles是Ansilbe自1.2版本引入的新特性,用于階層化、結構化的組織Playbook。Roles能夠根據層次型結構自動裝載變量檔案、Tasks以及Handlers等等。要使用Roles隻需要在Playbook中使用include指令即可。簡單來講,Roles就是通過分别将變量、檔案、任務、模闆以及處理器放置于單獨的目錄中,并且可以是用于建構守護程序等場景中,在複雜場景建議使用Roles,代碼複用度高,例如:變更指定主機或者主機組;命名不規範維護和傳承成本大;某些功能需要多個Playbook,通過includes就可以實作。
- 首先,第一步在/root/ansible/下建立roles檔案夾。然後再roles檔案夾下建立一些服務名稱的檔案夾;第二步就是以Nginx為例子,在Nginx檔案夾中建立tasks(任務)和templates(模闆)檔案夾,如下。
圖 4.2‑23 tree
第三步就是在tasks中建立并且編輯檔案:
group.yml(- name: create group \n group: name=nginx gid=80),
restart.yml(- name: service restart \n service: name=nginx state=restarted),
start.yml(- name: service start \n service: name= nginx state=started enabled=yes),
templ.yml(- name: copy conf \n template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf),
user.yml(- name: create user \n user: name=nginx group=nginx uid=80 system=yes shell=/sbin/nologin),
yum.yml(- name: install package \n yum: name=nginx),
main.yml(- include: group.yml \n – include: user.yml \n -include: yum.yml \n – include: templ.yml \n – include: start.yml)。
在templates中建立并且編輯檔案nginx.conf.j2(cp /etc/nginx/nginx.conf /root/ansible/roles/nginx/nginx.conf.j2)
圖 4.2‑24 vim nginx.conf.j2
第四步就是在/root/ansible/下建立nginx_role.yml并且進行編輯:
圖 4.2‑25 cat nginx_role.yml
第五步即執行nginx_role.yml,ansible-playbook nginx_role.yml(原先的操作與該操作有重複,是以我這邊隻是單執行一遍)
圖 4.2‑26 ansible-playbook nginx_role.yml
綜合測試
制作一個簡單的企業級Roles,也就是執行這個playbook就可以實作多台主機安裝了httpd服務,以及配置設定相關的操作,在Roles檔案夾下建立app的檔案夾,裡面包含有files,handlers,task,templates;app的tree如下。
圖 4.3‑1 tree
Tasks下各個檔案的内容:Files下的vhosts.conf是無内容。
圖 4.3‑2 cat copyfile.yml
圖 4.3‑3 cat group.yml
圖 4.3‑4 cat start.yml
圖 4.3‑5 cat templ.yml
圖 4.3‑6 cat user.yml
圖 4.3‑7 cat yum.yml
圖 4.3‑8 cat main.yml
Handlers下檔案内容:
圖 4.3‑9 cat main.yml
Templates下檔案内容(拷貝httpd服務配置檔案并修改):
圖 4.3‑10 copy http檔案
圖 4.3‑11 修改http檔案(1)
圖 4.3‑12 修改http檔案(2)
Vars下檔案内容:
圖 4.3‑13 cat vars/main.yml
在ansible檔案夾中建立app_roles.yml内容然後執行:
圖 4.3‑14 cat app_roles.yml
驗證:
- 以CPU個數*10得到的端口号,以及有app程序。
圖 ‑15 node1 ss -ntl
圖 ‑16 node2 ss -ntl
圖 ‑17 app 程序(1)
圖 4.3‑18 app 程序(2)
- 複制vhsot.conf檔案至/etc/httpd/conf.d。
圖 ‑19 node1複制vhost.conf
圖 4.3‑20 node2複制vhost.conf