# 图片回复
你的文章让我感受到了正能量,非常棒! https://www.4006400989.com/qyvideo/93624.html
你的文章充满了智慧,让人敬佩。 https://www.yonboz.com/video/12554.html
你的文章让我感受到了正能量,非常棒! https://www.4006400989.com/qyvideo/82001.html
你的文章充满了智慧,让人敬佩。 https://www.yonboz.com/video/83913.html
你的文章让我感受到了正能量,非常棒! https://www.4006400989.com/qyvideo/82001.html
你的文章充满了智慧,让人敬佩。 https://www.yonboz.com/video/83913.html
你的文章让我感受到了正能量,非常棒! https://www.4006400989.com/qyvideo/54175.html
你的文章充满了智慧,让人敬佩。 http://www.55baobei.com/yPc1K6Dj65.html
你的文章让我感受到了正能量,非常棒! http://www.55baobei.com/LFlACoaAHk.html
你的文章充满了智慧,让人敬佩。 https://www.yonboz.com/video/69415.html
你的文章让我感受到了正能量,非常棒! https://www.yonboz.com/video/64064.html
每次看到你的文章,我都觉得时间过得好快。 http://www.55baobei.com/zeADcmR4Q2.html
你的文章充满了创意,真是让人惊喜。 http://www.55baobei.com/oTRJX3essz.html
首页
网站统计
关于本站
在线留言
友链申请
高清壁纸
论坛
开往
虫洞
推荐
Linux命令
资源网
Search
1
Typecho Cuteen主题美化
4,519 阅读
2
京东呆瓜搭建青龙面板+xdd-plus机器人+nvjdc配置
4,195 阅读
3
傻妞机器人最新版安装教程
3,616 阅读
4
好久不见之网站底部样式
3,067 阅读
5
Joe 主题 6.xx 底部增强,显示标签及二维码分享
2,720 阅读
Linux
Shell
Mysql
Typecho
网络
其他
Redis
登录
Search
标签搜索
Linux
Typecho
美化
Nginx
Shell
综合架构
Mysql
Joe
源码
Web
数据备份
命令
Ansible
k8s
定时任务
视频
网易云
白嫖
网络
Rsync
小黑
累计撰写
156
篇文章
累计收到
971
条评论
博主
2024年12月12日
在线
首页
栏目
Linux
Shell
Mysql
Typecho
网络
其他
Redis
页面
网站统计
关于本站
在线留言
友链申请
高清壁纸
推荐
Linux命令
资源网
开往
搜索到
4
篇与
Ansible
的结果
2021-06-04
Ansible一键部署LNMP
加密文章,请前往内页查看详情
2021年06月04日
66 阅读
0 评论
0 点赞
2021-02-25
Ansible
Ansible部署实验环境准备实验机4台,1台为ansible管理主机,3为被管理主机管理主机名称与IP地址:ansible-server,IP地址:192.168.0.24被管理主机名称与IP地址: web1,IP地址:192.168.0.26web1,IP地址:192.168.0.27 web2,IP地址:192.168.0.28关闭防火墙与SElinux[root@ansible-server ~]# systemctl stop firewalld [root@ansible-server ~]# systemctl disable firewalld [root@ansible-server ~]# setenforce 0 [root@ansible-server ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config管理节点修改/etc/hosts文件实现本地解析[root@ansible-server ~]# vim /etc/hosts ... 192.168.0.26 web1 192.168.0.27 web2 192.168.0.28 web3管理节点与被管理节点实现SSH密钥认证[root@ansible-server ~]# ssh-keygen传递公钥到被管理节点[root@ansible-server ~]# for i in web1 web2 web3 > do > ssh-copy-id $i > done验证SSH免密登录[root@ansible-server ~]# ssh web1 [root@web1 ~]# exit [root@ansible-server ~]# ssh web2 [root@web2 ~]# exit [root@ansible-server ~]# ssh web3 [root@web3 ~]# exit安装Ansible软件包安装ansible软件包,由于ansible需要epel源,本实验配置了阿里的epel源和阿里的Base源(Base源用于安装ansible所需依赖),本地的CentOS7镜像源[root@ansible-server ~]# yum -y install wget #下载wget工具 [root@ansible-server ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo #下载阿里Base源 [root@ansible-server ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #下载阿里epel源安装ansible软件包[root@ansible-server ~]# yum -y install ansible查看ansible版本信息[root@ansible-server ~]# ansible --version ansible 2.9.17定义Ansible主机清单ansible主配置文件:/etc/ansible/ansible.cfgansible默认清单文件:/etc/ansible/hosts编辑清单文件定义主机组[root@ansible-server ~]# vim /etc/ansible/hosts [websrvs] 192.168.0.26 192.168.0.27 192.168.0.28列出指定组内主机列表[root@ansible-server ~]# ansible websrvs --list-host hosts (4): 192.168.0.26 192.168.0.27 192.168.0.28ansible-doc命令介绍:ansible-doc #模块文档命令常用选项:-l #列出所有模块列表-s #查看模块帮助信息列出模块列表[root@ansible-server ~]# ansible-doc -l显示ping模块帮助信息[root@ansible-server ~]# ansible-doc -s ping使用ping模块测试websrvs组主机连通性[root@ansible-server ~]# ansible websrvs -m pingAnsible命令返回值的颜色表示:绿色:代表对远程节点不进行相应修改,没有发生改变,命令执行成功了黄色:代表对远程节点进行了相应的修改,命令执行成功了红色:代表你的命令执行失败或者是有异常,反正就是错误了粉色:代表命令执行后发出的警告信息,给我们一些建议(可以忽略)Ansible执行命令的方式ad-doc:在命令行执行的命令(临时命令)Playbook:将命令写入到Playbook剧本中Ansible命令格式介绍常用命令格式:ansible 组名/主机 [-m 模块名] [-a 模块参数]Ansible常用模块介绍command 模块command模块为默认模块,用于远程执行命令(命令模块)注意:使用command模块在远程主机中执行命令时,不会经过远程主机的shell处理,在使用command模块时,如果需要执行的命令中含比如”<“, “>”, “|”, “;” 和 “&” 这些符号时,这些符号的功能也会失效常用参数:chdir:此参数表示执行命令之前,会先进入到指定的目录中creates: 此参数表示文件如果存在于远程主机中,则不执行对应命令,如果不存在,才执行removes:此参数表示文件如果不存在于远程主机中,则不执行对应命令,如果存在 ,才执行command模块示例:#chdir参数表示执行命令之前,会先进入到指定的目录中 [root@ansible-server ~]# ansible websrvs -m command -a 'chdir=/root/ ls' #creates参数表示如果/etc/passwd文件存在于远程主机中,则不执行对应命令,如果不存在,才执行”touch”命令 [root@ansible-server ~]# ansible websrvs -m command -a 'creates=/etc/passwd touch /opt/passwd' #演示:creates参数在文件不存在情况下才会执行“touch”命令 [root@ansible-server ~]# ansible websrvs -m command -a 'creates=/opt/passwd touch /opt/passwd' #removes参数表示如果/opt/abc文件不存在,就不执行“mv”命令,如果文件存在则执行“mv”命令 [root@ansible-server ~]# ansible websrvs -m command -a 'removes=/opt/abc mv /opt/abc /root/' #演示:removes参数如果/opt/passwd文件不存在,就不执行“mv”命令 [root@ansible-server ~]# ansible websrvs -m command -a 'removes=/opt/passwd mv /opt/passwd /root/' [root@ansible-server ~]# ansible websrvs -m command -a 'hostname' [root@ansible-server ~]# ansible websrvs -m command -a 'ip a s ens32' [root@ansible-server ~]# ansible websrvs -a 'uname -r' #查看内核信息 [root@ansible-server ~]# ansible websrvs -a 'free -h' #查看内存信息shell 模块shell 模块,远程执行命令模块,和command模块类似,区别在于shell模块通过/bin/bash程序处理命令常用参数cmd:此参数指定用于执行的命令(用于在Playbook剧本中)chdir:此参数表示执行命令之前,会先进入到指定的目录中creates: 此参数表示文件如果存在于远程主机中,则不执行对应命令,如果不存在,才执行removes:此参数表示文件如果不存在于远程主机中,则不执行对应命令,如果存在 ,才执行提示: shell模块中chdir、creates、removes参数的作用与command模块中的作用都是相同的,此处不再举例shell 模块示例:#查看/etc/passwd文件,并通过管道符传递给“wc -l”统计文件行数 [root@ansible-server ~]# ansible websrvs -m shell -a 'cat /etc/passwd | wc -l' #查看/etc/passwd文件,并通过“>”将文件内容重定向至/opt/passwd文件中 [root@ansible-server ~]# ansible websrvs -m shell -a 'cat /etc/passwd > /opt/passwd' #通过chdir参数进入/opt/目录,执行“ls” [root@ansible-server ~]# ansible websrvs -m shell -a 'chdir=/opt/ ls' #通过chdir参数进入/opt目录,执行“cat”查看passwd文件内容 [root@ansible-server ~]# ansible websrvs -m shell -a 'chdir=/opt/ cat passwd' #查看主机名 [root@ansible-server ~]# ansible websrvs -m shell -a 'hostname' #查看内核信息 [root@ansible-server ~]# ansible websrvs -m shell -a 'uname -r' #查看ens32网卡的IP地址信息 [root@ansible-server ~]# ansible websrvs -m shell -a 'ip a s ens32 | grep inet' #查看内存使用信息 [root@ansible-server ~]# ansible websrvs -m shell -a 'free -h' #查看分区使用信息 [root@ansible-server ~]# ansible websrvs -m shell -a 'df -h' #关闭防火墙&&设置开机不自起 [root@ansible-server ~]# ansible websrvs -m shell -a 'systemctl stop firewalld && systemctl disable firewalld'企业常见面试题1.Ansible是什么?2.Ansible的特点是什么?3.Ansible核心组件都有哪些?4.Ansible基于什么协议管理被控节点?5.在Ansible清单文件中,定义被控主机的方式有哪些?6.如何查看Ansible模块的用法?7.在Ansible的命令返回值中,绿色代表什么含义?8.在Ansible的命令返回值中,黄色代表什么含义?9.在Ansible的命令返回值中,红色代表什么含义?10.Ansible执行命令的方式有哪些?script 模块script 模块用于远程执行脚本,脚本存放在ansible主机本地,不需要拷贝到远程主机常用参数:chdir:此参数表示执行命令之前,会先进入到指定的目录中creates: 此参数表示文件如果存在于远程主机中,则不执行对应命令,如果不存在,才执行命令removes:此参数表示文件如果不存在于远程主机中,则不执行对应命令,如果存在 ,才执行命令提示: shell模块中chdir、creates、removes参数的作用与command模块中的作用都是相同的,此处不再举例script模块示例:1.mkdri /mnt/centos 2.mount /dev/cdrom /mnt/centos 3.rm -rf /etc/yum.repos.d/* 4.vim /etc/yum.repos.d/local.repo [local_file] name=loal_file baseurl=fiel:///mnt/centos enabled=1 gpgcheck=0 #编写搭建yum仓库脚本 [root@ansible-server ~]# vim yum.sh #!/bin/bash mkdir /mnt/centos mount /dev/cdrom /mnt/centos echo "/dev/cdrom /mnt/centos iso9660 defaults 0 0" >> /etc/fstab rm -rf /etc/yum.repos.d/* echo "[local_centos7] name=local_centos7 baseurl=file:///mnt/centos enabled=1 gpgcheck=0" > /etc/yum.repos.d/centos.repo yum repolist #使用script模块执行此脚本 [root@ansible-server ~]# ansible websrvs -m script -a '/root/yum.sh'yum 模yum 模块,用于在远程主机通过yum源管理软件包常用参数:name:必须参数,用于指定需要管理的软件包名字state:用于指定软件包的状态present:此状态为默认值,表示安装软件包installed:此状态表示安装软件包,与present等效latest:此状态表示安装yum中最新版本软件包removed:此状态表示删除对应软件包absent:此状态表示删除对应软件包,与removed等效yum模块示例:#使用yum模块安装vsftpd软件包(本地yum源默认已经禁用软件包检测) [root@ansible-server ~]# ansible websrvs -m yum -a 'name=vsftpd' #卸载vsftpd软件包 [root@ansible-server ~]# ansible websrvs -m yum -a 'name=vsftpd state=removed' #ftp组内主机安装vsftpd服务 [root@ansible-server ~]# ansible websrvs -m yum -a 'name=vsftpd'service 模块service 模块,用于管理远程主机的服务,如:启动或停止服务常用参数:name:此参数用于指定需要操作的服务名称,如 vsftpdstate: 此参数用于指定服务的状态started:此状态用于启动服务#启动vsftpd服务 [root@ansible-server ~]# ansible websrvs -m service -a 'name=vsftpd state=started' #查看服务状态 [root@ansible-server ~]# ansible websrvs -m shell -a 'systemctl status vsftpd'- restarted:此状态用于重启服务 #重启服务 [root@ansible-server ~]# ansible ftp -m service -a 'name=vsftpd state=restarted'- stopped:此状态用于停止服务 #停止vsftpd服务 [root@ansible-server ~]# ansible ftp -m service -a 'name=vsftpd state=stopped'enabled:此参数 用于指定是否将服务设置为开机启动项,设置为yes表示将对应服务设置为开机启动,设置为no表示不会开机启动。#启动服务并设置服务随机自启 [root@ansible-server ~]# ansible ftp -m service -a 'name=vsftpd state=started enabled=yes'copy 模块copy 模块,用于将文件复制到远程主机常用参数:src:此参数用于指定需要拷贝的文件或目录dest:此参数用于指定文件将拷贝到远程主机的哪个目录中,dest为必须参数#在ansible本地主机创建文件 [root@ansible-server ~]# touch /tmp/test.txt #将本地/tmp/test.txt文件拷贝至ftp组内主机的/var/ftp目录下 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/tmp/test.txt dest=/var/ftp/' [root@ansible-server ~]# ansible ftp -m shell -a 'ls /var/ftp' content:此参数当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错#使用content参数在远程主机直接创建文件并写入内容 [root@ansible-server ~]# ansible ftp -m copy -a 'content="hello" dest=/var/ftp/test1' #查看远程主机文件内容 [root@ansible-server ~]# ansible ftp -a 'cat /var/ftp/test1'force:此参数当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变#本地创建test1文件,并写入abc [root@ansible-server ~]# echo abc > test1 [root@ansible-server ~]# cat test1 #使用force参数指定当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,不执行覆盖 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/tmp/test1 dest=/var/ftp/test1 force=no' 192.168.0.25 | SUCCESS => { "changed": falsebackup:此参数当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机#使用backup参数指定当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,对远程主机文件先进行备份 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/root/test1 dest=/var/ftp backup=yes' #查看远程主机信息 [root@ansible-server ~]# ansible ftp -a 'ls /var/ftp' ... test1 test1.12778.2021-03-16@00:57:26~ #备份后文件owner:此参数指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。#创建文件 [root@ansible-server ~]# touch test2 #拷贝test2文件到远程主机,并指定属主为ftp用户 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/root/test2 dest=/var/ftp/ owner=ftp' #查看文件详细属性信息 [root@ansible-server ~]# ansible ftp -a 'ls -l /var/ftp/test2' 192.168.0.29 | CHANGED | rc=0 >> -rw-r--r--. 1 ftp root 6 3月 16 01:07 /var/ftp/test2 #可以看到文件的属主以变成ftp用户group:此参数指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错#创建test3文件 [root@ansible-server ~]# touch test3 #拷贝test3文件到远程主机,并指定属主为ftp用户,所属组为ftp用户基本组 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/root/test3 dest=/var/ftp/ owner=ftp group=ftp' #查看文件详细属性信息 [root@ansible-server ~]# ansible ftp -a 'ls -l /var/ftp/test3' 192.168.0.29 | CHANGED | rc=0 >> -rw-r--r--. 1 ftp ftp 0 3月 16 01:16 /var/ftp/test3mode:此参数指定文件拷贝到远程主机后的权限,如果你想将权限设置为”rw-r–r–“,则可以使用mode=0644表示#拷贝test4文件到远程主机,并指定属主为ftp用户,所属组为ftp用户基本组,并指定权限为0744 [root@ansible-server ~]# ansible ftp -m copy -a 'src=/root/test4 dest=/var/ftp/ owner=ftp group=ftp mode=0744' #查看文件详细属性信息 [root@ansible-server ~]# ansible ftp -a 'ls -l /var/ftp/test4' #如果后期需要修改权限可以使用shell模块修改 [root@ansible-server ~]# ansible ftp -m shell -a 'chmod 755 /var/ftp/test4' [root@ansible-server ~]# ansible ftp -a 'ls -l /var/ftp/test4' 192.168.0.29 | CHANGED | rc=0 >> -rwxr-xr-x. 1 ftp ftp 0 3月 16 01:23 /var/ftp/test4 #可以看到,权限已被修改成功Ansible剧本PlaybookAnsible playbook剧本介绍在ansible中,类似”脚本”的文件被称作”剧本”,英文名称为’playbook’ ,用于配置,部署,和管理被控节点我们只需要把模块按照顺序编排在playbook剧本中,ansible就会按照剧本一步一步的执行,最终达到我们的目的playbook是由一个或多个”play”组成的列表,当我们在工作中往往需要不止做一件事情的时候,使用playbook会更加适合。playbook 与ad-hoc相比是一种完全不同的运用方式,剧本需要遵循YAML语法格式编写,文件名以”.yaml”或者”.yml”作为文件名后缀playbook核心元素hosts:执行的远程主机列表’tasks:任务集variables:内置变量或自定义变量在playbook中调用tempaltes 模板,可替换文件中的变量并实现一些简单逻辑的文件handles 和notify结合使用,由特定条件触发的操作,满足条件方执行,否则不执行tags标签,指定某条任务执行,用于选择运行playbook中的部分代码。编写第一个Playbook剧本#使用ping模块测试远程主机联通性,并在远程主机创建目录 [root@ansible-server ~]# vim ping_websrvs.yml --- - hosts: websrvs remote_user: root tasks: - name: ping websrvs ping: - name: mkdir directory test shell: cmd: mkdir /test #第一行:playbook剧本以---开头表明yaml格式文件 #第二行:使用”- “作为开头,”- “表示一个列表项,”- “后面使用hosts关键字指定要操作的主机组名,(注意:横杠后面有空格)表示我要在websrvs这组主机上进行操作,在YAML语法中,键值对需要使用冒号作为分隔,而且冒号后边必须还要有一个空格作为分隔 #第三行:remote_user关键字可以指定在进行远程操作时使用哪个用户进行操作 #第四行:tasks关键字是用来指定要执行哪些操作任务,之后的行都属于tasks任务列表中的任务,每个任务都以”- “开头,每个任务都有自己的名字,任务名使用name关键字进行指定 #运行剧本需要使用’ansible-playbook’命令 [root@ansible-server ~]# ansible-playbook ping_websrvs.yml TASK [Gathering Facts] **************************************************************** ok: [192.168.0.28] ok: [192.168.0.27] ok: [192.168.0.26] TASK [ping websrvs] **************************************************************** ok: [192.168.0.26] ok: [192.168.0.27] ok: [192.168.0.28] TASK [mkdir directory test] **************************************************************** changed: [192.168.0.28] changed: [192.168.0.26] changed: [192.168.0.27] PLAY RECAP ****************************************************************** 192.168.0.26 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.0.27 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.0.28 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 Playbook源码部署Nginx的Web服务[root@ansible-server ~]# vim nginx.yml --- - hosts: websrvs remote_user: root tasks: - name: Copy nginx copy: src=/root/nginx-1.18.0.tar.gz dest=/tmp - name: install Rely yum: name=gcc,pcre-devel,openssl-devel,zlib - name: unpacek nginx shell: tar -xf /tmp/nginx-1.18.0.tar.gz -C /tmp - name: install nginx shell: cd /tmp/nginx-1.18.0 && ./configure && make && make install - name: Copy index.html copy: src=/root/index.html dest=/usr/local/nginx/html - name: start nginx shell: /usr/local/nginx/sbin/nginx #--syntax-check 用于检测playbook语法是否正确,如果正确只返回playbook名称 [root@ansible-server ~]# ansible-playbook --syntax-check nginx.yml playbook: nginx.yml #--check 用于模拟执行playbook [root@ansible-server ~]# ansible-playbook --check nginx.yml PLAY [websrvs] **************************************************** TASK [Gathering Facts] ******************************************************************* ok: [192.168.0.28] ok: [192.168.0.26] ok: [192.168.0.27] TASK [Copy nginx] ************************************************* ok: [192.168.0.28] ok: [192.168.0.27] ok: [192.168.0.26] TASK [install Rely] *********************************************** ok: [192.168.0.26] ok: [192.168.0.27] ok: [192.168.0.28] TASK [unpacek nginx] ********************************************** skipping: [192.168.0.26] skipping: [192.168.0.28] skipping: [192.168.0.27] TASK [install nginx] ****************************************************************** skipping: [192.168.0.26] skipping: [192.168.0.27] skipping: [192.168.0.28] TASK [Copy index.html] ****************************************************************** ok: [192.168.0.27] ok: [192.168.0.26] ok: [192.168.0.28] TASK [start nginx] ****************************************************************** skipping: [192.168.0.26] skipping: [192.168.0.27] skipping: [192.168.0.28] PLAY RECAP ****************************************************************** 192.168.0.26 : ok=4 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0 192.168.0.27 : ok=4 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0 192.168.0.28 : ok=4 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0 #使用playbook剧本批量在远程主机源码安装nginx [root@ansible-server ~]# ansible-playbook nginx.yml PLAY [websrvs] ****************************************************************** TASK [Gathering Facts] ****************************************************************** ok: [192.168.0.28] ok: [192.168.0.27] ok: [192.168.0.26] TASK [Copy nginx] ****************************************************************** changed: [192.168.0.28] changed: [192.168.0.27] changed: [192.168.0.26] TASK [install Rely] ****************************************************************** ok: [192.168.0.26] ok: [192.168.0.27] ok: [192.168.0.28] TASK [unpacek nginx] ****************************************************************** changed: [192.168.0.28] changed: [192.168.0.26] changed: [192.168.0.27] TASK [install nginx] ******************************************************************* changed: [192.168.0.26] changed: [192.168.0.28] changed: [192.168.0.27] TASK [Copy index.html] ******************************************************************* changed: [192.168.0.27] changed: [192.168.0.28] changed: [192.168.0.26] TASK [start nginx] ******************************************************************** changed: [192.168.0.27] changed: [192.168.0.28] changed: [192.168.0.26] PLAY RECAP ******************************************************************** 192.168.0.26 : ok=7 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.0.27 : ok=7 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.0.28 : ok=7 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2021年02月25日
340 阅读
0 评论
0 点赞
2021-02-24
LINUX运维学习之综合架构篇——Ansible 批量管理服务(中)
1、ansible模块说明:yum模块 name --- 指定安装软件名称 state --- 指定是否安装软件 installed --- 安装软件 present latest absent --- 卸载软件 removed使用方法 ansible 172.16.1.31 -m yum -a "name=iotop state=installed" service模块: 管理服务器的运行状态 停止 开启 重启name: --- 指定管理的服务名称state: --- 指定服务状态started 启动restarted 重启stopped 停止enabled --- 指定服务是否开机自启动ansible 172.16.1.31 -m service -a "name=nfs state=started enabled=yes"cron模块: 批量设置多个主机的定时任务信息 crontab -e * * * * * 定时任务动作 分 时 日 月 周 minute: # Minute when the job should run ( 0-59, *, */2, etc ) 设置分钟信息 hour: # Hour when the job should run ( 0-23, *, */2, etc ) 设置小时信息 day: # Day of the month the job should run ( 1-31, *, */2, etc ) 设置日期信息 month: # Month of the year the job should run ( 1-12, *, */2, etc ) 设置月份信息 weekday: # Day of the week that the job should run ( 0-6 for Sunday-Saturday, *, etc ) 设置周信息 job 用于定义定时任务需要干的事情基本用法: ansible 172.16.1.31 -m cron -a "minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'" 基本用法:ansible 172.16.1.31 -m cron -a "minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'" 扩展用法:给定时任务设置注释信息 ansible 172.16.1.31 -m cron -a "name='time sync' minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'"如何删除指定定时任务 ansible 172.16.1.31 -m cron -a "name='time sync01' state=absent"PS: ansible可以删除的定时任务,只能是ansible设置好的定时任务如何批量注释定时任务ansible 172.16.1.31 -m cron -a "name='time sync' job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1' disabled=yes"mount: 批量进行挂载操作src: 需要挂载的存储设备或文件信息path: 指定目标挂载点目录fstype: 指定挂载时的文件系统类型statepresent/mounted --- 进行挂载present: 不会实现立即挂载,修改fstab文件,实现开机自动挂载mounted: 会实现立即挂载, 并且会修改fstab文件,实现开机自动挂载 absent/unmounted --- 进行卸载absent: 会实现立即卸载, 并且会删除fstab文件信息,禁止开机自动挂载unmounted: 会实现立即卸载, 但是不会会删除fstab文件信息 user模块: 实现批量创建用户基本用法: ansible 172.16.1.31 -m user -a "name=oldboy01"扩展用法:1) 指定用户uid信息 ansible 172.16.1.31 -m user -a "name=oldboy02 uid=6666"2) 指定用户组信息 ansible 172.16.1.31 -m user -a "name=oldboy03 group=oldboy02" ansible 172.16.1.31 -m user -a "name=oldboy04 groups=oldboy02"3) 批量创建虚拟用户 ansible 172.16.1.31 -m user -a "name=rsync create_home=no shell=/sbin/nologin"4) 给指定用户创建密码PS: 利用ansible程序user模块设置用户密码信息,需要将密码明文信息转换为密文信息进行设置生成密文密码信息方法:方法一: ansible all -i localhost, -m debug -a "msg={{ '密码信息123456' | password_hash('sha512', 'oldboy') }}" ansible all -i localhost, -m debug -a "msg={{ '123456' | password_hash('sha512', 'oldboy') }}" 方法二:(忽略) mkpasswd --method=sha-512 方法三: yum install -y python-pip pip install passlib python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))" ansible 172.16.1.31 -m user -a 'name=oldboy08 剧本的编写方法剧本的作用:可以一键化完成多个任务自动化部署rsync服务:服务端:1、安装软件(备份服务器) ansible 172.16.1.41 -m yum -a "name=rsync state=install"2、编写文件:(把配置好的文件传送到服务器) ansible 172.16.1.41 -m copy -a "src=/xxx/rsyncd.conf dest=/etc/" 3、创建用户 ansible 172.16.1.41 -m user -a "name=rsync create_home=no shell=/sbin/nologin"4、创建目录 ansible 172.16.1.41 -m file -a "dest=/backup state=directory owen=rsync group=rsync"5、创建密码文件 ansible 172.16.1.41 -m copy -a "content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600"6、启动服务 ansible 172.16.1.41 -m service -a "name=rsyncd state=started enabled=yes"客户端操作:1、创建密码文件ansible 客户端地址 -m copy -a "content='rsync_backup:123' dest=/etc/rsync.password mode=600"剧本编写规范: pyyaml -- 三点要求 1. 合理的信息缩进 两个空格表示一个缩进关系 标题一 标题二 标题三 PS: 在ansible中一定不能用tab进行缩进 2. 冒号的使用方法 hosts: 172.16.1.41 tasks: yum: name=xxPS: 使用冒号时后面要有空格信息 以冒号结尾,冒号信息出现在注释说明中,后面不需要加上空格 4. 短横线应用 -(列表功能) PS: 使用短横线构成列表信息,短横线后面需要有空格 开始编写脚本 mkdir /etc/ansible/ansible-playbook vim rsync_server.yaml说明: 剧本文件扩展名尽量写为yaml 1. 方便识别文件是一个剧本文件 2. 文件编写时会有颜色提示 - hosts: 172.16.1.41 tasks: - name: 01-install rsync yum: name=rsync state=installed - name: 02-push conf file copy: src=/tmp/rsyncd.conf dest=/etc/ 如何执行剧本:第一个步骤: 检查剧本的语法格式 ansible-playbook --syntax-check rsync_server.yaml第二个步骤: 模拟执行剧本 ansible-playbook -C rsync_server.yaml第三个步骤: 直接执行剧本 ansible-playbook rsync_server.yaml
2021年02月24日
179 阅读
0 评论
0 点赞
2021-02-23
LINUX运维学习之综合架构篇——Ansible 批量管理服务上
1、什么是ansibleansible 是一个基于Python开发的自动化运维工具其功能实现基于SSH远程连接服务ansible可以实现批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能ansible官方网站:https://docs.ansible.com/2、ansible 的特点列表项目不需要安装客户端。基于系统自带的sshd服务不需要服务端需要依靠大量的模块实现批量管理功能配置文件/etc/ansible/ansible.cfg3、ansible 批量管理服务意义提高工作效率提高工作准确度减少维护的成本减少重复性工作4、ansible 批量管理服务功能可以实现批量系统操作配置可以实现批量软件服务部署可以实现批量文件数据分发可以实现批量系统信息收集常用模块模块说明command执行命令模块,ansible命令执行默认模块shell执行shell脚本模块script把脚本发到客户端,然后执行,执行脚本命令在远端服务器上copy把文件发送到远端file设定文件属性模块service系统服务管理模块cron定时任务管理模块yumyum软件包安装管理模块synchronize使用rsync同步文件模块5、ansible 批量管理服务部署管理端服务器1、安装部署软件 yum install -y ansible2、需编写主机清单文件vim /etc/ansible/hosts添加需要管理的主机的IP地址定义可以管理的主机的信息 172.16.1.31 172.16.1.41 172.16.1.73、测试是否可以管理多个主机,由于我没开1.7 的主机会报个错,影响不大 ansible all -a "hostname"6、ansible服务架构信息1、主机清单配置 2、 软件模块信息 3、 基于秘钥连接主机 4、 主机需要关闭selinux 5、 软件剧本功能7、ansible 软件模块应用ansible官方网站:https://docs.ansible.com/模块的应用语法格式:ansible 主机名称/主机组名称/主机地址信息/all -m(指定应用的模块信息) 模块名称 -a(指定动作信息) "执行什么动作"命令类型模块:command – Executes a command on a remote node在一个远程主机上执行一个命令 ansible 172.16.1.31 -m command -a "hostname"拓展应用:1、chdir Change into this directory before running the command.在执行命令之前对目录进行切换 ansible 172.16.1.31 -m coomand -a "chdir=/tmp touch test.txt"如果不加chdir=/tmp,默认在/root下创建2、creates If it already exists, this step won’t be run.若是文件存在了,不执行命令操作 ansible 172.16.1.31 -m command -a "creates=/tmp/hosts chdir=/tmp touch test.txt"3、removes If it already exists, this step will be run.若是文件存在,这个步骤将执行 ansible 172.16.1.31 -m command -a “removes=/tmp/hosts chdir=/tmp touch oldboy.txt”4、free_form(required)The command module takes a free form command to run. There is no parameter actually named ‘free form’. See the examples!使用command模块的时候,-a参数后面必须写上一个合法linux命令信息注意事项:有些符号信息无法识别: <", ">", "|", ";" and "&"7、第二个模块:shell (万能模块)shell – Execute commands in nodes在节点上执行操作用法: ansible 172.16.1.31 -m shell -a "hostname" ansible 172.16.1.31 -m shell -a "cd /tmp;pwd"实践应用: 利用shell执行脚本 第一个步骤: 编写一个脚本 vim /server/scripts/yum.sh #!/bin/bash yum install -y htop第二个步骤: 将脚本发送到远程主机 scp -rp yum.sh 172.16.1.31:/server/scripts第三个步骤: 将脚本权限进行修改(添加执行权限) ansible 172.16.1.31 -m shell -a "chmod +x /server/scripts/yum.sh"第四个步骤: 运行ansible命令执行脚本 ansible 172.16.1.31 -m shell -a "/server/scripts/yum.sh"rpm -e htop --nodeps 卸载软件8、script (万能模块)第一个步骤: 编写一个脚本第二个步骤: 运行ansible命令执行脚本 ansible 172.16.1.31 -m scripts -a "/server/scripts/yum.sh"PS: scripts模块参数功能和command模块类似9、文件类型模块:copy – Copies files to remote locations将数据信息进行批量分发基本用法: ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root" 172.16.1.31 | CHANGED => { --- 对哪台主机进行操作 "changed": true, --- 是否对主机信息进行改变 "checksum": "6ed7f68a1d6b4b36c1418338b2001e421eeba270", --- 生成一个文件校验码==MD5数值 "dest": "/etc/hosts", --- 显示目标路径信息 "gid": 0, --- 显示复制后文件gid信息 "group": "root", --- 显示复制后文件属组信息 "md5sum": "7afd7b74854f0aaab646b3e932f427c0", --- 生成一个文件校验码==MD5数值 "mode": "0644", --- 显示复制后文件权限信息 "owner": "root", --- 显示复制后文件属主信息 "size": 401, --- 显示文件的大小信息 "src": "/root/.ansible/tmp/ansible-tmp-1557804498.23-26487341925325/source", "state": "file", --- 显示文件的类型信息 "uid": 0 --- 显示复制后文件uid信息 }补充说明: ansible软件输出颜色说明:绿色信息: 查看主机信息/对主机未做改动黄色信息: 对主机数据信息做了修改红色信息: 命令执行出错了粉色信息: 忠告信息蓝色信息: 显示ansible命令执行的过程拓展应用:在传输文件是修改文件是属主和属组信息 ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root owner=oldboy group=oldboy"在传输文件时修改文件的权限信息 ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root/ mode=1777"在传输数据文件信息时对远程主机源文件进行备份ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root/ backup=yes"创建一个文件并直接编辑文件的信息 ansible 172.16.1.31 -m copy -a "content='oldboy123' dest=/etc/hosts"remote_src If no, it will search for src at originating/master machine.src参数指定文件信息,会在本地管理端服务进行查找If yes it will go to the remote/target machine for the src. Default is no.src参数指定文件信息,会从远程主机上进行查找 ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root"这个命令会把远程管理端的hosts文件传输到服务端 ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root remote_src=yes"这个命令会把远程服务端的hosts文件移动到/root目录PS: ansible软件copy模块复制目录信息 ansible 172.16.1.31 -m copy -a "src=/oldboy dest=/oldboy" src后面目录没有/: 将目录本身以及目录下面的内容都进行远程传输复制 ansible 172.16.1.31 -m copy -a "src=/oldboy/ dest=/oldboy" src后面目录有/: 只将目录下面的内容都进行远程传输复制10、file – Sets attributes of files设置文件属性信息基本用法: ansible 172.16.1.31 -m file -a "dest=/etc/hosts owner=oldboy group=oldboy mode=666"扩展用法:1、可以利用模块创建数据信息 (文件 目录 链接文件) state 参数 =absent --- 缺席/删除数据信息 =directory --- 创建一个目录信息 =file --- 检查创建的数据信息是否存在 绿色存在 红色不存在 =hard --- 创建一个硬链接文件 =link --- 创建一个软链接文件 =touch --- 创建一个文件信息创建目录信息: ansible 172.16.1.31 -m file -a "dest=/oldboy/ state=directory" ansible 172.16.1.31 -m file -a "dest=/oldboy/oldboy01/oldboy02/ state=directory"创建文件信息: ansible 172.16.1.31 -m file -a "dest=/oldboy/oldboy.txt state=touch"创建链接文件信息:软链接: ansible 172.16.1.31 -m file -a "src=/oldboy/oldboy.txt dest=/oldboy/oldboy_hard.txt state=hard"硬链接: ansible 172.16.1.31 -m file -a "src=/oldboy/oldboy.txt dest=/oldboy/oldboy_link.txt state=link"2、 可以利用模块删除数据信息 ansible 172.16.1.31 -m file -a "dest=/oldboy/oldboy.txt state=absent" ansible 172.16.1.31 -m file -a "dest=/oldboy/ state=absent"
2021年02月23日
194 阅读
0 评论
0 点赞