如何使用 Ansible 配置 IT 自动化管理
本文提供了对 Ansible 技术的基本了解以及安装步骤。Ansible 是一款开源的 IT 自动化软件,用于在客户端或节点上配置、管理和安装软件,无需任何停机时间,也不需要在节点上安装代理。它使用 SSH 与客户端通信。
目前,大多数 IT 自动化工具都在远程主机上作为代理运行,但 Ansible 只需要 SSH 连接、用户和 Python(2.4 或更高版本)。
环境设置详情
Server Operating System: Centos 6.7 IP Address: 192.168.87.140 Host-name: ansible.hanuman.com User: root Remote Nodes Node 1: 192.168.87.156 Node 2: 192.168.87.157
安装 Ansible 服务器
对于基于 RPB 的克隆,没有官方的 Ansible 存储库,但我们可以通过使用当前支持的 Fedora 发行版启用 epel 存储库来安装 Ansible,方法是在 RHEL/CentOS 6.X、7.X 上使用。
# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm Output: Retrieving http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.no arch.rpm warning: /var/tmp/rpm-tmp.nHoRHj: Header V3 RSA/SHA256 Signature, key ID 0608b89 5: NOKEY Preparing... ########################################### [100%] package epel-release-6-8.noarch is installed
配置 epel 存储库后,您现在可以使用以下命令使用 yum 安装 Ansible。
# sudo yum install ansible -y Output: Loaded plugins: fastestmirror, security Setting up Install Process Determining fastest mirrors epel/metalink | 4.3 kB 00:00 * base: centosmirror.go4hosting.in * epel: epel.mirror.net.in * extras: centosmirror.go4hosting.in * updates: centosmirror.go4hosting.in Resolving Dependencies . . . Installed: ansible.noarch 0:1.9.4-1.el6 Dependency Installed: PyYAML.x86_64 0:3.10-3.1.el6 libyaml.x86_64 0:0.1.3-4.el6_6 python-babel.noarch 0:0.9.4-5.1.el6 python-crypto2.6.x86_64 0:2.6.1-2.el6 python-httplib2.noarch 0:0.7.7-1.el6 python-jinja2.x86_64 0:2.2.1-2.el6_5 python-keyczar.noarch 0:0.71c-1.el6 python-pyasn1.noarch 0:0.0.12a-1.el6 python-simplejson.x86_64 0:2.0.9-3.1.el6 sshpass.x86_64 0:1.05-1.el6 Complete!
验证安装
配置 epel 存储库后,您现在可以使用以下命令使用 yum 安装 Ansible。
# ansible --version ansible 1.9.4 configured module search path = None
准备 SSH 密钥到远程主机
要从 Ansible 服务器执行任何部署或升级,每个主机都应该有一个用户帐户进行通信。此外,我们需要将 ssh 密钥从 Anisble 服务器复制到远程主机以实现无密码连接。
首先,让我们使用以下命令创建一个 SSH 密钥,并将密钥复制到远程主机。
# ssh-keygen -t rsa -b 4096 -C "ansible.hanuman.com"
生成公钥/私钥 rsa 密钥对
Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in ansible_key. Your public key has been saved in ansible_key.pub. The key fingerprint is: 28:ae:0c:8d:91:0a:fa:ac:2f:e2:8c:e5:fd:28:4b:c6 ansible.hanuman.com The key's randomart image is: +--[ RSA 4096]----+ | | | | | | | . . | |+ . . S | |+= . . | |= E . | |=X.o . | |=*Ooo.. | +-----------------+
成功创建 SSH 密钥后,现在将创建的密钥复制到所有两个远程服务器,我们需要一个用户在这里进行 Ansible 演示,我使用 root 用户,我们可以从中执行 Ansible 任务。
# ssh-copy-id [email protected] Output: [email protected]'s password: Now try logging into the machine, with "ssh '[email protected]'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. # ssh-copy-id [email protected] Output: [email protected]'s password: Now try logging into the machine, with "ssh '[email protected]'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
复制 SSH 密钥到第二个远程主机
将所有 SSH 密钥复制到远程主机后,现在在所有远程主机上执行 ssh 密钥身份验证,以检查身份验证是否有效,运行以下命令进行测试。
# ssh [email protected] [ansible@localhost ~]# Connection to 192.168.87.156 closed. # ssh [email protected] [ansible@localhost ~]#
为远程主机创建清单文件
清单文件,此文件包含有关需要从本地连接到远程的主机的信息。默认配置文件位于 /etc/ansible/hosts 下。
现在,我们将这两个节点添加到配置文件中。使用您喜欢的编辑器打开并编辑文件,这里我们使用 vim。
# sudo vim /etc/ansible/hosts Add the following two hosts IP address.. [webservers] 192.168.87.156 192.168.87.157
注意 - [webservers] 中的括号表示组名,用于对节点进行分类和分组,以及控制何时以及为什么进行控制。
测试 Ansible 是否正常工作
现在是时候检查我们所有的服务器了,只需从我们的 Ansible 服务器执行 ping 操作即可。要执行此操作,我们需要使用命令“ansible”以及“-m”(模块)和“-all”(服务器组)选项。
# ansible -m ping webservers Output: [root@localhost ~]# ansible -m ping webservers 192.168.87.157 | success >> { "changed": false, "ping": "pong" } 192.168.87.156 | success >> { "changed": false, "ping": "pong" }
或
# ansible -m ping -all Output: [root@localhost ~]# ansible -m ping webservers 192.168.87.157 | success >> { "changed": false, "ping": "pong" } 192.168.87.156 | success >> { "changed": false, "ping": "pong" }
现在,我们在这里使用另一个名为“command”的模块,该模块用于一次性在所有选定的远程主机上执行一系列 shell 命令(如 df、free、uptime 等)。为了演示,您可以执行以下命令。
检查所有远程主机上的分区
# ansible -m command -a "df -h" webservers Output: 192.168.87.156 | success | rc=0 >> Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 18G 2.0G 15G 12% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 477M 42M 411M 10% /boot 192.168.87.157 | success | rc=0 >> Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 18G 2.0G 15G 12% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 477M 42M 411M 10% /boot
检查所有 Web 服务器的内存使用情况
# ansible -m command -a "free -mt" webservers Output: 192.168.87.156 | success | rc=0 >> total used free shared buffers cached Mem: 981 528 453 0 39 322 -/+ buffers/cache: 166 815 Swap: 2047 0 2047 Total: 3029 528 2501 192.168.87.157 | success | rc=0 >> total used free shared buffers cached Mem: 981 526 455 0 39 322 -/+ buffers/cache: 164 817 Swap: 2047 0 2047 Total: 3029 526 2503
将输出重定向到文件
# ansible -m shell -a "service httpd status" webservers > service_status.txt Output: # cat service_status.txt 192.168.87.156 | FAILED | rc=3 >> httpd is stopped 192.168.87.157 | FAILED | rc=3 >> httpd is stopped
关闭远程服务器
#ansible -m shell -a "init 0" webservers OutPut: 192.168.87.157 | success | rc=0 >> 192.168.87.156 | success | rc=0 >>
Ansible 是一款强大的 IT 自动化工具,大多数 Linux 管理员都使用它来部署应用程序和一次性管理服务器。在 Puppet、Chef 等其他任何自动化工具中,Ansible 非常有趣且易于配置,非常适合简单的环境。