Clickhouse 在大資料分析平臺 - 留存分析上的應用
阿新 • • 發佈:2020-09-15
Ansible 學習
一、Ansible概述
1.什麼是Ansible
Ansible是一個自動化統一配置管理工具,自動化主要體現在Ansible集成了豐富模組以及功能元件,可以通過一個命令完成一系列的操作,進而能減少重複性的工作和維護成本,可以提高工作效率。
2.自動化工具
1.puppet 學習難,安裝ruby環境難,沒有遠端執行功能 2.ansible 輕量級,大規模環境下只通過ssh會很慢,序列的 3.saltstack 一般選擇salt會使用C/S結構的模式,salt-master和salt-minion,並行的,大規模批量操作的情況下,會比Ansible速度快一些,底層使用的是zero-MQ消協佇列
3.手動運維和自動運維
#手動運維
在之前,我們學習瞭如何安裝nginx。但是我們使用的是yum安裝的方式,在以前,運維需要規範,需要統一配置管理,我們只能使用原始碼安裝方式,便於我們去管理,原始碼安裝,如果是單臺還好,一會也就裝完了,如果此時,生產環境壓力驟增,需要擴充套件100臺web節點(原始碼安裝100臺nginx)我們該如何操作?
#自動運維可以做到
1.批量命令執行
2.批量安裝服務
3.批量配置
4.批量任務執行
5.批量程式碼部署
#自動化運維優點
1.提高工作效率
2.提高工作準確性
3.降低人工成本
4.減少重複工作
4.Ansible的功能及優點
1.遠端執行 批量執行遠端命令,可以對多臺主機進行遠端操作 2.配置管理 批量配置軟體服務,可以進行自動化方式配置,服務的統一配置管理,和啟停 3.事件驅動 通過Ansible的模組,對服務進行不同的事件驅動 比如: 1)修改配置後重啟 2)只修改配置檔案,不重啟 3)修改配置檔案後,重新載入 4)遠端啟停服務管理 4.管理公有云 通過API介面的方式管理公有云,不過這方面做的不如saltstack. saltstack本身可以通過saltcloud管理各大雲廠商的雲平臺 5.二次開發 因為語法是Python,所以便於運維進行二次開發 6.任務編排 可以通過playbook的方式來統一管理服務,並且可以使用一條命令,實現一套架構的部署 7.跨平臺,跨系統 幾乎不受到平臺和系統的限制,比如安裝apache和啟動服務 在Ubuntu上安裝apache服務名字叫apache2 在CentOS上安裝apache服務名字叫httpd 在CentOS6上啟動伺服器使用命令:/etc/init.d/nginx start 在CentOS7上啟動伺服器使用命令:systemctl start nginx
二、Ansible架構
1.組成結構
1.連線外掛connection plugins用於連線主機 用來連線被管理端
2.核心模組core modules連線主機實現操作, 它依賴於具體的模組來做具體的事情
3.自定義模組custom modules根據自己的需求編寫具體的模組
4.外掛plugins完成模組功能的補充
5.劇本playbookansible的配置檔案,將多個任務定義在劇本中,由ansible自動執行
6.主機清單inventor定義ansible需要操作主機的範圍
2.Ansible執行流程
1.Ansible讀取playbook劇本,劇本中會記錄對哪些主機執行哪些任務。 2.首先Ansible通過主機清單找到要執行的主機,然後呼叫具體的模組。 3.其次Ansible會通過連線外掛連線對應的主機並推送對應的任務列表。 4.最後被管理的主機會將Ansible傳送過來的任務解析為本地Shell命令執行。
三、搭建Ansible
1.環境準備
主機名 | IP | 身份 |
---|---|---|
m01 | 10.0.0.61 | Ansible 控制端 |
web01 | 172.16.1.7 | Ansible 被控端 |
web03 | 172.16.1.9 | Ansible 被控端 |
2.安裝Ansible
[root@m01 ~]# yum install -y ansible
3.Ansible命令
# ansible <host-pattern> [options]
--version #ansible版本資訊
-i #主機清單檔案路徑,預設是在/etc/ansible/hosts
-m #使用的模組名稱,預設使用command模組
-a #使用的模組引數,模組的具體動作
-k #提示輸入ssh密碼,而不使用基於ssh的金鑰認證
-C #模擬執行測試,但不會真的執行
-T #執行命令的超時
#檢視Ansible版本及模組路徑
[root@m01 ~]# ansible --version
ansible 2.9.10
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
4.Ansible配置檔案讀取順序
[root@m01 ~]# vim /etc/ansible/ansible.cfg
# nearly all parameters can be overridden in ansible-playbook
# or with command line flags. ansible will read ANSIBLE_CONFIG,
# ansible.cfg in the current working directory, .ansible.cfg in
# the home directory or /etc/ansible/ansible.cfg, whichever it
# finds first
[root@m01 ~]# rpm -ql ansible
[root@m01 ~]# zcat /usr/share/man/man1/ansible-config.1.gz
#要檢視完整列表,請訪問https://docs.ansibe.com/或使用ansibe-config命令。
For a full list check \fI\%https://docs.ansible.com/\fP\&. or use the \fIansible\-config\fP command.
#/etc/ansible/ansible.cfg 配置檔案,如果存在則使用
/etc/ansible/ansible.cfg \-\- Config file, used if present
#~/.ansible.cfg 使用者配置檔案,覆蓋預設配置(如果存在)
~/.ansible.cfg \-\- User config file, overrides the default config if present
#\&/ansible.cfg 本地配置檔案(在當前工作目錄中)假定為(aqproject-specific)(aq,如果存在,則重寫其餘檔案)。
\&./ansible.cfg \-\- Local config file (in current working directory) assumed to be \(aqproject specific\(aq and overrides the rest if present.
#如上所述,ANSIBLE_CONFIG環境變數將覆蓋所有其他環境變數。
As mentioned above, the ANSIBLE_CONFIG environment variable will override all others.
#生效優先順序
ANSIBLE_CONFIG >> $ANSIBLE_CONFIG/ansible.cfg >> ~/.ansible.cfg >> /etc/ansible/ansible.cfg
5.配置Ansible
[root@m01 ~]# cat /etc/ansible/ansible.cfg
#inventory = /etc/ansible/hosts #主機列表配置檔案
#library = /usr/share/my_modules/ #庫檔案存放目錄
#remote_tmp = ~/.ansible/tmp #臨時py檔案存放在遠端主機目錄
#local_tmp = ~/.ansible/tmp #本機的臨時執行目錄
#forks = 5 #預設併發數
#sudo_user = root #預設sudo使用者
#ask_sudo_pass = True #每次執行是否詢問sudo的ssh密碼
#ask_pass = True #每次執行是否詢問ssh密碼
#remote_port = 22 #遠端主機埠
host_key_checking = False #跳過檢查主機指紋
log_path = /var/log/ansible.log #ansible日誌
#普通使用者提權操作
[privilege_escalation]
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False
四、配置主機清單
1.單主機配置
1)方式一:
#ip+埠+使用者+密碼
[root@m01 ~]# vim /etc/ansible/hosts
[web01]
172.16.1.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
[web03]
172.16.1.7 ansible_ssh_port=22
#測試主機清單
[root@m01 ~]# ansible '*' -m ping
2)方式二
[root@m01 ~]# vim /etc/hosts
172.16.1.7 web01
172.16.1.9 web03
[root@m01 ~]# vim /etc/ansible/hosts
[web01]
web01 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
[web03]
web03 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
3)方式三
[root@m01 ~]# vim /etc/ansible/hosts
[web1]
web01
[web3]
web03
[web1:vars]
ansible_ssh_pass='1'
[web3:vars]
ansible_ssh_pass='1'
4)基於祕鑰的方式
#生成金鑰對
[root@m01 ~]# ssh-keygen
#推送祕鑰
[root@m01 ~]# ssh-copy-id 172.16.1.7
[root@m01 ~]# ssh-copy-id 172.16.1.9
#配置
[root@m01 ~]# vim /etc/ansible/hosts
[web1]
web01
[web3]
web03
2.主機組配置
[root@m01 ~]# vim /etc/ansible/hosts
[web_group]
web01
web03
[nfs_group]
nfs ansible_ssh_pass='1'
#檢視組下面的機器
[root@m01 ~]# ansible 'web_group' --list-host
hosts (2):
web01
web03
3.定義多組操作
1)操作多個組
[root@m01 ~]# ansible 'web_group,nfs_group' -m ping
2)定義包含組
[root@m01 ~]# vim /etc/ansible/hosts
[web_group]
web01
web03
[nfs_group]
nfs ansible_ssh_pass='1'
[mysql_group]
db01 ansible_ssh_pass='1'
db02 ansible_ssh_pass='1'
[nfs_zu:children]
web_group
nfs_group