大型網站架構與自動化運維——ansible

                                                   自動化運維之Ansible

一、概述
1、分類
(1)需代理(基於專用Agent程序):Puppet、Func、Zabbix
(2)不需代理(可基於SSH完成):Ansible、Fabric等

2、Puppet
基於Ruby研發,支持Linux、Unix、Windows平臺,可針對用戶、系統服務、配置文件、軟件包等進行管理,有很強擴展性,但遠程執行命令相對較弱

3、SaltStack
基於Python研發,允許對多個操作系統創建統一的管理系統,比Puppet輕量級

4、Ansible
基於Puthon研發,視線裏批量運行命令、部署程序、配置系統等功能

二、Anisble核心組件
1、Ansible core:核心引擎
2、Host inventory:主機清單,用來定義所管理的主機,默認在Ansible的hosts配置文件中定義
3、Connection plugins:連接插件,負責和被管理主機實現通信。除SSH連接外還支持其他連接方式
4、Playbooks:腳本,用來集中定義Ansible任務的配置文件,即將多個任務定義在一個劇本中執行
5、Core modules:核心模塊,是Ansible自帶模塊,使用這些模塊將資源分發到被管理主機,使其執行特定任務或匹配特定狀態
6、Custom modules:自定義模塊,用於完成模塊功能的補充,可記住相關插件完成記錄日誌、發送郵件等功能

三、安裝部署Ansible服務
1、安裝Ansible
(1)配置yum的epel源(略)
(2)yum -y install ansible

2、配置主機清單
vim /etc/ansible/hosts
[groupname]
192.168.11.151
[groupname2]
192.168.11.152

3、設置SSH無密碼登錄
ssh-keygen -t rsa
ssh-copy-ip [email protected]
ssh-copy-ip [email protected]

四、Ansible基礎命令
命令格式:ansible <host-pattern> [-m module_name] [-a args]
查看模塊幫助信息:ansible-doc -s(指定模塊) -l(所有模塊)

1、command模塊(默認模塊):命令模塊
(1)指定IP運行
ansible 192.168.11.151 -m command -a ‘date’
(2)指定主機分類運行
ansible nodes -a ‘date’
(3)所有主機運行
ansible all -a ‘date’

2、cron模塊:計劃任務模塊,persent爲添加,absent爲刪除
(1)添加計劃任務
ansible nodes -m cron -a ’minute=”*/10” job=”/bin/echo hello” name=”test job”’
(2)刪除計劃任務
ansible nodes -m cron -a ‘minut=”*/10” job=”/bin/echo hello” name=”test job” state=absent’

3、user模塊:創建、修改、刪除用戶,用name指定用戶名
(1)創建用戶
ansible nodes -m user -a ‘name=”user1”’
(2)刪除用戶
ansible nodes -m user -a ‘name=”user1” state=absent’

4、group模塊:管理用戶組
(1)創建組並添加用戶
ansible nodes -m group -a ‘name=mysql gid=306 system=yes’
ansible nodes -m user -a ‘name=mysql uid=306 system=yes group=mysql’

5、copy模塊:文件複製及下發,src指定源文件,dest定義被管理機文件路徑,content指定信息內容生成目標文件
(1)複製文件並設置用戶及權限
ansible nodes -m copy -a ‘src=/etc/fstab dest=/tem/fatab.ansible owner=root mode=640’
(2)將文本寫入目標機文件
ansible nodes -m copy -a ‘content=”Hello” dest=/tem/fatab.ansible’
(3)如被管理機開啓了Selinux,則需要在其上面安裝libselinux-python軟件包

6、file模塊:用於設置文件屬性,src指定源文件路徑,path指定目標文件路徑,name或dest來替換創建文件的符號鏈接
(1)設置文件屬主、屬組及權限
ansible nodes -m file -a ‘owner=mysql group=mysql mode=644 path=/tem/fstab.ansible’
(2)設置文件連接
ansible nodes -m file -a ‘path=/tem/fstab.link src=/tem/fstab.ansible state=link’

7、ping模塊:檢測連通性
    ansible all -m ping

