ansible的常用模块配置说明及批量部署服务
ansible的常用模块配置说明,在远程服务器批量配置清华大学的仓库文件,批量部署nginx,并启动服务。
ansible知识点:
一、Ansible特点:
1、部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
2、有大量常规运维操作模块,可实现日常绝大部分操作;
3、配置简单、功能强大、扩展性强;
4、通过Playbook来定制强大的配置;
二、ansible要实现管理主机,需要满足以下两点:
1、主机清单中需要配置被管理主机的主机名或者ip;
2、要能够连上被管理主机(授权);
ansible的常用模块配置说明,在远程服务器批量配置清华大学的仓库文件,批量部署nginx,并启动服务。
环境:
Ansible:172.20.26.167
远程服务器:172.20.26.198、172.20.26.24
在172.20.26.167服务器上配置yum仓库,安装部署ansible
yum install epel-release -y #配置epel仓库
yum install ansible -y #安装ansible
[root@bogon ~]# rpm -ql ansible #查看ansible 提供的大量脚本文件
[root@bogon ~]# rpm -ql ansible | wc -l #统计出有17312个脚本文件
[root@bogon ~]# rpm -qc ansible #查看ansible的配置文件
[root@bogon ~]# vim /etc/ansible/hosts
对单台服务器进行管理
172.20.26.198 ansible_ssh_pass=1
172.20.26.24 ansible_ssh_pass=1
保存退出
配置远程服务器免密访问
[root@bogon ~]# ssh-keygen
将秘钥copy到远程服务器,一路回车,输入root密码,回车即可
[root@bogon ~]# ssh-copy-id 172.20.26.198
[root@bogon ~]# ssh-copy-id 172.20.26.24
在172.20.26.167服务器上通过ansible 查看远程服务器的内存情况
[root@bogon ~]# ansible 172.20.26.198 -m shell -a "free -h"
[root@bogon ~]# ansible 172.20.26.24 -m shell -a "free -h"
也可以加上-k ,输入远程服务器root密码来进行管理,如果是一起输入多台服务器进行管理,因为只能输入一次密码,则多台服务器的root密码要一致。
ansible 172.20.26.198 -m shell -a "free -m" -k
ansible 172.20.26.198,172.20.26.24 -m shell -a "free -m" -k
如果不配置免密,也不想加上-k ,也可以将密码写入hosts配置文件里,
vim /etc/ansible/hosts
172.20.26.198 ansible_ssh_pass=1
172.20.26.24 ansible_ssh_pass=1
如果服务器较多的话,我们也可以配置主机组
vim /etc/ansible/hosts
查看磁盘信息
一台主机也可以归属于不同主机组,172.20.26.198 属于nginx主机组,也可以属于mysql主机组
ansible mysql -m shell -a "df -h"
command模块:创建目录
ansible nginx -m command -a "mkdir -p /tmp/discuz"
由于command模块为默认模块,所以也可以不用写,
ansible nginx -a "mkdir -p /tmp/wordpress"
上面我们创建目录,接下来我们可以来批量安装apache服务。
yum install httpd -y yum makecache #在执行下面命令前,可以在远程服务器提前将安装源的缓存做好
ansible nginx -a "yum install httpd -y"
通过rpm -q httpd 在172.20.26.198,172.20.26.24服务器上查看安装情况
我们也可以将上面安装时提示WARNING 信息,取消显示
vim /etc/ansible/ansible.cfg
我们再来创建目录,就不会有警告信息了;
由于command 模块有一定的缺陷,不支持以下 $HOME,<,>, |, ;,&命令
shell模块:
可以实现在远程服务器执行shell命令,并且弥补了command的一些缺陷!
ansible nginx -m shell -a "ls /tmp/ | grep wordpress"
也可以将shell 设置为默认模块
vim /etc/ansible/ansible.cfg
ansible nginx -a "ls /tmp/ | grep wordpress"
copy模块:
可以实现将ansible管理主机的文件内容分发到远程服务器。
ansible nginx -m copy -a "src=/etc/fstab dest=/tmp/"
也可以在copy 的同时修改权限以及属主,不过需要远程服务器已有要设置的属主用户,例如jfedu用户
ansible nginx -m copy -a "src=/etc/passwd dest=/tmp/ mode=600 owner=jfedu"
如果copy的文件名称已存在,文件内容不一样,copy后进行更新
删除的3行被更新回来
如果copy的文件名称已存在,文件内容不一样,原文件还想继续保留,可以使用backup=yes 开启备份
我们删除172.20.26.198服务器上/tmp/passwd文件中的6行
ansible nginx -m copy -a "src=/etc/passwd dest=/tmp/ mode=600 owner=jfedu backup=yes"
copy 文件与copy目录是一样的,不需要加-r来递归,我们在/tmp下创建jf目录,再创建test.txt文件,现在将jf目录copy到远程服务器上
ansible nginx -m copy -a "src=/tmp/jf dest=/tmp/"
复制字符串:将“welcome to jfedu”字符串复制到远程服务器的/tmp下的hello文件里
ansible nginx -m copy -a "content='welcome to jfedu\n' dest=/tmp/hello"
fetch模块:
可以实现将远程服务器的文件(不支持直接拉取目录,可以先将目录打包成文件)拉取到ansible管理主机。
我们将远程服务器上/tmp目录下的fstab文件拉取到本地的root目录下,即使目的目录下有同名的文件,也不会有冲突,因为ansible会自动将拷贝回来的文件存放在以远程服务器IP地址为目录下再创建源文件的上一级目录,
ansible nginx -m fetch -a "src=/tmp/fstab dest=/root/"
以远程服务器IP地址为目录,是因为读取的ansible中 hosts文件中主机组里的IP信息,如果hosts文件中主机组里用主机名来设置,则会以主机名来作为目录名称,取决于hosts文件里怎么定义。
synchronize模块:
可以实现目录、文件的同步,主要基于rsync命令工具同步目录和文件。
ansible nginx -m synchronize -a "src=/etc/passwd dest=/tmp/"
由于没有ansible服务器和远程服务器均没有安装rsync导致报错
在ansible服务器安装rsync
yum install rsync -y
ansible nginx -m shell -a "yum install rsync -y" 利用ansible 对远程服务器安装rsync
rsync 都安装好后,再运行synchronize 模块命令
ansible nginx -m synchronize -a "src=/etc/passwd dest=/tmp/"
在172.20.26.198、172.20.26.24服务器上查一下同步情况
从172.20.26.24服务器上的/etc/passwd文件拉取目录到本地tmp临时目录下,使用pull参数。
ansible 172.20.26.24 -m synchronize -a "src=/etc/passwd dest=/tmp/ mode=pull"
file模块:
该模块可以实现对文件的基本操作。比如,创建文件或目录、删除文件或目录、修改文件权限等。
#创建普通文件:在远程服务器上/tmp/目录下创建password文件
ansible nginx -m file -a "name=/tmp/password state=touch"
# 创建目录:在远程服务器上/tmp/目录下创建web目录
ansible nginx -m file -a "name=/tmp/web state=directory"
# 删除文件:将远程服务器上/tmp/目录下的password文件删除
ansible nginx -m file -a "name=/tmp/password state=absent"
# 创建软连接:将ansible服务器上etc/passwd软连接到远程服务器上tmp目录下的passwd文件
创建远程服务器上tmp目录下的passwd文件与ansible服务器上etc/passwd的软连接
ansible nginx -m file -a "src=/etc/passwd dest=/tmp/password state=link"
# 创建新文件,顺便设置文件属性:
ansible nginx -m file -a "name=/tmp/passwd mode=600 owner=jfedu state=touch"
# 修改文件属性:
ansible nginx -m file -a "name=/tmp/passwd mode=644 owner=root"
配置清华大学源:
方法1、在ansible服务器上配置好tsinghua.repo文件
vim /etc/yum.repos.d/tsinghua.repo
[tsinghua]
name= centos 7 tsinghua repo
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64
anabled=1
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/epel/RPM-GPGKEY-EPEL-7"
然后通过copy 模块,将ansible服务器上的tsinghua.repo文件拷贝到远程服务器上,即可
ansible nginx -m copy -a "src=/etc/yum.repos.d/tsinghua.repo dest=/etc/yum.repos.d"
方法2、直接用下面的命令对远程服务器批量部署清华大学的仓库文件
ansible nginx -m yum_repository -a "name=tsinghua description='centos 7 tsinghua repo' baseurl='https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64 /' enabled=yes gpgcheck=yes gpgkey=https://mirrors.tuna.tsinghua.edu.cn/epel/RPM-GPGKEY-EPEL-7"
批量部署nginx,并启动服务
远程服务器需要更新yum源
yum install epel-release -y
yum makecache
yum update
更新yum缓存
使用ansible的playbook,进行批量部署nginx,并启动服务
vim nginx.yml 创建yml配置文件
---
- hosts: nginx
remote_user: root
tasks:
- name: auto install nginx
yum: name=nginx
- name: start nginx
service: name=nginx state=started enabled=yes
ansible-playbook -C nginx.yml 检查nginx.yml 语法是否正确?
ansible-playbook nginx.yml 执行playbook命令
检查远程服务器nginx服务安装以及启动情况
批量部署nginx,并启动服务配置完成。