免费个人网站在线制作,.net做网站c#,微信商城小程序平台,前端和后端哪个就业前景好人工运维时代
运维人员早期需要维护众多的机器#xff0c;因此需要执行很多重复的劳动#xff0c;很多机器需要同时部署相同的服务或者是执行相同的命令#xff0c;还得反复地登录不同的机器#xff0c;执行重复的动作 自动化运维时代
早期运维人员会结合ssh免密登录因此需要执行很多重复的劳动很多机器需要同时部署相同的服务或者是执行相同的命令还得反复地登录不同的机器执行重复的动作 自动化运维时代
早期运维人员会结合ssh免密登录以及shell脚本来完成自动化的部署操作
系统管理员面临的问题主要是配置管理系统、远程执行命令、批量安装服务启停服务等等
后来也诞生了众多的自动化运维软件比如 Ansible 自动化运维的好处
减少重复的操作提高工作效率减少了人为出错的可能性ansible支持数据化管理数据化追源找到问题的源头 Ansible介绍
ansible是一个同时管理多个远程主机的软件必须是任意可以通过ssh登录的机器因为ansible可以管理的机器包括
远程虚拟机物理机本机机器 ansible通过ssh协议实现了管理节点安装了ansible服务的机器和被管理节点的通信。
只要是通过ssh协议登录的主机就可以完成ansible自动化部署操作
批量文件分发批量数据复制批量数据修改、删除批量自动化安装软件服务批量服务启动、停止脚本化自动批量服务部署 ansible特点
安装部署简单管理主机便捷、支持多台主机并行管理无须安装被管理节点的客户端no agent且无需占用客户端的其他端口仅仅使用ssh服务即可不仅仅支持python还支持其他语言的二次开发不用root用户也可执行降低系统权限 Ansible实践部署
准备好虚拟机 准备好3个Linux虚拟机配置在同一个局域网内然后设置好静态ip地址 childA 192.168.xxx.129 被管理机器 childB 192.168.xxx.130 被管理机器配置好ssh服务以及关闭防火墙等等 master01 192.168.xxx.128 管理机器安装了ansible的服务器 先准备ansible管理机器
#选择yum自动化安装前提已经安装好了阿里云yum、epel源
yum install epel-release
yum install ansible#检查ansible软件安装情况查询配置文件和可执行命令
rpm -ql ansible | grep -E ^/etc|^/usr/bin#检查ansible版本
ansible --version
再准备ansible被管理机器
yum install epel-release libselinux-python -y Ansible管理方式
ansible管理主机的方式有2种
传统的输入ssh密码验证密钥管理
配置好ansible的配置文件添加被管理机器的ip地址或者主机名
#主节点备份现有的配置文件
cp /etc/ansible/hosts /etc/ansible/hosts.ori#添加ansible需要管理的机器地址节点A和节点B的ip地址
[root192 ansible]# vim hosts
[root192 ansible]# tail -3 /etc/ansible/hosts
[qiujie]
192.168.xxx.129
192.168.xxx.130ssh密码认证方式管理机器
ansible是直接利用linux本地的ssh服务以及一些远程的ssh操作一般情况下客户端的ssh服务默认都是开启的无须额外管理
步骤
①在master01机器上执行如下命令
#在主机器上告诉其他被管理的机器你要执行什么命令以及用什么用户去执行
ansible qiujie -m command -a hostname -k -u root qiujie /etc/ansible/hosts 文件中定义的主机组还可以写主机的ip地址以及通配符 -m 指定功能模块默认就是command模块 -a 告诉模块需要执行的参数 -k 询问密码验证 -u 指定运行的用户 运行命令之后报错了
报错原因
使用了密码方式登录在主机Host Key检查激活情况下sshpass不支持该用法得在master01机器的 ~/.ssh/known_hosts 文件中添加客户端机器的指纹密钥 ②手动ssh登录对主机进行连接即可使用ansible命令操作了
ssh root192.168.xxx.129
ssh root192.168.xxx.130
连接之后再查看 ~/.ssh/known_hosts 文件发现 ③此时可以在master01机器上再次执行ansible命令
ansible qiujie -m command -a hostname -k -u root 配置免密登录
每次执行ansible命令的时候都需要输入ssh的认证密码也就是root密码如果不同的主机密码不一样那你还得输入多次才行。因此我们可以配置如下的快捷登录方式
ansible自带的密码认证参数
#可以在 /etc/ansible/hosts文件中定义密码即可实现快速认证远程管理主机
#修改后的内容如下
[qiujie]
192.168.186.129 ansible_userroot ansible_ssh_pass111111
192.168.186.130 ansible_userroot ansible_ssh_pass111111 ansible_host 主机地址 ansible_port 端口默认是22端口 ansible_user 认证的用户 ansible_ssh_pass 用户认证的密码 执行ansible命令这次后面 -k -u root 那段参数就不用加了它会自动执行配置文件中设置的账号和密码
ansible qiujie -m command -a hostname
ssh密钥方式批量管理主机
这个方式比起hosts文件的密码参数来的更安全放心
#在master01机器上创建ssh密钥对
ssh-keygen -f ~/.ssh/id_rsa -P /dev/null 21#检查公私钥文件
[rootmaster01 ~]# cd ~/.ssh/
[rootmaster01 .ssh]# ls
id_rsa id_rsa.pub known_hosts编写公钥分发脚本
创建公钥分发脚本mkdir /myshcd /myshtouch ssh_key_send.shvim ssh_key_send.sh
脚本具体内容如下
#!/bin/bash
rm -rf ~/.ssh/id_rsa*
ssh-keygen -f ~/.ssh/id_rsa -P /dev/null 21
SSH_Pass123123
Key_Path~/.ssh/id_rsa.pub
for ip in 129 130
dosshpass -p$SSH_Pass ssh-copy-id -i $Key_Path -o StrictHostKeyCheckingno 192.168.xxx.$ip
done
#非交互式分发公钥命令需要用sshpass指定SSH密码通过 -o StrictHostKeyCheckingno 跳过SSH确认连接信息#执行
sh ssh_key_send.sh#然后直接使用以下命令连接childA和childB节点这样不需要输入密码
ssh -o StrictHostKeyCheckingno 192.168.xxx.129
ssh -o StrictHostKeyCheckingno 192.168.xxx.130ansible模式
ansible实现批量化管理主机的模式主要有2种
ad-hoc模式利用ansible的纯命令行实现批量管理playbook剧本模式利用ansible的playbook剧本实现批量管理 ansible-doc命令
列出ansible支持的所有模块
ansible-doc -l查看某个模块的具体用法参数
ansible-doc -s command Ansible模块精讲
1、command模块
作用在远程节点上执行一个命令 chdir 在执行命令之前先通过cd进入该参数指定的目录 creates 在创建一个文件之前判断该文件是否存在如果存在了则跳过前面的动作如果不存在则执行前面的动作 free_form 该参数可以输入任何的系统命令实现远程执行和管理 removes 定义一个文件是否存在如果存在则执行前面的动作如果不存在则跳过 command模块是ansible默认的基本模块也可以省略不写但是要注意如下的坑
使用command模块不得出现shell变量比如$name也不得出现特殊符号比如 | ; 这些符号command模块都不认识如果你想用前面指定的变量、特殊符号请使用shell模块 command模块案例 获取所有被管理机器的负载信息
ansible qiujie -m command -a uptime
让客户端机器先切换到 /tmp 目录下然后打印当前的工作目录
ansible qiujie -m command -a pwd chdir/tmp
让客户端机器判断 /qiujie 文件是否存在如果不存在就打印当前路径存在就跳过
ansible qiujie -m command -a pwd creates/qiujie
让客户端机器判断/aaa目录是否存在如果存在就列出/aaa目录下的所有东西不存在就跳过 ansible qiujie -m command -a ls /aaa removes/aaa
warn参数是否提供警告信息
#执行命令并且不提示报错信息
ansible qiujie -m command -a chmod 000 /etc/hosts warnfalse shell模块
批量查询进程信息
ansible qiujie -m shell -a ps -ef | grep vim批量在客户端机器创建写入文件信息
ansible qiujie -m shell -a echo 你真棒 /tmp/heihei.txt
批量执行脚本
#需要执行的这个脚本必须在客户端机器上存在否则会报错这是shell模块的特点
#因为还有一个专门执行脚本的script模块1.创建文件夹
2.创建sh脚本文件还要写入脚本内容
3.赋予脚本可执行权限
4.执行脚本并且忽略warning信息ansible qiujie -m shell -a mkdir -p /server/myscripts; echo hostname /server/myscripts/hostname.sh; chmod x /server/myscripts/hostname.sh warnfalse script 模块
功能把 master01 管理机器上的脚本远程地传输到被管理的节点上执行
比起shell模块script模块功能更强大在master01机器本地有一份脚本就可以在所有被管理节点上去运行
1.在管理节点上创建脚本
[rootmaster01 /]# mkdir /myscripts
[rootmaster01 /]# cd /myscripts
[rootmaster01 myscripts]# echo -e pwd\nhostname /myscripts/local_hostname.sh
[rootmaster01 myscripts]# cat /myscripts/local_hostname.sh
pwd
hostname2.授权
[rootmaster01 myscripts]# chmod x /myscripts/local_hostname.sh
远程地批量执行脚本并且在客户端上不需要存在该脚本
myscripts]# ansible qiujie -m script -a /myscripts/local_hostname.sh
利用script模块可以批量让所有被管理的机器执行脚本且该脚本不需要在被管理的客户端上存在