8、service模塊:管理控制服務運行狀態,enabled表示是否開機啓動(true、false),name定義服務名稱,state指定服務狀態(started、stoped、restarted)
(1)查看服務狀態
ansible nodes -a ‘service httpd status‘
(2)啓動服務並設置爲開機啓動
ansible nodes -m service -a ‘enabled=true name=httpd state=started’

9、shell模塊:運行命令並支持管道符等功能
(1)無交互式設置用戶密碼
ansible nodes -m shell -a ‘echo 111111 | passwd --stdin user1’

10、script模塊:將本地腳本複製到被管理機進行運行(使用相對路徑指定腳本)
(1)ansible nodes -m script -a ‘test.sh’

11、yum模塊:yum安裝或卸載軟件包,name指定軟件包,state指定安裝包狀態(present、absent)
(1)安裝軟件
ansible nodes -m yum -a ‘name=zsh’
(2)卸載軟件
ansible nodes -m yum -a ‘name=zsh state=absent’

12、setup模塊:蒐集、查看被管理機的facts
    ansible nodes -m setup

五、YAML介紹
yaml是一種用來表達資料序列的格式,由於參考了多種語言,所以具有很高的可讀性
1、特性
(1)很好的可讀性,易於實現
(2)表達能力強,擴展性好
(3)和腳本語言的交互性好
(4)有一個一致的信息模型
(5)可以基於流來處理

2、語法
    和其他語言類似,也可以表達散列表、標量等數據結構。其中結構通過空格來展示:序列(sequence)裏的項用-來代表;Map裏的鍵值對用:來分隔。

3、常用數據類型
(1)list(列表)
列表的所有元素均使用-開頭,如:
-Apple
-Orange
(2)dictionary(字典)
字典通過key和value進行標識,如:
name:Example Dictionary
Job:Developer
Skill:Elite
也可以使用key:value的形式放置於{}中進行標識,如:
{name:Example Dictionary,Job:Developer,Skill:Elite}

六、Ansible基礎元素介紹
1、Inventory(主機清單)
    默認主機清單爲/etc/ansible/hosts文件。主機清單可設置爲多個,也可以通過Dynamic Inventory動態生成。實例:
    [nodes]
    192.168.11.151
    192.168.11.152
    如主機名遵循類似命名規則,可使用列表方式標識主機,如
    [nodes]
    www[01:05].example.org
    db-[a:f].example.org
    Inventory中的重要概念:
(1)主機變量:可以在定義主機時設置,以便在後續Playbook中使用
[nodes]
192.168.11.151 http_port=80 maxRequestsChild=808
(2)組變量:給指定主機設置可以在Playbook中直接使用的變量
[servers-vars]
ntp_server=ntp.example.org
nfs_server=nfs.example.org
(3)組嵌套
組可以嵌套其他組,也可以向組中的主機指定變量。不過這些變量只能在ansible-playbook工具中使用
[node1]
192.168.11.151
[nodes:children]
node1
(4)Inventory參數
ansible_ssh_port:指定ssh端口
ansible_ssh_user:指定用戶
ansible_ssh_pass:指定用戶登錄認證密碼,明文密碼不安全
ansible_sudo_pass:指明sudo時的密碼
ansible_connection:SSH連接類型(local、ssh、paramiko)
ansible_ssh_private_key_file:公鑰文件
ansible_shell_type:指定shell解釋器,默認sh
ansible_python_interpreter:指定python解釋器的路徑
ansible \_\*\_interpreter:指定主機上其他語法解釋器的路徑

2、變量
(1)通過命令行傳遞變量
ansible-playbook test.yml -e “hosts-www user-mageedu”
(2)通過roles傳遞變量
roles:
  - common
  - {role: foo_app_instance,dir:’/web/htdocs/a.com’,port:8080}

3、條件測試
(1)when
在task之後添加when即可進行條件測試,when支持jinjia2表達語句
task:
  - name: shutdown
    command: shutdown -h 0
    when: ansible_os_family - “Debian”
(2)迭代
將需要迭代的內容定義爲item變量並引用,然後通過with_items指明迭代的元素
user: name={{ item }}
with_items:
  - user1
  - user2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章