暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Ansible与服务器集群运维

大数据小黑屋 2021-03-27
1037

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论