- 升級python
# 安裝wget
yum -y install wget
# 下載python
wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz
# 將里面的文件 移動到python3文件夾中
mkdir /usr/local/python3
tar -zxvf Python-3.8.0.tgz -C /usr/local/python3
# 刪除Python-3.8.0文件夾
mv /usr/local/python3/Python-3.8.0/* /usr/local/python3
rm -rf /usr/local/python3/Python-3.8.0
# 更新環(huán)境
yum -y update
yum -y groupinstall "Development Tools"
yum -y install gcc openssl-devel bzip2-devel libffi-devel
yum -y install zlib*
# 配置安裝
cd /usr/local/python3
# --with-ssl 是配置https協(xié)議蜡饵,--with-ensurepip=install是安裝pip工具
./configure prefix=/usr/local/python3 --with-ssl --with-ensurepip=install
# 在編譯前需要進行編譯配置重贺,./configure --enable-optimizations --with-ssl --with-ensurepip=install,
#官方文檔有提到加--enable-optimizations參數(shù)可以提升后期python百分之10的運行速度通熄,不過我加上后發(fā)現(xiàn)會編譯失敗,所以去掉了
#如果你加了以后執(zhí)行下面的命令報錯了,可以執(zhí)行 `make clean`,然后再執(zhí)行` make && make install `
make && make install
# 備份原來的python鏈接棚品,配置軟連接
cd /usr/bin
mv python python.bak
ln -s /usr/local/python3/bin/python3 /usr/bin/python
# 給pip3建立軟連接為pip
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
- 設(shè)置pip源
# 進入到python3的bin目錄
cd /usr/local/python3/bin
# 設(shè)置pip源
mkdir ~/.pip
vi ~/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
# 升級pip版本
pip install --upgrade pip
- 安裝 ansible
# 通過pip安裝 ansible
sudo pip install ansible
# 驗證是否安裝成功
ansible --version
ansible 程序結(jié)構(gòu)
安裝目錄如下:
配置文件目錄:/etc/ansible/
執(zhí)行文件目錄:/usr/bin/
Lib庫依賴目錄:/usr/lib/pythonX.X/site-packages/ansible/
Help文檔目錄:/usr/share/doc/ansible-X.X.X/
Man文檔目錄:/usr/share/man/man1/
配置清單
配置清單保存的是一些 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
ansible 命令集
- /usr/bin/ansible Ansibe AD-Hoc 臨時命令執(zhí)行工具诬乞,常用于臨時命令的執(zhí)行
- /usr/bin/ansible-doc Ansible 模塊功能查看工具
- /usr/bin/ansible-galaxy 下載/上傳優(yōu)秀代碼或Roles模塊 的官網(wǎng)平臺,基于網(wǎng)絡的
- /usr/bin/ansible-playbook Ansible 定制自動化的任務集編排工具
- /usr/bin/ansible-pull Ansible遠程執(zhí)行命令的工具钠导,拉取配置而非推送配置(使用較少震嫉,海量機器時使用,對運維的架構(gòu)能力要求較高)
- /usr/bin/ansible-vault Ansible 文件加密工具
- /usr/bin/ansible-console Ansible基于Linux Consoble界面可與用戶交互的命令執(zhí)行工具
ansible 命令詳解
命令的具體格式如下:
ansible <host-pattern> [-f forks] [-m module_name] [-a args]
-a MODULE_ARGS #模塊的參數(shù)牡属,如果執(zhí)行默認COMMAND的模塊票堵,即是命令參數(shù),如: “date”逮栅,“pwd”等等
-k悴势,--ask-pass #ask for SSH password。登錄密碼措伐,提示輸入SSH密碼而不是假設(shè)基于密鑰的驗證
--ask-su-pass #ask for su password特纤。su切換密碼
-K,--ask-sudo-pass #ask for sudo password侥加。提示密碼使用sudo捧存,sudo表示提權(quán)操作
--ask-vault-pass #ask for vault password。假設(shè)我們設(shè)定了加密的密碼官硝,則用該選項進行訪問
-B SECONDS #后臺運行超時時間
-C #模擬運行環(huán)境并進行預運行矗蕊,可以進行查錯測試
-c CONNECTION #連接類型使用
-f FORKS #并行任務數(shù)短蜕,默認為5
-i INVENTORY #指定主機清單的路徑氢架,默認為/etc/ansible/hosts
--list-hosts #查看有哪些主機組
-m MODULE_NAME #執(zhí)行模塊的名字,默認使用 command 模塊朋魔,所以如果是只執(zhí)行單一命令可以不用 -m參數(shù)
-o #壓縮輸出岖研,嘗試將所有結(jié)果在一行輸出,一般針對收集工具使用
-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可查看更詳細信息
ansible 配置公私鑰
ansible 是基于 ssh 協(xié)議實現(xiàn)的础淤,所以其配置公私鑰的方式與 ssh 協(xié)議的方式相同崭放,具體操作步驟如下:
#1. 在被控端生成私鑰
[root@server ~]# ssh-keygen
#2.向主機分發(fā)私鑰
[root@server ~]# ssh-copy-id root@192.168.1.72
ansible 常用模塊
- 主機連通性測試
[root@localhost mas]# ansible -i hosts 96server -m ping
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
[WARNING]: Platform linux on host 192.168.1.96 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for
more information.
192.168.1.96 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
- command 模塊
這個模塊可以直接在遠程主機上執(zhí)行命令,并將結(jié)果返回本主機鸽凶。
[root@localhost mas]# ansible -i hosts 96server -m command -a 'ss -ntl'
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
[WARNING]: Platform linux on host 192.168.1.96 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for
more information.
192.168.1.96 | CHANGED | rc=0 >>
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 10 127.0.0.1:25 0.0.0.0:*
LISTEN 0 128 127.0.0.1:953 0.0.0.0:*
- shell 模塊
shell模塊可以在遠程主機上調(diào)用shell解釋器運行命令币砂,支持shell的各種功能,例如管道等玻侥。
[root@localhost mas]# ansible -i hosts 96server -m shell -a 'cat /etc/hosts |grep "wps"'
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
[WARNING]: Platform linux on host 192.168.1.96 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for
more information.
192.168.1.96 | CHANGED | rc=0 >>
192.168.1.96 reg.wps.lan
- copy 模塊
這個模塊用于將文件復制到遠程主機决摧,同時支持給定內(nèi)容生成文件和修改權(quán)限等。
- src #被復制到遠程主機的本地文件凑兰≌谱可以是絕對路徑,也可以是相對路徑姑食。如果路徑是一個目錄拘鞋,則會遞歸復制,用法類似于"rsync"
- content #用于替換"src"矢门,可以直接指定文件的值
- dest #必選項盆色,將源文件復制到的遠程主機的絕對路徑
- backup #當文件內(nèi)容發(fā)生改變后,在覆蓋之前把源文件備份祟剔,備份文件包含時間信息
- directory_mode #遞歸設(shè)定目錄的權(quán)限隔躲,默認為系統(tǒng)默認權(quán)限
- force #當目標主機包含該文件,但內(nèi)容不同時物延,設(shè)為"yes"宣旱,表示強制覆蓋;設(shè)為"no"叛薯,表示目標主機的目標位置不存在該文件才復制浑吟。默認為"yes"
- others #所有的 file 模塊中的選項可以在這里使用
- file 模塊
該模塊主要用于設(shè)置文件的屬性,比如創(chuàng)建文件耗溜、創(chuàng)建鏈接文件组力、刪除文件等。
- force #需要在兩種情況下強制創(chuàng)建軟鏈接抖拴,一種是源文件不存在燎字,但之后會建立的情況下;另一種是目標軟鏈接已存在阿宅,需要先取消之前的軟鏈候衍,然后創(chuàng)建新的軟鏈,有兩個選項:yes|no
- group #定義文件/目錄的屬組洒放。后面可以加上mode:定義文件/目錄的權(quán)限
- owner #定義文件/目錄的屬主蛉鹿。后面必須跟上path:定義文件/目錄的路徑
- recurse #遞歸設(shè)置文件的屬性,只對目錄有效往湿,后面跟上src:被鏈接的源文件路徑妖异,只應用于state=link的情況
- dest #被鏈接到的路徑惨好,只應用于state=link的情況
- state #狀態(tài),有以下選項:
directory:如果目錄不存在随闺,就創(chuàng)建目錄
file:即使文件不存在日川,也不會被創(chuàng)建
link:創(chuàng)建軟鏈接
hard:創(chuàng)建硬鏈接
touch:如果文件不存在,則會創(chuàng)建一個新的文件矩乐,如果文件或目錄已存在龄句,則更新其最后修改時間
absent:刪除目錄、文件或者取消鏈接文件
- fetch 模塊
該模塊用于從遠程某主機獲壬⒑薄(復制)文件到本地分歇。
- dest:用來存放文件的目錄
- src:在遠程拉取的文件,并且必須是一個file欧漱,不能是目錄
- cron 模塊
該模塊適用于管理cron計劃任務的职抡,其使用的語法跟我們的crontab文件中的語法一致
- day= #日應該運行的工作( 1-31, *, */2, )
- hour= # 小時 ( 0-23, *, */2, )
- minute= #分鐘( 0-59, *, */2, )
- month= # 月( 1-12, *, /2, )
- weekday= # 周 ( 0-6 for Sunday-Saturday,, )
- job= #指明運行的命令是什么
- name= #定時任務描述
- reboot # 任務在重啟時運行,不建議使用误甚,建議使用special_time
- special_time #特殊的時間范圍缚甩,參數(shù):reboot(重啟時),annually(每年)窑邦,monthly(每月)擅威,weekly(每周),daily(每天)冈钦,hourly(每小時)
- state #指定狀態(tài)郊丛,present表示添加定時任務,也是默認設(shè)置瞧筛,absent表示刪除定時任務
- user # 以哪個用戶的身份執(zhí)行
- yum 模塊
該模塊主要用于軟件的安裝厉熟。
- name= #所安裝的包的名稱
- state= #present--->安裝, latest--->安裝最新的, absent---> 卸載軟件较幌。
- update_cache #強制更新yum的緩存
- conf_file #指定遠程yum安裝時所依賴的配置文件(安裝本地已有的包)揍瑟。
- disable_pgp_check #是否禁止GPG checking,只用于presentor latest绅络。
- disablerepo #臨時禁止使用yum庫月培。 只用于安裝或更新時。
- enablerepo #臨時使用的yum庫恩急。只用于安裝或更新時。
- service 模塊
該模塊用于服務程序的管理纪蜒。
- arguments #命令行提供額外的參數(shù)
- enabled #設(shè)置開機啟動衷恭。
- name= #服務名稱
- runlevel #開機啟動的級別,一般不用指定纯续。
- sleep #在重啟服務的過程中随珠,是否等待灭袁。如在服務關(guān)閉以后等待2秒再啟動。(定義在劇本中窗看。)
- state #有四種狀態(tài)茸歧,分別為:started--->啟動服務, stopped--->停止服務显沈, restarted--->重啟服務软瞎, reloaded--->重載配置
- user 模塊
該模塊主要是用來管理用戶賬號。
- comment # 用戶的描述信息
- createhome # 是否創(chuàng)建家目錄
- force # 在使用state=absent時, 行為與userdel –force一致.
- group # 指定基本組
- groups # 指定附加組拉讯,如果指定為(groups=)表示刪除所有組
- home # 指定用戶家目錄
- move_home # 如果設(shè)置為home=時, 試圖將用戶主目錄移動到指定的目錄
- name # 指定用戶名
- non_unique # 該選項允許改變非唯一的用戶ID值
- password # 指定用戶密碼
- remove # 在使用state=absent時, 行為是與userdel –remove一致
- shell # 指定默認shell
- state # 設(shè)置帳號狀態(tài)涤浇,不指定為創(chuàng)建,指定值為absent表示刪除
- system # 當創(chuàng)建一個用戶魔慷,設(shè)置這個用戶是系統(tǒng)用戶只锭。這個設(shè)置不能更改現(xiàn)有用戶
- uid # 指定用戶的uid
- group 模塊
該模塊主要用于添加或刪除組。
- gid= #設(shè)置組的GID號
- name= #指定組的名稱
- state= #指定組的狀態(tài)院尔,默認為創(chuàng)建蜻展,設(shè)置值為absent為刪除
- system= #設(shè)置值為yes,表示創(chuàng)建為系統(tǒng)組
- script 模塊
該模塊用于將本機的腳本在被管理端的機器上運行邀摆。
- setup 模塊
該模塊主要用于收集信息铺呵,是通過調(diào)用facts組件來實現(xiàn)的。
facts組件是Ansible用于采集被管機器設(shè)備信息的一個功能隧熙,我們可以使用setup模塊查機器的所有facts信息片挂,可以使用filter來查看指定信息。整個facts信息被包裝在一個JSON格式的數(shù)據(jù)結(jié)構(gòu)中贞盯,ansible_facts是最上層的值音念。
facts就是變量,內(nèi)建變量 躏敢。每個主機的各種信息闷愤,cpu顆數(shù)、內(nèi)存大小等件余。會存在facts中的某個變量中讥脐。調(diào)用后返回很多對應主機的信息,在后面的操作中可以根據(jù)不同的信息來做不同的操作啼器。如redhat系列用yum安裝旬渠,而debian系列用apt來安裝軟件。