1. 程式人生 > >用ansible自動化搭建web、sql伺服器、lvs排程器

用ansible自動化搭建web、sql伺服器、lvs排程器

一、伺服器角色


二、部署ansible

1、ansible簡介

ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程式部署、批量執行命令等功能。
ansible是基於模組工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所執行的模組,ansible只是提供一種框架。主要包括:
(1)、連線外掛connection plugins:負責和被監控端實現通訊;
(2)、host inventory:指定操作的主機,是一個配置檔案裡面定義監控的主機;
(3)、各種模組核心模組、command模組、自定義模組;
(4)、藉助於外掛完成記錄日誌郵件等功能;

(5)、playbook:劇本執行多個任務時,非必需可以讓節點一次性執行多個任務。

2、ansible的優點

簡單易用,學習門檻低、問題少、安裝快、執行快,可進行批量命令和模組擴充套件,操作完全依賴 SSH 而不需要安裝 agent。Ansible 結合 Docker、Mesos、Puppet、Vagrant、Git 等系統可以構建出非常好的自動化運維平臺。

3、ansible的缺點

簡單的設計從而導致沒有依賴管理功能,另外當被管理的伺服器達到一定數量時,執行效率會大大降低。

4、安裝過程

ansible的安裝包需從網際網路上下載,即使用網際網路yum源。

第一步,連結網址http://mirrors.163.com,點選右側的centos幫助,下載centos6這個連結指向的檔案,把下載的檔案拷貝到/etc/yum.repos.d/目錄下;

第二步,使用EPLE的yum源安裝,語句為rpm -ivh epel-release-latest-6.noarch.rpm,然後查詢當前目錄下所有以rpm結尾的檔案,並複製到/root/docs/ansible_rpm/下,語句為:

find -name '*rpm' -exec cp {} /root/docs/ansible_rpm/

第三步,在在聯網的情況下,執行語句vim /etc/yum.conf,修改其中的配置檔案keepcache=1,儲存退出。然後執行下面的語句:

yum install -y ansible

安裝的同時,RPM包也已下載到/var/yum目錄下;

第四步,使用語句ansible --version檢視是否安裝成功,如果出現版本資訊則安裝成功。如果出現問題,則執行以下語句(需要rpm包):

yum install -y python-markupsafe
rpm -e ansible
rpm -ivh ansible*rpm

第五步,如果希望以後可以更加方便的安裝,則可以將這些rpm包拷貝到自己建立的yum源中,用

createrepo .

建立一個索引,這樣只要在/etc/yum.repo.d/下的repo檔案中加入這個目錄,這樣就可以直接用yum語句安裝、刪除ansible包了。

5、建立工作目錄

在需要的目錄下建立目錄ansible:

mkdir ansible

6、編寫配置檔案ansible.cfg

使用cd命令轉到ansible目錄下,vim配置檔案ansible.cfg,內容如下:

[defaults]
inventory = hosts    # 定義被管理主機的檔案
remote_user = root   # ssh到遠端主機的使用者
編寫完成後,儲存並退出。

7、編寫主機清單檔案hosts

vim主機清單檔案hosts,即把被管理的伺服器填入hosts檔案中,併為其分組(一般寫主機名不寫ip地址),如:

[webservers]
yzy.bilibili.com
ljm.bilibili.com
[dbservers]
ccc.bilibili.com 
[lvs]
twh.bilibili.com

8、利用ansible語句檢查配置檔案是否編寫成功

執行臨時命令ad-hoc,格式為:ansible主機 -m 模組 -a '選項',如:

ansible all -a 'id root'

該語句的意思為檢視所有主機的root使用者的id,如果沒有指定模組則預設使用shell模組;

下面再來舉個例子,如何分別列出hosts中webservers組的主機資訊:

ansible all --list-hosts

如何列出所有組的主機資訊

ansible all --list-hosts

三、部署資料庫伺服器

1、mysql的簡介

MySQL 是一個關係型資料庫,由瑞典 MySQL AB 公司開發,目前屬於 Oracle 旗下公司。MySQL 最流行的關係型資料庫管理系統,在 WEB 應用方面 MySQL 是最好的 RDBMS (Relational Database ManagementSystem,關係資料庫管理系統) 應用軟體之一。MySQL 是一種關聯資料庫管理系統,關聯資料庫將資料儲存在不同的表中,而不是將所有資料放在一個大倉庫內,這樣就增加了速度並提高了靈活性。MySQL 所使用的 SQL 語言是用於訪問資料庫的最常用標準化語言。MySQL 軟體採用了雙授權政策(本詞條"授權政策"),它分為社群版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放原始碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站資料庫。由於其社群版的效能卓越,搭配 PHP ,Linux和 Apache 可組成良好的開發環境,經過多年的web技術發展,在業內被廣泛使用的一種web伺服器解決方案之一,稱之為LAMP。

