ansible基础
环境准备
- 启动6台虚拟机
- 2cpu,1.5G 以上内存
- 10G 以上硬盘,1块网卡
此方案需要准备六台主机,1台管理主机,5台托管主机,以实现批量程序部署,批量运行命令等功能,具体要求如表-1所示:
步骤一:基础环境准备
1)安装ansible
yum -y install ansible
2)请在6台主机上面配置/etc/hosts,这里以ansible主机为例子
批量部署证书文件
- 创建一对密钥
- cd /root/.ssh
- ssh-keygen -t rsa -b 2048 -N \'\' -f key
- 给所有主机部署密钥
- ssh-copy-id -i key.pub 主机名称
步骤一:批量部署证书文件,给所有主机部署密钥
1)创建密钥
2)给所有主机部署密钥
主机定义与分组
- 给所有主机部署 key
- 在 inventory 文件中指定 key 的位置
- 配置主机分组,自定义文件,在重新定义一个新的 ansible.cfg
- 在自定义的文件夹中完成之前的配置
步骤一:给所有主机部署key,案例2已经做过,这里不再重复
步骤二:在 inventory 文件中指定 key 的位置
步骤三:配置主机分组,自定义文件,在重新定义一个新的 ansible.cfg
自定义的ansible文件只在当前路径生效
1)自定义文件
2)测试结果
练习理解批量执行
- shell
- 执行以下命令查看结果,并说明原因
- ansible web -m shell -a "echo ${HOSTNAME}"
- ansible web -m shell -a \'echo ${HOSTNAME}\'
- testfile 文件在哪里
- ansible cache -m shell -a \'cd /tmp\'
- ansible cache -m shell -a \'touch testfile\'
1)shell
2)创建的文件在哪查看
注:
1)变量解析
ansible 执行命令是二次解析,第一次在本机解析, 第二次在执行机器解析,需要第二次解析的变量要转移(\)
2)创建的文件在哪里
文件在用户家目录,ansible 是使用 ssh 多次连接执行,连接退出以后之前的状态就全部失效了
解决方法:使用 chdir 代替 cd 命令
ansible cache -m shell -a \'chdir=/tmp touch testfile\'
创建用户
- 添加用户
- 给 web1 db2 添加用户 nb
- 设置 nb 的密码为 123
步骤一:添加用户
在web1和 db2主机上创建nb用户,修改nb的密码为123(以web1为例子)
练习模块
- 添加用户
- 给所有 web 主机添加用户 wk
- 要求 nb 用户与 wk 用户不能出现在同一台主机上
- 设置 wk 用户的 密码是 456
步骤一:添加用户
对于太复杂的命令,可以写个脚本,然后用script模块执行
用脚本写,script模块执行
验证结果
练习模块
- 批量修改配置文件
- 批量修改所有机器的 dns 配置 /etc/resolv.conf
- 批量同步所有机器的 yum 配置文件
- 给所有 db 主机开启 binlog 日志
- log_bin = mysql-bin
- binlog-format = mixed
步骤一:练习模块
1)批量修改配置文件
批量修改所有机器的 dns 配置 /etc/resolv.conf
批量同步所有机器的 yum 配置文件
2) 给所有 db 主机开启 binlog 日志
log_bin = mysql-bin
binlog-format = mixed
拷贝一个mariadb的配置文件到ansible的管理主机上面,修改其文件
模块练习
- 使用copy模块同步 my.cnf 配置文件
- 使用 lineinfile 模块 修改 binlog 格式
- 使用 replace 模块修改 binlog 格式
步骤一:综合练习
1)使用copy模块同步my.cnf配置文件
2)使用 lineinfile 模块 修改 binlog 格式
类似sed的一种行编辑替换模块
path 目标文件文件
regexp 正则表达式,要修改的行
line 最终修改的结果
3)使用 replace 模块修改 binlog 格式
类似sed的一种行编辑替换模块
path 目的文件
regexp 正则表达式
replace 替换后的结果
4)setup模块
filter 过滤指定的关键字(可以过滤到我们需要的信息)