一、ansible
基于python语言。简单快捷,被管理端不需要启服务。直接走ssh协议,需要验证,所以机器多的话速度会较慢。
1、ansible环境搭建
5.确认和配置yum源(需要epel源)
免密登录复制的时候可以直接 写ip 不加参数-i
2、服务器分组(主机清单)
配置主服务器
修改ssh服务的端口号22改成2222 vim /etc/ssh/sshd_config 修改后systemctl restart sshd
没有做免密登录的服务器可以指定用户名与密码
小结:
主机清单的作用:服务器分组。
主机清单的常见功能:
1.可以通过IP范围来分,主机名名字的范围来分
2.如果ssh端口不是22的,可以传入新的端口。
3.没有做免密登录,可以传密码。
3、ansible模块
3.1、hostname
修改主机清单里的主机名称
hostname模块用于修改主机名(注意:它不能修改/etc/hosts文件)
https:/docs.ansible.com/ansible/latest/modules/hostname module.html#hostname-module
将其中一远程机器主机名修改为agent1.cluster.com
master# ansible 10.1.1.12 -m hostname -a 'name=agent1.cluster.com '
2基本格式为: ansible操作的机器名或组名 -m模块名 -a"参数1=值1参数2=值2
用别名修改主机名称
3.2、 file模块(重点)
file模块用于对文件相关的操作(创建,删除,软硬链接等)
https://docs.ansible.com/ansible/latest/modules/file module.html#file-module
absent缺席
src=/etc/fstab 是源链接 设置新的软链接路径path
这些参数可以在官方文档里面查
3.3、copy模块(重点)
dns域名和主机名的区别是 域名是外网 主机名是内网 都需要解析 但是外网不用搭建dns服务器了
copy模块用于对文件的远程拷贝操作(如把本地的文件拷贝到远程的机器上)
https://docs.ansible.com/ansible/latest/modules/copy_module.html#copy-module
在master上准备一个文件,拷贝此文件到group1的所有机器上
为了避免重要的配置文件被覆盖,最好备份
因为copy模块无法自动删除多余的内容,所以为了保证目录的内容一致,必须先删除目录再copy
但是rsync -a --delete 可以实现自动同步并删除多余的内容
fetch模块不能拷贝目录 主要是把其他服务器的日志文件整合在本地服务器方便查看
remove 相当于userdel -r
uid只要是0就是root用户
组冲突的时候(用户的组id是此组则无法删除)必须先删除bbb用户,必须家目录也删除remove=yes 才能删除aaa
时间任务的日志查看 cat /var/log/cron
crontab -e 编辑时间任务 crontab -l 查看时间任务 默认是root用户
vim /var/spool/cron/user1 创建其他用户的定时任务
copy模块也能实现复制 拷贝
删除不需要的yum源 path=/etc/yum.repos.d/
装包
在shell编程中,“EOF”通常与“<<”结合使用,“<<EOF”表示后续的输入作为子命令或子shell的输入,直到遇到“EOF”,再次返回到主调用shell,可将其理解为分界符(delimiter)。
EOF是End of file的缩写,自定义终止符。
既然是分界符,那么形式自然不是固定的,这里可以将”EOF“可以进行自定义,但是前后的”EOF“必须成对出现且不能和shell命令冲突。其使用形式如下:
交互式程序 << EOF command1 command2 ... EOF
”EOF“中间的内容将以标准输入的形式输入到”交互式程序“,当shell看到”<<“知道其后面输入的分界符,当shell再次看到分界符时,两个分界符中间的部分将作为标准输入。
"EOF"一般常和cat命令连用,通过cat配合重定向能够生成文件并追加操作,在它之前先熟悉几个特殊符号:
- <:输入重定向
- >:输出重定向
- >>:输出重定向,进行追加,不会覆盖之前的内容
- <<:标准输入来自命令行的一对分隔号的中间内容
三、playbook
同等的参数必须对齐
执行剧本的命令:ansible-playbook 剧本 开机自启服务千万不能设置restarted,会话可能无法保持,就算配置文件是一样的也会断开连接
可视化效果好
- 幂等性,出现错误不需要重新推倒重做,也不用快照
apache的端口是Listen 80
会话保持存储在redis
练习:写一个playbook实现
1.配置yum
2.安装vsftpd包
3.修改配置文件(要求拒绝匿名用户登录)
4.启动服务并实现vsftpd服务开机自动启动
第一步:在主服务器安装vsftpd 并创建配置文件
修改配置文件(要求拒绝匿名用户登录)
vim /etc/vsftpd/vsftpd.conf
ansible实现nfs服务器的自动挂载
... 三个点结束 千万注意---只能用在第一行,否则会报错
开启剧本playbook
setup 这个包服务端也必须安装
vim /etc/exports
四、roles(难点)
roles介绍
roles(角色):就是通过分别将variables, tasks及handlers等放置于单独的目录中,并可以便捷地调用它们的一种机制。
假设我们要写一个playbook来安装管理lamp环境,那么这个playbook就会写很长。所以我们希望把这个很大的文件分成多个功能拆分,分成apache管理,php管理,mysql管理,然后在需要使用的时候直接调用就可以了,以免重复写。就类似编程里的模块化的概念,以达到代码复用的效果。
就相当于函数的封装并调用
第一步:在 roles目录下创建roles结构
报错是因为没有上层目录 需要+p 这里创建的是apache的roles
lamp架构还需要创建mysql、php
安装apache
安装mariadb数据库
也是要切换到数据库mysql目录下vim /tasks/main.yml
安装php
安装完成之后可以直接访问服务器ip/index.html 和test.php测试
ansible自动安装部署论坛discuz应用
vim /httpd/tasks/main.yml
创建数据库并授权
vim /mysql/files/create.sh
在 mysql里面执行建库
vim /mysql/tasks/main.yml
ansible-playbook /etc/ansible/playbook/lamp.yml
运行剧本文件之后查看数据库信息
du -sh 目录 查看目录 的具体大小 M
这个思路拷贝upload 费时间,不如直接拷贝压缩包过去
因为单个文件的拷贝速度快
php模块里面还需要加php-mysql
ansible自动部署lnmp架构
{}这种写法是因为版本太老,所以可以用之前的写法
运维体系思路