1. 程式人生 > 實用技巧 >Clickhouse 在大資料分析平臺 - 留存分析上的應用

Clickhouse 在大資料分析平臺 - 留存分析上的應用

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