2、ansible-playbook配置思路

ansible配合使用mysql_db、mysql_user在客戶端建立資料庫、建立使用者及配置主從。

3、mysql的優點

1.使用C和C++編寫,並使用了多種編譯器進行測試,保證原始碼的可移植性;

2.支援AIX、FreeBSD、HP-UX、Linux、MacOS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種作業系統;

3.為多種程式語言提供了API。這些程式語言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等;

4.支援多執行緒,充分利用CPU資源;

5.優化的SQL查詢演算法,有效地提高查詢速度

6.既能夠作為一個單獨的應用程式應用在客戶端伺服器網路環境中,也能夠作為一個庫而嵌入到其他的軟體中;

7.提供多語言支援,常見的編碼如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作資料表名和資料列名;

8.提供TCP/IP、ODBC和JDBC等多種資料庫連線途徑;

9.提供用於管理、檢查、優化資料庫操作的管理工具;

10.支援大型的資料庫。可以處理擁有上千萬條記錄的大型資料庫;

11.支援多種儲存引擎。

4、伺服器授權遠端主機訪問

本地需要管理遠端的一批伺服器,主要執行以下任務:

(1) 將本地的檔案複製到遠端所有伺服器;

(2)需要在遠端伺服器中執行一個個命令;

使用copy模組,可以將本地檔案一鍵複製到遠端伺服器; -a後跟上引數,引數中指定本地檔案和遠端路徑;

ansible通過ssh登入到遠端伺服器後,並不執行.bash_profile來設定使用者自定義的環境變數;如果我們需要管理的目標伺服器的路徑不同,就不能直接寫絕對路徑,也不能寫變數替換的路徑;

比如:針對伺服器A的目標複製路徑為 /opt/app/user1/bin ,伺服器B的目標複製路徑為/opt/app/user2/bin; 這兩個路徑在各自的伺服器中的路徑變數都設定為$bin; 但在copy模組中,我們不能直接使用dest = $bin/; 路徑設定一般放在.bashrc /.bash_profile檔案,但ansible模組登入後並不載入這兩個檔案;

解決方法: 針對這種情況,可以將dest路徑設定為~/,都複製到使用者目錄,後續再通過遠端指令碼處理;

需要在遠端執行一個個命令來管理遠端伺服器;

遠端執行命令的模組有command、shell、scripts、以及raw模組;

command模組為ansible預設模組,不指定-m引數時,使用的就是command模組; comand模組比較簡單,常見的命令都可以使用,但其命令的執行不是通過shell執行的,所以,像這些 "<",">", "|", and "&"操作都不可以,當然,也就不支援管道;示例:顯示遠端路徑:

缺點:不支援管道,就沒法批量執行命令;

使用shell模組,在遠端命令通過/bin/sh來執行;所以,我們在終端輸入的各種命令方式,都可以使用; 但是我們自己定義在.bashrc/.bash_profile中的環境變數shell模組由於沒有載入,所以無法識別;如果需要使用自定義的環境變數,就需要在最開始,執行載入自定義指令碼的語句;

5、部署mysql

如何通過ansible部署mysql呢?上面我們已經部署好ansible了,以下便是通過ansible部署mysql並起服務的介紹:

#我們都遵循裝包-配置-起服務的規則,那麼我們在寫指令碼的時候應該注意什麼呢?開頭的格式以’---’開行,第二行開始寫指令碼內容,整個指令碼的名字,對應使用的hosts主機名,以及整個指令碼要執行的任務有什麼都要一一明細,如果不清楚步驟,那麼通過ansible部署mysql的過程中就會遇到很多問題,比如檔案目錄找到,裝包過程中丟包,對應的專用模組不對應,多一個空格或者少一個分號等等。

#首先明確裝包裝什麼包,包之間有什麼依賴關係,有什麼優點等等。

第一步,利用裝包特有的專屬模組yum和item迴圈語句,item迴圈語句with_items:裡面有要安裝的所有包,state則表示要安裝軟體的版本轉態。present和latest都表示最新版;

