環境聲明
- 阿里雲ECS Centos7.7.1908 ×1
- Azure虛擬機 Centos7.7.1908 ×1
- AwsEC2 Centos7.7.1908 ×1
- Vmware Centos7虛擬機 Centos7.7.1908 ×1
構建自己的Server集羣
構建屬於自己的服務器集羣,聽起來似乎很遙不可及,需要巨大成本的樣子。但其實,將幾臺服務器聯合起來管理使用,已經可以稱得上一個小集羣了.
方法一、作爲學生黨,可以藉助BAT三個國內雲服務商提供的學生主機各買一臺,在40元以內的成本構建起屬於自己的"服務集羣",由於樓主本身用於AWS和Azure的一年優惠體驗,所以只採購了阿里雲的學生主機
方法二、另一種方法在Vmware創建多個虛擬主機,同時運行,也可以作爲"服務集羣 "。前提需要您的物理主機配置過關,否則同時開啓多個虛擬主機,物理主機承受的工作負載很大。如果您擁有兩臺或以上個人主機,可以考慮將一臺電腦部署爲Esxi虛擬化平臺,再創建多個虛擬機,使用另一臺物理主機進行管理。本來也想使用Esxi的,只可惜樓主在學校的那臺聯想服務器忘了做內網穿透。
本文中Server集羣指代的是虛擬主機服務集羣,Machine集羣指代的是物理主機集羣。由於公有云服務商提供的主機本質上也屬於虛擬主機,故本文實踐和討論的是Server集羣。
認識Ansible
Ansible是一款基於Python開發的自動化運維工具,能夠實現批量系統配置、批量程序部署、批量運行命令等
ANsible基於模塊工作,常用模塊包括shell模塊、複製模塊、用戶模塊、軟件包模塊、服務模塊、文件模塊、劇本模塊等待
Ansible官網: https://docs.ansible.com/
安裝Ansible模塊及基本配置
我們無需爲集羣中的每臺服務器部署Ansible,只需爲一臺主機安裝Ansible作爲Ansible服務器,其餘作爲Ansible客戶機即可。爲了節約雲服務器資源,本文使用一臺Vmware主機作爲Ansible服務器。下面開始安裝。
- 安裝紅帽拓展源
yum install -y epel-release
- 安裝Ansible
yum install -y ansible
安裝完成後,爲了方便其他Ansible客戶機的管理,在Ansible服務器的本地解析文件中添加相關信息
vim /etc/hosts
爲每臺客戶機配置易於記憶的域名
本文將三臺客戶機分別命名爲
aliserver、awsserver、azuserver
在配置完成後,您可以使用
ping [hostname]
檢測是否可以正確解析
Ansible主機清單配置
/etc/ansible/hosts是Ansible的主機清單文件,包含連接Ansible客戶機的基本信息。注意,Ansible服務器和客戶機的通信是基於ssh的。接下來,由淺入深配置主機清單文件。
- 僅添加客戶機
vim /etc/ansible/hosts
在末尾加入`
[ip] aliserver
[ip] awsserver
[ip] azuserver
保存退出後,輸入
ansible aliserver -m ping -o -u root -k
輸入密碼後以及同意ssh主機密鑰檢測的安全提示後,得到如下提示,證明測試連通性成功
`aliserver ' SUCCESS => {
"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},
"changed": false, "ping": "pong"}`
另外兩臺客戶機的測試同上測試連通性語句參數說明
aliserver 目標主機或主機組
-m 指定模塊ping
ping 模塊
-u 用戶
-k 使用密碼
- 添加組
編輯 /etc/hosts文件在三臺主機的上一行,添加[server]字段,即定義了一個客戶機組再次使用測試連通性語句`
ansible server -m ping -o -u
依此輸入密碼即可測試組中所有主機的連通性
- 添加主機的連接相關信息
如果不想每次測試連通性都輸入一串參數,您可以在主機清單文件中添加主機配置信息,在每一行主機後面,以[參數]=參數值,空格作爲參數分隔符的形式添加連接信息。例如
aliserver ansible_ssh_user='root' ansible_ssh_pass='xxx'`
常見可選參數
- 利用變量簡化信息的填寫
在您命名的server集羣組中,如果它們的連接信息具有一致的部分,您可以使用Vars變量將參數簡化。例如在定義的server組中,具有相同的端口號,用戶,可以使用以下格式同一組中的主機一次性配置參數
[server]``host[1:4] #主機名的填寫支持類似正則的簡化填寫
[server:vars]
ansible_ssh_user='root'
ansible_ssh_pass='xxx'
- 分組組合
分組不僅支持將主機劃分至某個組,同時支持將組劃分至一個組中,作爲子組,方便集羣機器的靈活管理。爲了將組與主機區分,您需要使用children聲明。
[server1]
host[1:2]
[server2]
host[3:4]
[server:children]
server1
server2
- 指定清單文件,方便主機清單的跨設備遷移使用
使用ansible語句操作時默認的主機清單文件是/etc/ansible/hosts。爲了方便清單文件的重複和跨設備使用,您可以在主機或組參數前添加主機清單文件參數。例如存在主機清單文件hostlist,,可以使用以下語句進行操作`
ansible -i hostlist host1 -m ping -o
總結
- Ansible作爲運維自動化工具,在僅使用一臺主機作爲ansible服務器的情況下,實現客戶機的批量化管理和部署。
- Ansible服務器與客戶機之間的通信基於ssh協議,請確保服務器sshd服務的正常,ssh端口號,防火牆與雲服務商安全組的配置。另外,使用密碼的方式進行通信並不安全,尤其是將連接信息寫入主機清單文件時,存在關鍵信息暴露的危險
- 本文舉例用到的ping如上所示,是基於ssh的通信行爲,與ICMP協議無關,ping是Ansible的一個模塊,Ansible的工作都是基於模塊工作的,下一篇我們也會詳細介紹Ansible的常用模塊。
個人博客同步更新