Ansible--批量 linux/unix服務器管理工具


理論部分:

  1. 常用的自動化運維工具:

Puppet

—基於 Ruby 開發,采用 C/S 架構,擴展性強,基於 SSL,遠程命令執行相對較弱

SaltStack

—基於 Python 開發,采用 C/S 架構,相對 puppet 更輕量級,配置語法使用 YMAL,使得配置腳本更簡單

Ansible

—基於 Python paramiko 開發,分布式,無需客戶端,輕量級,配置語法使用 YMAL 及 Jinja2 模板語言,更強的遠程命令執行操作

 

 

其他 DevOps 請參看:https://github.com/geekwolf/sa-scripts/blob/master/devops.md

 

2.ansible簡介:

Ansible 是一個簡單的自動化運維管理工具,可以用來自動化部署應用、配置、編排 task(持續交付、無宕機更新等),采用 paramiko 協議庫(fabric 也使用這個),通過 SSH 或者 ZeroMQ 等連接主機,大概每 2 個月發布一個主版本

簡單的說:    讓我們自動化部署APP;自動化管理配置項;自動化的持續交付;自動化的(AWS)雲服務管理。 批量的在遠程服務器上執行命令 。

Ansible則是提供了一套簡單的流程,你要按照它的流程來做,就能輕松完成任務.

 

3.Ansible 工作機制:

基於 paramiko 開發的。這是一個純Python實現的ssh協議庫,Ansible 在管理節點將 Ansible 模塊通過 SSH 協議(或者 Kerberos、LDAP)推送到被管理端執行,執行完之后自動刪除,可以使用 SVN 等來管理自定義模塊及編排

4.Ansible 的組成:

由 5 個部分組成:

Ansible:核心

Modules:包括 Ansible 自帶的核心模塊及自定義模塊

Plugins:完成模塊功能的補充,包括連接插件、郵件插件等

Playbooks:網上很多翻譯為劇本,個人覺得理解為編排更為合理;定義 Ansible 多任務配置文件,有 Ansible 自動執行

Inventory:定義 Ansible 管理主機的清單

 

5.ansible的優點: 
1、輕量級,他不需要去客戶端安裝agent,更新時,只需要在操作機上進行一次更新即可.
2、批量任務執行可以寫成腳本,而且不用分發到遠程就可以執行. 
3、使用python編寫的,維護更簡單,ruby語法過於復雜 .
4、支持sudo.

 

 

 

實驗部分:

1.安裝ansible

實驗環境 :

角色

Hostname

SystemRelease

IP address

node1

node1.server.com

Rhel-6.5_x86_64

192.168.1.63

node2

node2.server.com

Rhel-6.5_x86_64

192.168.1.64

server

ansible.server.com

CentOS-6.5_x86_64

192.168.1.20

 

 

准備工作:

關閉iptables:

各個服務器節點的配置

 

1、節點1的配置,修改主機名

[root@xuegod63 ~]# service iptables stop

[root@xuegod63 ~]# chkconfig iptables off

[root@xuegod63 ~]# hostname node1.server.com

[root@xuegod63 ~]# vim /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=node1.server.com

logout 注銷 重新登錄 或者是reboot 重啟

 

2、節點2的配置,修改主機名:

[root@xuegod64 ~]# service iptables stop

[root@xuegod64 ~]# chkconfig iptables off

[root@xuegod64 ~]# hostname node2.server.com

[root@xuegod64 ~]# vim /etc/sysconfig/network

//添加如下內容:

NETWORKING=yes

HOSTNAME=node2.server.com

logout 注銷 重新登錄 或者是reboot 重啟

在Ansible服務器配置:

 

  1. 防火牆和主機名配置

[root@Master ~]# service iptables stop

[root@Master ~]# chkconfig iptables off

[root@Master ~]# hostname ansible.server.com

[root@Master ~]# vim /etc/sysconfig/network

添加:

NETWORKING=yes

HOSTNAME=ansible.server.com

重啟或者是logout

 

  1. 添加hosts解析

    [root@ansible ~]# vim /etc/hosts #編輯hosts文件

    [root@ansible ~]# tail -3 /etc/hosts

    192.168.1.63 node1.server.com #node1

    192.168.1.64 node2.server.com #node2

    192.168.1.20 ansible.server.com #ansible

測試連通性

[root@ansible ~]# ping node1.server.com

[root@ansible ~]# ping node2.server.com

 

  1. 配置EPEL源

[root@ansible ~]#

rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

