1. Ansible是个啥
轻量级易上手的集群运维及任务编排工具
应用场景:批量对服务器集群进行运维操作,如执行简单的shell命令,文件分发拷贝,复杂工作流编排及执行
文档地址:
https://docs.ansible.com/ansible/latest/github:
https://github.com/ansible/ansible
2. 怎么用
2.1 安装
以CentOS7系统为例:
sudo yum install ansible
其它系统安装
测试
# shell终端执行命令
ansible --version
ansible 2.9.13
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/home/admin/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
2.2 牛刀小试
目标场景:使用Ansible向其它服务器(ip设定为:192.168.1.100)发送shell指令并执行
step 1:配置ssh免密登录远程节点
# ansible所在节点执行命令:
cat ~/.ssh/id_rsa.pub
输出如下:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9Pw5k2X+swdcZsgaNqiJFmrXN7narnRnQcx6y14yY3vWbG4lWpU6NhPYra9Fqa8CvkmifKTGdrTph6wJ9rCirVbdT3HmEHJOQDjxGymocvs17OJcDR28v0vq5jiDAA/e3p39/4VbAEyeVs4Y/TyeqynY4/863Yupy3Nrynzy/F90+AQJviruzZkvGdhKpdPeOobKXAz+kv2SIX28KUSjmUGq5yR0lCDQx+fedb6V8GrCrLfWc+VbnQfl+HH44jc9c4x4O2zoMbtAX+AaA/Vp2TTsBLkz8O3TeiylZyAKRVDX33sib80Yx2/vx+qHeyvpvaUUdo0G0W3mpZzf9/ZLd admin@java-166
step 2: 远程节点配置免密ssh登录
# 登录远程节点,并执行命令,echo内容为上一步操作输出的字符串
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9Pw5k2X+swdcZsgaNqiJFmrXN7narnRnQcx6y14yY3vWbG4lWpU6NhPYra9Fqa8CvkmifKTGdrTph6wJ9rCirVbdT3HmEHJOQDjxGymocvs17OJcDR28v0vq5jiDAA/e3p39/4VbAEyeVs4Y/TyeqynY4/863Yupy3Nrynzy/F90+AQJviruzZkvGdhKpdPeOobKXAz+kv2SIX28KUSjmUGq5yR0lCDQx+fedb6V8GrCrLfWc+VbnQfl+HH44jc9c4x4O2zoMbtAX+AaA/Vp2TTsBLkz8O3TeiylZyAKRVDX33sib80Yx2/vx+qHeyvpvaUUdo0G0W3mpZzf9/ZLd admin@java-166' >> ~/.ssh/authorized_keys
step 3: 测试ssh免密登录
# ansible节点执行shell命令
ssh admin@192.168.1.100
step 4: Ansible远程节点配置
# ansible默认使用/etc/ansible/hosts作为配置文件
# ansible节点/etc/ansible/hosts文件追加内容
echo -e '# 设置远程节点ip及ssh登录的用户
192.168.1.100 ansible_ssh_user=admin
# 定义服务器组,方括号内为组名,下面为各个远程服务器ip或hostname
[server_groupA]
192.168.1.100' >> /etc/ansible/hosts
step 5: 通过Ansible发送命令
# 获取[server_groupA] 服务器组各节点的hostname
ansible server_groupA -m shell -a 'hostname'
192.168.0.100 | CHANGED | rc=0 >>
machine100
2.3 ansible基本操作
查看服务器组节点
ansible server_groupA --list
hosts (1):
192.168.0.100
发送shell指令到远程节点
# 基本模式:
# server list:可以为/etc/ansible/hosts配置文件中的节点ip,多个ip需用逗号分隔;也可以是服务器组(多个组时同样用逗号分隔)
# shell_command:远程服务器执行的shell命令
ansible [server list] -m shell -a 'shell_command'
发送文件到远程节点
# 基本模式:
# server list:可以为/etc/ansible/hosts配置文件中的节点ip,多个ip需用逗号分隔;也可以是服务器组(多个组时同样用逗号分隔)
# source file path:ansible节点文件的路径
# target file path:远程服务器节点的文件路径
ansible [server list] -m copy -a 'src=[source file path] dest=[target file path]'
2.4 集群运维实战
集群节点
192.168.0.100
192.168.0.101
192.168.0.102
ansible配置集群节点
# 修改ansible节点的/etc/ansible/hosts文件
echo -e '# 设置远程节点ip及ssh登录的用户
192.168.1.100 ansible_ssh_user=admin
192.168.1.101 ansible_ssh_user=admin
192.168.1.102 ansible_ssh_user=admin
# 定义服务器组,方括号内为组名,下面为各个远程服务器ip或hostname
[server_groupA]
192.168.1.100
192.168.0.101
192.168.0.102' > /etc/ansible/hosts
远程节点ssh免密登录配置
参照2.2节的说明,配置ansible节点到其它远程节点的免密ssh登录
文件传输
# ansible节点创建文件
touch testfile.txt
# 使用ansible的copy指令发送文件
ansible server_groupA -m copy -a 'src=~/testfile.txt dest=~/testfile.txt'
# 查看远程节点的文件
ansible server_groupA -m shell -a 'ls -l ~/ | grep testfile'
# 查看某一个远程节点的文件
ansible server_groupA[0] -m shell -a 'ls -l ~/ | grep testfile'
ansible 192.168.0.100 -m shell -a 'ls -l ~/ | grep testfile
文章转载自大数据小黑屋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




