1.ansible介紹
ssh秘鑰認證+腳本批量管理蝙泼,特點:簡單程剥、實用,
但是看起來比較LOW汤踏,需要人工寫腳本织鲸,類似實時復制的inotify工具。
2013以前這種方式很普遍溪胶。
MySQL高可用 MHA集群搂擦,要求所有機器互相秘鑰認證。
大數(shù)據(jù)集群也需要哗脖。
2.批量管理工具歷史
SSH+腳本 CFEngine盾饮、Puppet、saltstack? ? ? ? ? ? ? 懒熙、ansible
08年以前 07-08年? 10-13年? 14-17(python開發(fā))? ? ? 16-(python開發(fā))
? ? ? ? sina網(wǎng)
3.為什么用ansible?
簡單普办、方便工扎、容易學習、功能同樣強大衔蹲。
ansible有配置文件肢娘,可以多線程直接實現(xiàn)。不需要寫腳本舆驶,類似實時復制的sersync橱健。
4.什么是ansible?
Ansible是一個用來遠程管理服務器的工具軟件沙廉。
Ansible是一個用來批量部署遠程主機上服務的工具拘荡。這里“遠程主機(Remote Host)”是指任
何可以通過SSH登錄的主機,所以它既可以是遠程虛擬機或物理機撬陵,也可以是本地主機珊皿。
Ansible通過SSH協(xié)議實現(xiàn)管理節(jié)點與遠程節(jié)點之間的通信。理論上來說巨税,只要能通過SSH登錄到
遠程主機來完成的操作蟋定,都可以通過Ansible實現(xiàn)批量自動化操作。
涉及管理操作:復制文件草添、安裝服務驶兜、服務啟動停止管理、配置管理等等。
5.為什么要用批量管理工具運維抄淑?
提高效率屠凶,百度幾萬臺服務器,阿里幾十萬臺服務器蝇狼。
如何省錢阅畴?
SSD+SATA 熱點存儲 15 15 7?
6.Ansible特點
Ansible基于Python語言實現(xiàn),由Paramiko和PyYAML兩個關鍵模塊構(gòu)建迅耘。
Shell贱枣、Python是Linux運維學員必會的兩門語言。
1)安裝部署過程特別簡單颤专,學習曲線很平坦纽哥。
2)不需要單獨安裝客戶端,只是利用現(xiàn)有的SSHD服務(協(xié)議)即可栖秕。
3)不需要服務端(no servers)春塌。
4)ansible playbook,采用yaml配置簇捍,提前編排自動化任務只壳。
5)ansible功能模塊較多,對于自動化的場景支持豐富暑塑。
官方:http://docs.ansible.com
7.Ansible架構(gòu)介紹
1吼句、連接插件connectior plugins用于連接主機 用來連接被管理端
2、核心模塊 core modules 連接主機實現(xiàn)操作事格, 它依賴于具體的模塊來做具體的事情
3惕艳、自定義模塊 custom modules,根據(jù)自己的需求編寫具體的模塊
4驹愚、插件 plugins远搪,完成模塊功能的補充
5、劇本 playbooks逢捺,ansible的配置文件,將多個任務定義在劇本中谁鳍,由ansible自動執(zhí)行
6、主機清單 inventor蒸甜,定義ansible需要操作主機的范圍
最重要的一點是 ansible是模塊化的 它所有的操作都依賴于模塊
(懂Python可以二次開發(fā))
8.ansible實踐環(huán)境準備
61(m01)====>31(nfs01)
61(m01) ====>41(backup)
9.安裝ansible
m01管理機:
yum install epel-release -y
yum install ansible -y
#如果有l(wèi)ibselinux-python就不執(zhí)行下面的命令了棠耕。
#rpm -qa |grep libselinux-python
#yum install libselinux-python -y
其他所有機器:
#rpm -qa |grep libselinux-python
#yum install libselinux-python -y
id_rsa id_rsa.pub known_hosts
密鑰? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 公鑰? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 連過的機器記錄
1.ssh-keygen非交互式建秘創(chuàng)鑰對:
具體命令:ssh-keygen -t rsa -q -f /root/.ssh/id_rsa -P ""
參數(shù)講解:
ssh-keygen:密鑰對創(chuàng)建工具
[-P old_passphrase]? 密碼
[-f output_keyfile]? 輸出的秘鑰文件
? ? ? ? [-q]? ? 不輸出信息? ? ?
[-t dsa ]? 指定秘鑰類型。
2.ssh-copy-id不需要提示yes/no分發(fā)秘鑰
具體命令:ssh-copy-id -f -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no 172.16.1.8
參數(shù)講解:
ssh-copy-id? -f? -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no root172.16.1.8
ssh-copy-id [-f] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
說明:
-f: force mode 強制
[-i [identity_file]] 指定秘鑰文件
[[-o <ssh -o options>] ...] 指定ssh參數(shù)選項柠新。
3.sshpass工具:指定密碼非人工交互分發(fā)秘鑰
sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.7
4.一鍵配置實踐把web02作為分發(fā)服務器:
ssh-keygen -f ~/.ssh/id_rsa? -P '' -q
============批量生成密鑰對
ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.7
============不需要提示yes/no分發(fā)秘鑰給172.16.1.7
sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.7=
===========指定密碼不需要提示yes/no分發(fā)秘鑰給172.16.1.7
ansible自動化管理實踐:
ansible命令參數(shù)
-m MODULE_NAME, 模塊名字窍荧,默認command
-a MODULE_ARGS, 模塊參數(shù)
-f FORKS ? ? 并發(fā)進程數(shù),默認5個恨憎。
-i INVENTORY(default=/etc/ansible/hosts)指定主機列表文件
ansible關閉ssh首次連接時yes/no提示
使用ssh連接時蕊退,可以使用-o參數(shù)將StrictHostKeyChecking設置為no郊楣,
避免使用ssh連接時避免首次連接時讓輸入yes/no部分的提示缭贡。
方法1:修改 /etc/ansible/ansible.cfg中的374行
374行改為:
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no
方法2:修改 /etc/ansible/ansible.cfg中的71行
71行的注釋取消:host_key_checking = False
ssh-keygen -t rsa -q -f /root/.ssh/id_rsa -P ""
for ip in 8 7 31 41; do? sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.$ip; done
結(jié)論:使用SSH連接:
密碼認證 host里主機后面加密碼? ? ? ? Paramiko模塊 重點:
秘鑰認證:提前發(fā)公鑰懒浮,才能用ansible.? SSHPASS工具
command模塊 *****
參數(shù):chdir=/tmp配置相當于cd /tmp
[root@m01 ~]# ansible oldboy? -m command -a "pwd chdir=/etc"
ansible oldboy? -m shell -a "cd /etc/;pwd"
參數(shù):creates=/etc? 相當于條件測試? [ -e /etc ]||pwd 和下面removes相反
[root@m01 ~]# ansible oldboy? -m command -a "pwd creates=/etc"
參數(shù):removes=/root 相當于條件測試 [ -e /root ]&&ls /root
ansible oldboy? -m command -a "ls /root removes=/root"
ansible oldboy? -m shell -a "[ -d /etc ]||pwd"
[root@m01 ~]# ansible oldboy? -m command -a "cat /etc/hosts removes=/etc/hosts"
參數(shù):warn=False 忽略警告
[root@m01 ~]# ansible oldboy? -m command -a "chmod 000 /etc/hosts warn=False"
特殊:command不支持的東西叼耙,例如 > < | &等 $HOME猛计,替代方案用shell模塊
列如:
ansible oldboy -m shell -a "ps -ef|grep ssh"
ansible oldboy -m shell -a "echo oldboy >/tmp/a.log"