[root@ansible ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

[root@ansible ~]# yum install ansible -y #安裝ansible

2.ansible的配置文件及作用

[root@ansible ~]# rpm -ql ansible | more

/etc/ansible

/etc/ansible/ansible.cfg #主配置文件

/etc/ansible/hosts #節點主機列表

/etc/ansible/roles

/usr/bin/ansible

/usr/bin/ansible-console

/usr/bin/ansible-doc

/usr/bin/ansible-galaxy

/usr/bin/ansible-playbook

/usr/bin/ansible-pull

/usr/bin/ansible-vault

 

3. 編輯/etc/ansible/hosts(節點配置文件):

[root@ansible ~]# vim /etc/ansible/hosts

[root@ansible ~]# tail -3 /etc/ansible/hosts

[webserver]

node1.server.com

node2.server.com

//其他內容可以全部注釋掉

 

  1. 配置ansible端能基於密鑰認證的方式聯系各被管理節點。

[root@ansible ~]# ssh-keygen #生成密鑰對

5、把密鑰發往各個節點服務器上:

[root@ansible ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1.server.com

[root@ansible ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2.server.com

 

 

Ansible簡單測試

ansible命令

格式:ansible  節點名稱   [ -m  模塊]   -a  命令參數

例:

  1、查看各個節點的時間

[root@ansible ~]# ansible all -a date

[root@ansible ~]# ansible all -m command -a date

//以上兩條命令結果是一樣的,因為默認調用 command 模塊,所以可以省略, all 表示所有節點, -a 后面是參數

2、查看各個節點在線情況

[root@ansible ~]# ansible all -m ping //內建的ping模塊

3、在各個節點輸出指定信息

[root@ansible ~]# ansible all -a "/bin/echo hello,world" #輸出信息

[root@ansible ~]# ansible all -a "/bin/df -h" #輸出掛載信息

[root@ansible ~]# ansible all -a "/sbin/ip addr show dev eth0 " #查看各節點的 eth0 網卡信息

 

Ansible-playbook

 

1、Playbook是通過yaml文件來配置實現的,先來介紹下yaml語法!

      YAML的語法和其他高階語言類似,並且可以簡單表達清單、散列表、標量等數據結構。\

其結構(Structure)通過空格來展示,序列(Sequence)里的項用"-"來代表,Map里的鍵值對用":"分隔。YAML文件擴展名通常為.yaml,如example.yaml

 

2、Playbook可以用來管理復雜任務

     對於需反復執行的、較為復雜的任務,我們可以通過定義 Playbook 來搞定。Playbook 是 Ansible 真正強大的地方,它允許使用變量、條件、循環、以及模板,也能通過角色 及包含指令來重用既有內容。下面我們來看看一些具體的實例。

 

1:批量安裝mysql-server軟件:

[root@ansible ~]# vim mysql-server.yaml #建立mysql-server .yaml文件

內容如下: (注意語法格式)

選項解析:

hosts:webserver         #指定要執行指定任務的主機,其可以是一個或多個由冒號分隔主機組

remote_user:root         #用於指定遠程主機上的執行任務的用戶

tasks:                       #  任務

-name:mysql-server installing    # 給這個任務起的名字

yum:name=php           #利用yum模塊,安裝軟件的包名為mysql-server

state=present                 #狀態為安裝  

state=absent                  #狀態為卸載

檢查node是否已經安裝mysql-server

[root@ansible ~]# ansible all -a "/bin/rpm -q mysql-server "

 

[root@ansible ~]# ansible-playbook mysql-server.yaml

看到結果,ok=2    changed=1 說明客戶機上的mysql-server安裝成功了!

驗證一下 mysql-server是否成功

[root@ansible ~]# ansible all -a "/bin/rpm -q mysql-server "

[root@ansible ~]# ansible all -a "/sbin/service mysqld start " #啟動mysqld

 

 

案例2 創建crontab計划

1.建立cron.yaml,讓每月10號來運行/root/backup.sh腳本

[root@ansible ~]# vim crond.yaml

內容如下:

  1. 執行

    [root@ansible ~]# ansible-playbook crond.yaml

看到結果,ok=2    changed=1 說明客戶機上的crontab計划創建成功了!

  1. [root@ansible ~]# ansible all -a 'crontab -l ' #查看各個節點crontab:

注:

"ansible-doc -l" 命令來查看它內置的有哪些模塊。

"ansible-doc  模塊名"  命令來查看具體模塊的詳細用法。

 

 

使用ansible批量的添加用戶

 

方法一:直接使用ansible命令

[root@ansible ~]# openssl passwd -salt -l "abc123"

-luVlrZexUGHM

[root@ansible ~]# ansible all -m user -a "name=baigujing password=-luVlrZexUGHM shell=/bin/bash " -u root

 

方法二:定義主機清單在使用ansible命令

[root@ansible ~]# openssl passwd -salt -l "abc123"

-luVlrZexUGHM

[root@ansible ~]# vim hosts #添加主機地址

 

[root@ansible ~]# ansible -i hosts webserver -m user -a "name=tester password=-luVlrZexUGHMshell=/bin/bash " -u root

參數解釋:

-i #指定 inventory文件的位置;

webserver #清單文件中的主機組名稱

-m #指定模塊,不加此選項默認使用command模塊

user #添加用戶的模塊

-a #編寫模塊內支持的指定

-u #指定遠程用戶

注意:密碼不能是明文 注意是password 不是passwd

.注意password必須是密文的,直接添加到/etc/shadow文件中

 

創建用戶組:

ansible -i test puppet -m group -a "name=test state=present" -u root

#建立用戶組,使用的是新的模塊 group

刪除用戶:

ansible -i hosts webserver -m user -a "name=tester remove=yes state=absent" -u root

 

 

 

方法三:編寫yaml文件

1,生成密鑰

[root@ansible ~]# openssl passwd -salt -l "abc123"

-luVlrZexUGHM #生成salt密鑰

 

2.編輯yaml文件

[root@ansible ~]# vim useradd.yaml #編輯文件

[root@ansible ~]# cat useradd.yaml #查看內容

- hosts: webserver #定義主機組

user: root #遠程鏈接用戶

vars:

user: jerry #添加的用戶名

tasks: #任務

- name: add user #任務名稱

action: user name={{ user }} password=-luVlrZexUGHM shell=/bin/bash home=/home/{{ user }} #指定用戶相關的信息 密碼 必須是密文salt加密 登錄shell 宿主目錄

 

3.執行yaml文件

 

[root@ansible ~]# ansible-playbook useradd.yaml

成功

    1. 客戶端節點驗證

      [root@ansible ~]# ansible all -a "/usr/bin/tail -1 /etc/shadow"

      用戶名jerry 沒錯 密碼就是通過第一步生成的 abc123

       

      切換用戶驗證

      輸入明文abc123 即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM