碼住!Ansible安裝使用詳解來襲!
一、使用 yum 安裝
1.使用yum安裝
yum install epel-release -y
yum install ansible –y
2.使用 pip(python的包管理模塊)安裝
首先,我們需要安裝一個python-pip包,安裝完成以后,則直接使用pip命令來安裝我們的包,具體操作過程如下:
yum install python-pip
pip install ansible
3.查看ansible的版本號
[root@app01 paas-basic]# ansible --version
ansible 2.9.18
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, Nov 16 2020, 22:23:17) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
[root@app01 paas-basic]#
二、ansible的配置文件
1.ansible 命令執行過程
- 加載自己的配置文件,默認/etc/ansible/ansible.cfg;
- 查找對應的主機配置文件,找到要執行的主機或者組;
- 加載自己對應的模塊文件,如 command;
- 通過ansible將模塊或命令生成對應的臨時py文件(python腳本), 并將該文件傳輸至遠程服務器;
- 對應執行用戶的家目錄的.ansible/tmp/XXX/XXX.PY文件;
- 給文件 +x 執行權限;
- 執行并返回結果;
- 刪除臨時py文件,sleep 0退出;
2.ansible 程序結構
安裝目錄如下(yum安裝):
配置文件目錄:/etc/ansible/
執行文件目錄:/usr/bin/
Lib庫依賴目錄:/usr/lib/pythonX.X/site-packages/ansible/
Help文檔目錄:/usr/share/doc/ansible-X.X.X/
Man文檔目錄:/usr/share/man/man1/
3.ansible配置文件查找順序
ansible與我們其他的服務在這一點上有很大不同,這里的配置文件查找是從多個地方找的,順序如下:
1、檢查環境變量ANSIBLE_CONFIG指向的路徑文件(export ANSIBLE_CONFIG=/etc/ansible.cfg);
2、~/.ansible.cfg,檢查當前目錄下的ansible.cfg配置文件;
3、/etc/ansible.cfg檢查etc目錄的配置文件。
4.ansible配置文件
ansible 的配置文件為/etc/ansible/ansible.cfg,ansible 有許多參數,下面我們列出一些常見的參數:
inventory = /etc/ansible/hosts #這個參數表示資源清單inventory文件的位置
library = /usr/share/ansible #指向存放Ansible模塊的目錄,支持多個目錄方式,只要用冒號(:)隔開就可以
forks = 5 #并發連接數,默認為5
sudo_user = root #設置默認執行命令的用戶
remote_port = 22 #指定連接被管節點的管理端口,默認為22端口,建議修改,能夠更加安全
host_key_checking = False #設置是否檢查SSH主機的密鑰,值為True/False。關閉后第一次連接不會提示配置實例
timeout = 60 #設置SSH連接的超時時間,單位為秒
log_path = /var/log/ansible.log #指定一個存儲ansible日志的文件(默認不記錄日志)
5.ansible主機清單
在配置文件中,我們提到了資源清單,這個清單就是我們的主機清單,里面保存的是一些 ansible 需要連接管理的主機列表。我們可以來看看他的定義方式:
1)直接指明主機地址或主機名:
green.example.com
blue.example.com#
192.168.100.1
192.168.100.10
2)定義一個主機組[組名]把地址或主機名加進去:
[mysql_test]
192.168.253.159
192.168.253.160
192.168.253.153
需要注意的是,這里的組成員可以使用通配符來匹配,這樣對于一些標準化的管理來說就很輕松方便了。
我們可以根據實際情況來配置我們的主機列表,具體操作如下:
[root@server ~]# vim /etc/ansible/hosts
[web]
192.168.19.100
192.168.19.101
6.設置ssh無密碼登錄
設置免密碼登錄:
ssh-keygen
ssh-copy-id -p 33 root@192.168.19.101
7.ansible 命令詳解
命令的具體格式如下:
ansible [-f forks] [-m module_name] [-a args]
也可以通過ansible -h來查看幫助,下面我們列出一些比較常用的選項,并解釋其含義:
-a MODULE_ARGS #模塊的參數,如果執行默認COMMAND的模塊,即是命令參數,如:“date”,“pwd”等等
-k,--ask-pass #ask for SSH password。登錄密碼,提示輸入SSH密碼而不是假設基于密鑰的驗證
--ask-su-pass #ask for su password。su切換密碼
-K,--ask-sudo-pass #ask for sudo password。提示密碼使用sudo,sudo表示提權操作
--ask-vault-pass #ask for vault password。假設我們設定了加密的密碼,則用該選項進行訪問
-B SECONDS #后臺運行超時時間
-C #模擬運行環境并進行預運行,可以進行查錯測試
-c CONNECTION #連接類型使用
-f FORKS #并行任務數,默認為5
-i INVENTORY #指定主機清單的路徑,默認為/etc/ansible/hosts
--list-hosts #查看有哪些主機組
-m MODULE_NAME #執行模塊的名字,默認使用 command 模塊,所以如果是只執行單一命令可以不用 -m參數
-o #壓縮輸出,嘗試將所有結果在一行輸出,一般針對收集工具使用
-S #用 su 命令
-R SU_USER #指定 su 的用戶,默認為 root 用戶
-s #用 sudo 命令
-U SUDO_USER #指定 sudo 到哪個用戶,默認為 root 用戶
-T TIMEOUT #指定 ssh 默認超時時間,默認為10s,也可在配置文件中修改
-u REMOTE_USER #遠程用戶,默認為 root 用戶
-v #查看詳細信息,同時支持-vvv,-vvvv可查看更詳細信息
8.執行命令
[root@ambari1 .ssh]# ansible all -m ping
The authenticity of host '192.168.17.221 (192.168.17.221)' can't be established.
ECDSA key fingerprint is c5:76:ed:2e:c8:6b:85:25:0b:d7:b4:8f:12:66:72:1f.
Are you sure you want to continue connecting (yes/no)? yes
192.168.19.100 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Warning: Permanently added '192.168.19.100' (ECDSA) to the list of known hosts.\r\nPermission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n",
"unreachable": true
}
192.168.19.101 | SUCCESS => {
"changed": false,
"ping": "pong"
}
存在的問題解決:
從上面我們可以看到,192.168.19.100這一臺出現了問題,并不能執行成功,此時可以在/etc/ansible/hosts的基礎上添加相關內容如下:
## db-[99:101]-node.example.com
[master]
192.168.19.100 ansible_connection=ssh ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=33
192.168.19.101
三、ansible的命令
1.command 模塊
這個模塊可以直接在遠程主機上執行命令,并將結果返回本主機。
[root@test1 ~]# ansible web -m command -a 'netstat -ntlp'
192.168.19.100 | CHANGED | rc=0 >>
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
192.168.19.101 | CHANGED | rc=0 >>
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
[root@test1 ~]#
2.shell 模塊
shell模塊可以在遠程主機上調用shell解釋器運行命令,支持shell的各種功能,例如管道等。
[root@test1 ~]# ansible web -m shell -a 'cat /etc/passwd |grep "root"'
192.168.19.101 | CHANGED | rc=0 >>
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
192.168.19.100 | CHANGED | rc=0 >>
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@test1 ~]#