准备环境
功能 | 内网 |
---|
ansible | 192.168.1.20 | work1 | 192.168.1.21 | work2 | 192.168.1.22 | work3 | 192.168.1.23 |
ansible主机部署
1.安装epel源
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
2.安装ansible
yum install -y ansible
3.编写ssh分发脚本
vi auto_ssh.sh
#/bin/bash
SERVERS="192.168.1.21 192.168.1.22 192.168.1.23" #需要配置的主机名
USER="root" #用户
PASSWORD="root" #需要配置的主机登录密码
auto_ssh_copy_id(){
expect -c "set timeout -1;
spawn ssh-copy-id $1;
expect {
*(yes/no)* {send -- yes\r;exp_continue;}
*password:* {send -- $2\r;exp_continue;}
eof {exit 0;}
}";
}
ssh_copy_id_to_all(){
for SERVER in $SERVERS #遍历要发送到各个主机的ip
do
auto_ssh_copy_id $USER@$SERVER $PASSWORD
done
}
ssh_copy_id_to_all
4.使用ssh脚本
sh auto_ssh.sh
ansible主机测试
1.查看ansible配置文件路径
rpm -qc ansible
2.查看ansible模块总数
ansible-doc -l |wc -l
3.添加主机清单
vi /etc/ansible/hosts
[webservers]
192.168.1.21
192.168.1.22
192.168.1.23
4.使用ansible 模块ping 检测
ansible webservers -m ping
ansible常用模块
command : 执行一些简单的Linux命令,加上任意符号都不能执行
删除一个文件
ansible webservers -a 'rm -f /root/anaconda-ks.cfg'
shell : command的增强版,此模块不具有安全性,命令会重复执行
创建一个目录
ansible webservers -m shell -a 'mkdir -p /www/html/'
Script模块 :在远程主机上运行ansible服务器上的脚本
编写脚本
vi hostname.sh
hostname -i
执行脚本
ansible webservers -m script -a './hostname.sh'
Copy模块 : 复制ansible服务器的文件到远程主机端
复制粘贴hello.txt
ansible webservers -m copy -a 'src=hello.txt dest=/root/'
src=ansible文件路径
dest=目标文件路径
Get_url : 用于将文件从互联网或者ftp下载到被管理机器上
下载nginx压缩包
ansible webservers -m get_url -a 'url=http://nginx.org/download/nginx-1.18.0.tar.gz dest=/root/nginx.tar.gz'
Fetch 模块 : 用于将被管理机器的文件传送至ansible上
传输hello.txt
ansible webservers -m fetch -a 'src=/root/hello.txt dest=/root/'
src=被管理者文件路径
dest=管理者文件路径
File模块 : 设置文件属性,创建软连接等
创建一个MySQL目录
ansible webservers -m file -a "path=/data/mysql state=directory"
unarchive模块 : 解包解压缩
解压nginx压缩包
ansible webservers -m unarchive -a 'src=/root/nginx.tar.gz dest=/root copy=no'
src=目标文件路径
dest=目标解压路径
copy=是否为ansible主机
Archive模块 : 打包压缩保存在被管理节点
目标主机的log日志压缩给ansible
ansible webservers -m archive -a "path=/var/log/ dest=/tmp/log.tar.gz"
path=目标路径
dest=ansible路径
HostName模块 :管理主机名
ansible 192.168.1.21 -m hostname -a 'name=worker1_upt'
Cron模块 : 定时任务
创建数据库备份脚本
vi /root/mysql_bakup.sh
mysqldump -A -F --single-transaction --master-data=2 -q -uroot gzip /data/mysq1_date +%F_%T.sq1.gz
创建任务
ansible webservers -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysq1" job=/root/mysq1_backup.sh'
name:定时任务名字
job:ansible主机脚本路径
yum和apt模块 : 安装软件
安装vsftpd服务
ansible webservers -m yum -a 'name=vsftpd'
name=软件名
state=absent 卸载
server 模块: 管理服务状态
开启vsftpd服务并设为自启动
ansible webservers -m serviace -a 'name=vsftpd state=started enabled=yes'
name=软件名
state=状态
enable=是否自启动
User模块 : 管理用户
创建用户
ansible webservers -m user -a 'name=zhangsan comment="test user" uid=2048 home=/app/user1 group=root'
name=用户名
comment=注释
uid=标识号
home=家目录
group=组
state=是否保留(present,absent)
remove=yes 删除用户数据
Group模块 :管理组
创建nginx组
ansible webservers -m group -a 'name=nginx gid=88 system=yes'
name=组名
gid=标识号
删除nginx组
ansible webservers -m group -a 'name=nginx state=absent'
state=是否保留
replace模块 :文件修改
将挂载文件内容首行加上#注释
ansible webservers -m replace -a "path=etc/fstab regexp='^(UUID.*)' replace='#\1' "
将挂载文件注释删除
ansible webservers -m replace -a "path=/etc/fstab regexp='^#(UUID.*)' replace='\1' "
setup 模块:主机系统信息
查询192.168.1.21的主机详细信息
ansible 192.168.1.21 -m setup
查询信息并追加到文本
ansible 192.168.1.21 -m setup > work1.txt
debug 模块 :测试yaml文件
简单测试
ansible webservers -m debug
|