第二步,進行服務的配置:這裡用到了 mysql_db:和mysql_user:板塊來進行資料庫的搭建和使用者的建立管理,密碼是:12345,對使用者進行授權處理,在這裡,我們對此資料庫進行任何人可以訪問,授權處理為:priv: 'yzybbs.*:ALL,GRANT',注意到這裡我的hosts:’%’,這個%的意思是允許其人任何使用者遠端連線管理此資料庫,並對此有執行許可權;

第三步,啟動mysql服務,就簡單的寫一個server板塊,啟動服務即可,啟動服務了,但是我得判斷mysql服務有沒有啟動成功,一般,如果mysql服務沒有啟動成功,可以通過檢視錯誤日誌的方式,日誌預設路徑/var/log/mysqld.log。

ansible-playbook程式碼如下:(3-deploy-mysql.yml

---
- name: deploy mysql
  hosts: dbservice
  tasks:
  - name: install pkgs
    yum:
      name: "{{ item }}"
      state: present
    with_items:
    - mysql
    - mysql-server
    - MySQL-python 
  - name: start service
    service:
      name: mysqld
      state: started
      enabled: true
  - name: Create a new database
    mysql_db:
      name: yzybbs
      state: present
  - name: create a new user
    mysql_user:
      name: yzy
      host: '%'
      password: 12345
      priv: 'yzybbs.*:ALL,GRANT'
      state: present

四、部署web伺服器

1、通過ansible安裝、起服務

以下是對web伺服器進行,安裝、配置、起服務的程式碼:(1-deploy-web.yml
---
- name: deploy web
  hosts: webservice
  tasks:
  - name: install pkgs
    yum:
      name: "{{item}}"
      state: present
    with_items:
      - httpd
      - php
      - php-mysql
  - name: config
    copy:
      src: /root/B1_yzy/file/httpd.conf
      dest: /etc/httpd/conf/httpd.conf
      owner: root
      group: root
      mode: 0644
  - name: start service
    service:
      name: httpd
      state: started
      enabled: true

第一行必須是以'---'開頭,第二行開始寫內容。'- name'是說明playbook的名字,起名字一定要清晰易懂,一個playbook可以有多個名字,即多個play(劇本);'hosts'的意思是所要執行命令的主機名所在的資料夾,一般使用主機名而不是ip地址,主機名可以有多個;'tasks'即該playbook所要執行的任務,一個play可以有多個tasks,本程式碼中可以看出一共有3個tasks(三個任務名'name')。

第一個任務是安裝apache(httpd、php、php-mysql)。這裡利用yum專有模組和item陣列對多臺主機的安裝,item是陣列,with_item是陣列內容,state則表示要安裝軟體的版本轉態。present和latest都表示最新版;第二個任務是拷貝檔案'copy'。src表示原始檔的路徑,dest則是需要拷貝檔案的主機名的路徑,owner和group分別表示擁有對該原始檔所有許可權的使用者和所屬組,mode表示賦予所拷貝檔案主機的許可權;第三個任務是起服務。利用service專有模組對httpd開啟服務,state表示對httpd的狀態為開啟,enabled表示一個判斷命令,即service是否開啟,true表示“是”。

2、將Discuz安裝到web1上

以下是將Discuz.zip拷貝到web1(即ljm.bilibili.com)上並解壓的程式碼:(2-install-discuz.yml

---
- name: deploy ljm
  hosts: ljm.bilibili.com
  tasks:
  - name: copy and unzip
    unarchive:
      src: /root/B1_yzy/file/Discuz.zip
      dest: /var/yzy_web/
      owner: apache
      group: apache

本次操作的主機名是ljm.bilibili.com,利用unarchive的ansible專有模組對Discuz.zip的拷貝和解壓縮,將本機的/root/B1_yzy/file/Discuz.zip壓縮檔案拷貝到ljm.bilibili.com主機的/var/yzy_web/下,許可權所屬的使用者和組是apache。

3、將web1上的discuz拷貝到web2上

以下是將web1上的Discuz拷貝到web2(即yzy.bilibili.com)上程式碼:(4-deploy-otherweb.yml

---
- name: synchronize bbs from ljm
  hosts: ljm.bilibili.com
  tasks:
  - name: install rsync
    yum:
      name: rsync
      state: present
  - name: zip
    shell:
      cd /var/yzy_web/;
      zip -r -q -o bbs.zip bbs
  - name: pull bbs
    synchronize:
      src: /var/yzy_web/bbs.zip
      dest: /root/B1_yzy/file/
      mode: pull 
  - name: remove zip file
    shell:
      cd /var/yzy_web/;
      rm -f bbs.zip;
- name: copy bbs to yzy
  hosts: yzy.bilibili.com
  tasks:
  - name: copy bbs
    unarchive:
      src: /root/B1_yzy/file/bbs.zip
      dest: /var/yzy_web
      owner: root
      group: root

該程式碼中有2個play:

第一個任務,將Discuz中的bbs資料夾壓縮並備份到web2上,第一個任務是安裝rsync,rsync是linux系統下的資料映象備份工具。使用快速增量備份工具Remote Sync可以遠端同步,支援本地複製,或者與其他SSH、rsync主機同步。present表示安裝最新版本;

第二個任務,將Discuz中的bbs資料夾壓縮的shell指令碼,路徑是/var/yzy_web/;第三個任務則是利用ansible中的synchronize專有模組將本機的原始檔bbs.zip備份到另一臺遠端主機上的/root/B1_yzy/file/下,許可權是pull;

第三個任務,先cd到/var/yzy_web/路徑下然後將bbs.zip刪除。第二個play任務是將遠端主機上/var/yzy_web/路徑下的bbs.zip拷貝到web2主機上。利用ansible中的unarchive專有模組將遠端主機上的/root/B1_yzy/file/bbs.zip壓縮包拷貝到web2主機上的/var/yzy_web路徑下並解壓縮然後自動刪除,許可權所屬的使用者和組都為root。

4、拷貝跳轉路徑檔案

以下是將Discuz論壇html跳轉檔案拷貝到webservice主機上的程式碼(5-index-jump.yml
---
- name: let web jump
  hosts: webservice
  tasks:
  - name: copy html
    copy:
      src: /root/B1_yzy/file/index.html
      dest: /var/yzy_web/
      owner: root
      group: root
      mode: 0644

這是跳轉檔案的檔案內容:

<head>
<meta http-equiv="refresh" content="0;url=bbs">
</head>

hosts是webservice組中的主機,即web1和web2。任務是利用ansible中的copy專有模組將遠端主機上的/root/B1_yzy/file/index.html檔案拷貝到webservice組中的主機的/var/yzy_web/路徑下,許可權所屬的使用者和組都為root,許可權是0644。

五、部署lvs排程器

1、LVS排程器

LVS是Linux Virtual Server的簡寫,意即Linux虛擬伺服器,是一個虛擬的伺服器集群系統。本專案在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟體專案之一。

2、LVS特

可伸縮網路服務的幾種結構,它們都需要一個前端的負載排程器(或者多個進行主從備份)。我們先分析實現虛擬網路服務的主要技術,指出IP負載均衡技術是在負載排程器的實現技術中效率最高的。在已有的IP負載均衡技術中,主要有通過網路地址轉換(Network AddressTranslation)將一組伺服器構成一個高效能的、高可用的虛擬伺服器,我們稱之為VS/NAT技術(Virtual Server via Network Address Translation)。在分析VS/NAT的缺點和網路服務的非對稱性的基礎上,我們提出了通過IP隧道實現虛擬伺服器的方法VS/TUN (Virtual Server via IPTunneling),和通過直接路由實現虛擬伺服器的方法VS/DR(Virtual Server via Direct Routing),它們可以極大地提高系統的伸縮性。VS/NAT、VS/TUN和VS/DR技術是LVS叢集中實現的三種IP負載均衡技術。

3、工作模式

工作模式有四種:nat / tun / dr / fullna

4、工作特點

客戶端不再直接訪問後臺應用伺服器(real server),而是訪問lvs排程器,排程器再根據它的排程演算法將使用者請求轉發到real server。DR模式real server迴應客戶端,不用將回應傳送到排程器。

5、排程演算法

排程演算法有10種,常用的是rr輪詢/wrr加權輪詢/lc最少連線/wlc加權最少連線,其他還有基於區域性的最少連線lblc/帶複製的基於區域性的最少連線lblcr/源地址雜湊sh/目標地址雜湊dh/期望的最短延遲sed/最少佇列排程nq

6、LVS優點

(1) 開源,免費;

(2)在網上能找到一些相關技術資源;

(3)具有軟體負載均衡的一些優點。

7、LVS缺點

(1)最核心的就是沒有可靠的支援服務,沒有人對其結果負責;

(2)功能比較簡單,支援複雜應用的負載均衡能力較差,如演算法較少等;

(3)開啟隧道方式需重編譯核心;

(4)配置複雜;

(5)主要應用於LINUX,目前沒有專門用於WINDOWS的版本,不過可以通過配置,使windows成為LVS叢集中的real server(win2003、win2008中)。

8、lvs部署安裝

(1)  安裝ipvsadm      

yum -y install ipvsadm

檢查安裝:

ipvsadm -v

(2)在lvs排程器的物理網絡卡上配置vip

cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth0:1
vim ifcfg-eth0:0
DEVICE=eth0:0
BOOTPROTO=none
NETMASK=255.255.255.0
TYPE=Ethernet
IPADDR=172.16.100.8
ONBOOT=yes

啟動網絡卡:

ifup eth0:0

(3)在web伺服器的本地環回介面lo上配置vip    

cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=172.16.100.8
NETMASK=255.255.255.255
NETWORK=192.168.16.240
BROADCAST=192.168.16.240
ONBOOT=yes
NAME=lo:0

啟動本地環回介面lo:

ifup lo:0

(4)修改web伺服器的核心引數,以便客戶端傳送的請求,只有排程器迴應,注意,兩臺web伺服器都要配置

sysctl -a | grep arp_ig
echo 'net.ipv4.conf.all.arp_ignore = 1'>> /etc/sysctl.conf
cho 'net.ipv4.conf.lo.arp_ignore = 1'>> /etc/sysctl.conf
echo 'net.ipv4.conf.all.arp_announce = 2'>> /etc/sysctl.conf
echo 'net.ipv4.conf.lo.arp_announce = 2'>> /etc/sysctl.conf
sysctl -p

(5)在lvs排程器上配置規則

ipvsadm -A -t 192.168.16.240:80 -s wrr
ipvsadm -a -t 192.168.16.240:80 -r192.168.16.254 -g -w 2
ipvsadm -a -t 192.168.16.240:80 -r192.168.16.249
ipvsadm -Ln

(6)  儲存規則

service ipvsadm save

而用ansible-playbook怎麼辦呢

先部署lvs伺服器:(6-deploy-lvs.yml

---
- name: deploy lvs
  hosts: lvs
  tasks:
  - name: install ipvsadm
    yum:
      name: ipvsadm
      state: present
  - name: copy vip
    copy:
      src: /root/B1_yzy/file/ifcfg-eth0:0
      dest: /etc/sysconfig/network-scripts/
      owner: root
      group: root
      mode: 0644
  - name: deploy vip
    shell:
      ifup eth0:0
      ipvsadm -A -t 172.16.100.8:80 -s wlc;
      ipvsadm -a -t 172.16.100.8:80 -r 172.16.100.2;
      ipvsadm -a -t 172.16.100.8:80 -r 172.16.100.5;
      service ipvsadm save

再部署web,ansible程式碼如下:(7-deploy-webvip.yml

---
- name: deploy web vip
  hosts: webservice
  tasks:
  - name: copy vip
    copy:
      src: /root/B1_yzy/file/ifcfg-lo:0
      dest: /etc/sysconfig/network-scripts/
      owner: root
      group: root
      mode: 0644
  - name: deploy vip
    shell:
      ifup lo:0;
      echo 'net.ipv4.conf.all.arp_ignore = 1' >> /etc/sysctl.conf;
      echo 'net.ipv4.conf.lo.arp_ignore = 1' >> /etc/sysctl.conf;
      echo 'net.ipv4.conf.all.arp_announce = 2' >> /etc/sysctl.conf;
      echo 'net.ipv4.conf.lo.arp_announce = 2' >> /etc/sysctl.conf;
      sysctl -p;

六、配置DNS伺服器

1、DNS域名解析系統

DNS(Domain Name System,域名系統),全球資訊網上作為域名和IP地址相互對映的一個分散式資料庫,能夠使使用者更方便的訪問網際網路,而不用去記住能夠被機器直接讀取的IP數串。通過域名,最終得到該域名對應的IP地址的過程叫做域名解析(或主機名解析)。DNS協議執行在UDP協議之上,使用埠號53。在RFC文件中RFC 2181對DNS有規範說明,RFC 2136對DNS的動態更新進行說明,RFC 2308對DNS查詢的反向快取進行說明。

2、DNS功能

每個IP地址都可以有一個主機名,主機名由一個或多個字串組成,字串之間用小數點隔開。有了主機名,就不要死記硬背每臺IP裝置的IP地址,只要記住相對直觀有意義的主機名就行了。這就是DNS協議的功能。

主機名到IP地址的對映有兩種方式:

1)靜態對映,每臺裝置上都配置主機到IP地址的對映,各裝置獨立維護自己的對映表,而且只供本裝置使用;

2)動態對映,建立一套域名解析系統(DNS),只在專門的DNS伺服器上配置主機到IP地址的對映,網路上需要使用主機名通訊的裝置,首先需要到DNS伺服器查詢主機所對應的IP地址。

通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。在解析域名時,可以首先採用靜態域名解析的方法,如果靜態域名解析不成功,再採用動態域名解析的方法。可以將一些常用的域名放入靜態域名解析表中,這樣可以大大提高域名解析效率。

3、DNS查詢

若想跟蹤一個FQDN名的解析過程,在LinuxShell下輸入dig www +trace,返回的結果包括從根域開始的遞迴或迭代過程,一直到權威域名伺服器。

GeniePro DNS 應對DNS劫持和DNS快取中毒攻擊的關鍵性機制:一致性檢查

每個Geniepro節點將自身的DNS記錄傳送給工作組內其他節點請求一致性檢查;

每個Geniepro節點將自身的記錄與收到的記錄進行比較;

每個Geniepro工作組的通訊協調節點將獲得的DNS記錄更新發送給其他組的通訊協調節點請求一致性檢查;

每個Genipro工作組的通訊協調節點向上一級DNS伺服器請求更新記錄並與收到的其他通訊協調節點的記錄進行比較。

4、DNS安全

(1) 針對域名系統的惡意攻擊:DDOS攻擊造成域名解析癱瘓。

(2) 域名劫持:修改註冊資訊、劫持解析結果。

(3) 國家性質的域名系統安全事件:“.ly”域名癱瘓、“.af”域名的域名管理權變更。

(4) 系統上執行的DNS服務存在漏洞,導致被黑客獲取許可權,從而篡改DNS資訊。

(5) DNS設定不當,導致洩漏一些敏感資訊。提供給黑客進一步攻擊提供有力資訊。

5、DNS配置

先配置/etc/named.conf

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
	listen-on port 53 { 172.16.100.6; };
	// listen-on-v6 port 53 { ::1; };
	directory 	"/var/named";
	dump-file 	"/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
	allow-query     { any; };
	recursion yes;
	forwarders { 10.0.0.1; };

	dnssec-enable no;
	dnssec-validation no;

	/* Path to ISC DLV key */
	//bindkeys-file "/etc/named.iscdlv.key";

	//managed-keys-directory "/var/named/dynamic";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
	type hint;
	file "named.ca";
};

zone "bilibili.com" IN {
	type master;
	file "bi.com.ndb";
};


include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

在配置/var/named下的檔案,名為:www.bilibili.com

$TTL 60
@	IN SOA	@ rname.invalid. (
	0	; serial
	1D	; refresh
	1H	; retry
	1W	; expire
	3H )	; minimum
	IN NS	@
@	IN A	127.0.0.1
www	IN A	172.16.100.8

七、編寫shell指令碼完成遠端主機的一鍵配置

其實這一塊能內容很簡單,編輯一個簡單的shell指令碼,分別完成,web建立前和建立後的所有步驟

第一個指令碼為:

#!/bin/bash
ansible-playbook playbooks/1-deploy-web.yml
ansible-playbook playbooks/2-install-discuz.yml
ansible-playbook playbooks/3-deploy-mysql.yml

在第一個指令碼執行完畢後,開啟瀏覽器,輸入http://172.16.100.2/bbs,完成安裝,其中資料庫主機為:172.16.100.7,資料庫名為:yzybbs,使用者為:yzy,密碼為12345,管理員密碼隨機設取

如圖:

yu


第二個指令碼為:

#!/bin/bash
ansible-playbook playbooks/4-deploy-otherweb.yml
ansible-playbook playbooks/5-index-jump.yml
ansible-playbook playbooks/6-deploy-lvs.yml
ansible-playbook playbooks/7-deploy-webvip.yml

最後作品:

(域名是隨機選取的,如有侵權請聯絡作者)