注意:
在添加被 Ansible 管理的服务器前要先安装 Ansible
正文:
步骤一:规划拓扑
1.1 服务器列表
管理服务器 IP 地址:192.168.100.100
被管理的服务器 1 IP 地址:192.168.100.101
被管理的服务器 2 IP 地址:192.168.100.102
被管理的服务器 3 IP 地址:192.168.100.103
被管理的服务器 4 IP 地址:192.168.100.104
被管理的服务器 3 IP 地址:192.168.100.105
被管理的服务器 4 IP 地址:192.168.100.106
被管理的服务器 4 IP 地址:192.168.100.107
1.2 服务器列表简介
1) 管理人员只用 ssh 到管理服务器就可以通过 Ansible 管理其他所有的被管理服务器
2) 将 192.168.100.101 至 192.168.100.110 视作 web1 至 web10 ,它们属于 web 组
3) 将 192.168.100.111 至 192.168.100.115 视作 db1 至 db5 ,它们属于 db 组
4) 将 192.168.100.107 视作新添加的要被管理的服务器 ,它不属于任何组
步骤二:实现管理服务器登录被管理的服务器
2.1 在管理服务器上添加被管理服务器 IP 地址和服务器名的对应关系
# vim /etc/hosts
添加以下内容:
......
192.168.100.100 ansible
192.168.100.101 web1
192.168.100.102 web2
192.168.100.103 web3
192.168.100.104 db1
192.168.100.105 db2
192.168.100.106 db3
2.2 实现管理服务器登录被管理的服务器
2.2.1 让管理服务器无密钥登录要被管理的服务器
2.2.1.1 在管理服务器上生成 SSH 公钥和私钥
# ssh-keygen
Generating public/private rsa key pair.
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 /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:GGqyQU4+u+eNTaWN4SILhm3QN08ZR3jPWC+quRlsP6c root@test1
The key's randomart image is:
+---[RSA 2048]----+
| .. |
| ... . |
| o o..= . |
| * . *. + . |
|. B = = S. . |
|.o O * *. |
|o.* . Xo. |
|.o +.Bo+. . |
| ooo =.E+ |
+----[SHA256]-----+
2.2.1.2 将管理服务器生成的 SSH 公钥复制到要被管理的服务器里
# for i in {100..107} ; do ssh-copy-id 192.168.100.$i ; done
2.3 让管理服务器通过密钥登录要被管理的服务器
2.3.1 指定管理服务器的 Ansible 远程用户
# vim /etc/ansible/ansible.cfg
将以下内容:
......
# remote_user = root
......
修改为:
......
remote_user = root
......
2.3.2 在管理服务器上 Ansible 的服务器列表里给指定的服务器添加登录密码
# vim /etc/ansible/hosts
创建以下内容:
[all:vars]
ansible_password=redhat
步骤三:在管理服务器的 Ansible 上添加服务器列表,并将其分组(从列表优先级的角度来思考)
3.1 Ansible 服务器列表分组的不同优先级(从列表优先级的角度来思考)
1) 最高优先级,设置 Ansible 服务器配置文件的全局变量,并在此变量指定的位置的 Ansible 配置文件和服务器列表文件
3) 第二高优先级,在执行 ansible 命令时,当前目录下的 Ansible 配置文件和服务器列表文件
4) 第三高优先级,在使用 ansible 命令用户家目录下的 Ansible 配置文件和服务器列表文件
5) 第四高优先级,在 /etc/ansible 下的 Ansible 配置文件和服务器列表文件
(注意:Ansible 会严格按照优先级,当有更高优先级的服务器列表时,绝对不会执行低等级的服务器列表)
3.2 通过设置 Ansible 服务器配置文件的全局变量的方法来添加服务器列表
3.2.1 在管理服务器上修改系统环境变量文件
# vim /etc/profile
添加以下内容:
......
export ANSIBLE_CONFIG=/opt/ansible.cfg
(补充:这里以 /opt 目录为例)
3.2.2 在管理服务器上让系统环境变量生效
# source /etc/profile
3.2.3 在管理服务器上在环境变量指定的位置创建 Ansible 的配置文件
# cp /etc/ansible/ansible.cfg /opt/
3.2.4 在管理服务器上指定 Ansible 的服务器列表文件
# vim /opt/ansible.cfg
将以下内容:
......
#inventory = /etc/ansible/hosts
......
修改为:
......
inventory = hosts
......
3.3 在管理服务器上添加 Ansible 的服务器列表,并将其分组
# vim /opt/hosts
创建以下内容:
192.168.100.107
[web]
web[1:3]
[db]
db1
db2
db3
(补充:这里以文本列表为例)
3.4 通过在当前目录下创建 Ansible 配置文件和服务器列表文件的方法来添加服务器列表
3.4.1 在管理服务器上进入到 1 个任意此用户有权限的目录
# cd /opt
(补充:这里以 /opt 目录为例)
3.4.2 在管理服务器上的当前位置创建 Ansible 的配置文件
# cp /etc/ansible/ansible.cfg /opt/
3.4.3 在管理服务器上指定 Ansible 的服务器列表文件
# vim /opt/ansible.cfg
将以下内容:
......
#inventory = /etc/ansible/hosts
......
修改为:
......
inventory = hosts
......
3.4.4 在管理服务器上添加 Ansible 的服务器列表,并将其分组
# vim /opt/hosts
创建以下内容:
192.168.100.107
[web]
web[1:3]
[db]
db1
db2
db3
(补充:这里以文本列表为例)
3.5 通过在家目录下创建 Ansible 配置文件和服务器列表文件的方法来添加服务器列表
3.5.1 在管理服务器上进入到家目录
# cd
3.5.2 在管理服务器上的家目录位置创建 Ansible 的配置文件
# cp /etc/ansible/ansible.cfg ~/
3.5.3 在管理服务器上指定 Ansible 的服务器列表文件
# vim ~/ansible.cfg
将以下内容:
......
#inventory = /etc/ansible/hosts
......
修改为:
......
[defaults]
inventory = hosts
......
3.5.4 在管理服务器上添加 Ansible 的服务器列表,并将其分组
# vim ~/hosts
创建以下内容:
192.168.100.107
[web]
web[1:3]
[db]
db1
db2
db3
(补充:这里以文本列表为例)
3.6 通过修改 Ansible 默认配置文件和默认服务器列表文件的方法来添加服务器列表
3.6.1 在管理服务器上指定 Ansible 服务器列表文件
# vim /etc/ansible/ansible.cfg
将以下内容:
......
#inventory = /etc/ansible/hosts
......
修改为:
......
inventory = /etc/ansible/hosts
......
3.6.2 在管理服务器上添加 Ansible 的服务器列表,并将其分组
# vim /etc/ansible/hosts
创建以下内容:
192.168.100.107
[web]
web[1:3]
[db]
db1
db2
db3
(补充:这里以文本列表为例)
步骤四:在管理服务器的 Ansible 上添加服务器列表,并将其分组(从列表种类的角度来思考)
4.1 让管理服务器的 Ansible 使用文本格式的服务器列表文件
4.1.1 分组的方式
4.1.1.1 单个服务器
# vim /etc/ansible/hosts
创建以下内容:
192.168.100.107
4.1.1.2 服务器组
# vim /etc/ansible/hosts
创建以下内容:
192.168.100.107
[web]
web1
web2
web3
4.1.1.3 服务器复合组
# vim /etc/ansible/hosts
创建以下内容:
192.168.100.107
[web]
web1
web2
web3
[db]
db1
db2
db3
[webdb:children]
web
db
(补充:在这里的 webdb 组会同时包含 web 和 db 里的服务器)
4.1.2 列表的描述方式介绍
4.1.2.1 连续的数字
192.168.[0:10].[0:255]
(补充:这里以从 192.168.0.0 到 192.168.10.255 为例)
4.1.2.2 连续的字母
web[a:c]
(补充:这里以从 weba 到 webc 为例)
4.2 让管理服务器的 Ansible 使用 json 格式的服务器列表文件
4.2.1 在管理服务器上进入任意一个此用户有权限的目录
# cd ~
(补充:这里以进入家目录为例)
4.2.2 在管理服务器上的家目录位置创建 Ansible 的配置文件
# cp /etc/ansible/ansible.cfg ~/
4.2.3 在管理服务器上指定 Ansible 的服务器列表文件
# vim ansible.cfg
将以下内容:
......
#inventory = /etc/ansible/hosts
......
修改为:
......
inventory = ./hosts.py
......
4.2.4 在管理服务器上使用 Python3 编程语言生成 json 格式的服务器列表
4.2.4.1 在管理服务器上编写生成 json 格式的 Python 程序
# vim hosts.py
创建以下内容:
#!/usr/libexec/platform-python
import json
hostlist = {}
hostlist["web"] = ["192.168.100.101", "192.168.100.103"]
hostlist["db"] = {
"hosts" :["192.168.100.104", "192.168.100.106"],
"vars" :{"ansible_ssh_user":"root", "ansible_ssh_pass":"1"}
}
hostlist["192.168.100.7"] = {
"ansible_ssh_user":"root", "ansible_ssh_pass":"pwd"
}
print(json.dumps(hostlist))
4.2.4.2 给刚刚编写的 Python 程序相应的全权
# chmod 755 hosts.py
(
补充:
使用 Python3 出现报错的处理方法:
1) 显示 yum 的配置文件位置
# whereis yum
yum: /usr/bin/yum /etc/yum /etc/yum.conf /usr/share/man/man8/yum.8.gz
2) 确认 yum 所使用的 Python
# head -1 /usr/bin/yum
#!/usr/libexec/platform-python
3) 将 hosts.py 第一行的 Python 位置修改成和 yum 所使用的一样
# vim hosts.py
将第一行修改为:
#!/usr/libexec/platform-python
......
)
步骤五:在管理服务器的 Ansible 上添加服务器列表,并将其分组(多个同优先级相同的列表,从管理的角度来思考)
5.1 在管理服务器上进入任意 1 个此用户有权限的目录
# cd ~
(补充:这里以进入家目录为例)
5.2 在管理服务器上的家目录位置创建 Ansible 的配置文件
# cp /etc/ansible/ansible.cfg ~/
5.3 在管理服务器上指定 Ansible 的服务器列表文件目录
将以下内容:
......
#inventory = /etc/ansible/hosts
......
修改为:
......
inventory = ~/hosts/
......
5.2.4 创建 Ansible 的服务器列表文件目录
5.2.4.1 创建第 1 个 Ansible 的服务器列表文件目录
# vim ~/hosts/hostsa
创建以下内容:
[web]
web1
web2
web3
5.2.4.2 创建第 1 个 Ansible 的服务器列表文件目录
# vim ~/hosts/hostsb
创建以下内容:
[db]
db1
db2
db3
5.2.4.3 创建第 3 个 Ansible 的服务器列表文件目录
# vim ~/hosts/others
创建以下内容:
192.168.100.7
步骤六:测试管理服务器 Ansible 的服务器列表
6.1 显示默认服务器列表里的服务器列表
# ansible all -i /etc/ansible/hosts --list-host
hosts (20):
web1
web2
web3
db1
db2
db3
192.168.100.107
6.2 显示 web 组的服务器
# ansible web --list-host
hosts (10):
web1
web2
web3
6.3 显示 db 组的服务器
# ansible db --list-host
hosts (5):
db1
db2
db3
6.4 显示不属于任何组的服务器
# ansible ungrouped --list-host
hosts (1):
192.168.100.7
6.5 显示所有服务器
# ansible all --list-host
hosts (20):
web1
web2
web3
db1
db2
db3
192.168.100.107
或者:
# ansible-inventory --graph