1. 程式人生 > >大型架構技術及其配置(ansible)

大型架構技術及其配置(ansible)

authorize 8.4 pts sys -s 刪除 正則 無法 第一次

ansible 01
1 ansible 管理機器
2 web1 托管機器
3 web2 托管機器
4 db1 托管機器
5 db2 托管機器
6 cache 托管機器

配置一個 yum 源,使用 CentOS-7-x86_64-Everything-1511.iso
mount -t iso9660 -o ro,loop /ISO/CentOS-7-x86_64-Everything-1511.iso /var/ftp/rhel7

在創建一個目錄用於存放 ansible 的安裝包文件
mkdir /var/ftp/ansible
拷貝安裝文件到該目錄,後創建索引

cd /var/ftp/ansible
createrepo .

配置 ansible 管理機器,添加 repo 文件
[ansible]
name=ansible
baseurl=ftp://192.168.4.254/ansible
enabled=1
gpgcheck=0

在 ansible 管理機器上
yum clean all
yum install -y ansible

安裝完成以後執行,沒有報錯,正確顯示版本即可
ansible --version

ansible 的配置文件是 ansible.cfg
ansible.cfg 的查找順序是
1 ANSIBLE_CONFIG 變量定義的配置文件
2 當前目錄下的 ./ansible.cfg 文件

3 前用戶家目錄下 ~/ansible.cfg 文件
4 /etc/ansible/ansible.cfg 文件

ansible.cfg 中 inventony 指定主機分組文件的路徑和地址,默認分組文件 hosts
hosts 的配置
[web]
web[1:2]

[db]
db1
db2

[app:children] # 指定子組
web
db

[app:vars]
ansible_ssh_user="root"
ansible_ssh_pass="123456"

[other]
cache ansible_ssh_user="root" ansible_ssh_pass="123456"

ansible 命令基礎
ansible 主機分組 -m 模塊 -a ‘命令和參數‘

創建密鑰對 id_rsa 是私鑰, id_rsa.pub 是公鑰
ssh-keygen -t rsa -b 2048 -N ‘‘

給所有主機部署密鑰
ansible all -m authorized_key -a "user=root exclusive=true manage_dir=true key=‘$(< /root/.ssh/id_rsa.pub)‘" -k

模塊
ansible-doc 查看幫助,必須掌握
ansible-doc -l 列出所有模塊
ansible-doc 模塊名 查看該模塊的幫助信息

ping
沒有參數,檢測主機的連通性,與 ping 無關,主要檢測 ssh 是否可以連接

command | shell | raw
command 是默認模塊,沒有啟用 shell ,所有shell 相關特性命令無法使用,例如 < > | &
raw 模塊,沒有 chdir create remove 等參數,能執行大部分操作
shell 模塊,啟動 /bin/sh 運行命令,可以執行所有操作

測試
ansible cache -m command -a ‘chdir=/tmp touch f1‘ 創建成功
ansible cache -m shell -a ‘chdir=/tmp touch f2‘ 創建成功
ansible cache -m raw -a ‘chdir=/tmp touch f3‘ 文件可以創建,但無法切換目錄,文件在用戶家目錄下生成

復雜操作怎麽辦,使用腳本來解決
#!/bin/bash
adduser zhang3 # 創建用戶 zhang3
echo 123456 |passwd --stdin zhang3 # 修改密碼
chage -d 0 zhang3 # 第一次登錄必須修改密碼

ansible all -m scriopt -a "urscriopt.sh"

copy lineinfile replace 模塊
copy 把文件發布到遠程其他主機上面
lineinfile 修改一個文件的一行,以行為基礎,整行修改
replace 修改文件的某一部分,以正則表達式匹配為基礎修改

利用 copy 模塊修改所有機器的 /etc/resolv.conf 為 nameserver 8.8.8.8
利用 lineinfile 修改 /etc/sysconfig/network-scriopts/ifcfg-eth0
PEERDNS=yes|no
利用 replace 修改 /etc/sysconfig/network-scriopts/ifcfg-eth0
PEERROUTES=yes|no

yum 模塊 installed 安裝, removed 刪除
ansible other -m yum -a ‘name="lrzsz" state=removed‘
ansible other -m yum -a ‘name="lftp" state=removed‘
ansible other -m yum -a ‘name="lrzsz,lftp" state=installed‘

service 模塊 name 指定服務名稱,enabled= yes|no 設置開機啟動, state=stopped|started 啟動關閉服務
設置 sshd 服務開啟啟動,並啟動服務
ansible other -m service -a ‘name="sshd" enabled="yes" state="started"‘

setup 模塊,查看信息 filter 過濾指定的關鍵字

大型架構技術及其配置(ansible)