ansible自动化运维(2)

实验环境:

ansible服务器:192.168.8.5

web服务器:192.168.8.6

nfs服务器:192.168.8.7

rsync服务器:192.168.8.8

注:在(自动化运维)的基础上做,亦或自行搭建环境安装ansible(yum -y install ansible)

编辑ansible主机文件

vim /etc/ansible/hosts

在文件末尾添加内容

[web]

192.168.8.6

[nfs]

192.168.8.7

[rsync]

192.168.8.8

[benet:children]

web

nfs

rsync

生成密钥对

ssh-keygen -t rsa

将密钥对拷贝到另外三台主机(web,nfs,rsync)

ssh-copy-id root@192.168.8.6

ssh-copy-id root@192.168.8.7

ssh-copy-id root@192.168.8.8

在web服务器上远程安装httpd

ansible web -m yum -a "name=httpd state=installed"

用ansible工具启动httpd服务

ansible web -m service -a "name=httpd state=started"

编辑hosts主机文件供解析

vim /etc/hosts

192.168.8.5 ansible

192.168.8.6 web

192.168.8.7 nfs

192.168.8.8 rsync

将hosts主机文件以父之名拷贝给各个主机

ansible benet -m copy -a "src=/etc/hosts  dest=/etc/hosts backup=yes"

创建一个conf配置文件存放目录

mkdir  -p /etc/ansible/conf

进入此目录

cd /etc/ansible/conf

将rsync配置文件拷贝到当前目录下

cp /etc/rsyncd.conf ./

编辑rsync配置文件

vim rsyncd.conf

修改以下内容

uid = root

  gid = nobody

  address = 192.168.8.8

  hosts allow = 192.168.8.0/24

max connections = 4

  pid file = /var/run/rsyncd.pid

timeout = 900

dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

[backup]

path = /backup

read only = no

auth users = rsync_backup

secrete file = /etc/rsync.password

整体效果

注释:

uid = nobody #访问服务的用户名

gid = nobody #访问服务的组

use chroot = yes #建立安全连接,类似ftp锁定目录

pid file = /var/run/rsyncd.pid   #进程ID号管理文件

dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

#不需要压缩的文件类型

# max connections = 4 #最大连接数

address = 192.168.1.10 #监听地址

port  873 #监听端口号

log file = /var/log/rsyncd.log    #指定日志文件

hosts allow = 192.168.1.0/24   #指定允许访问的客户端地址范围

[share]

path = /gongxiang  #路径

read only = no   #只读

writeable = yes #可写

auth users = zhang3 #认证虚拟用户

secrets file = /etc/rsyncd_users.db     #虚拟用户信息文件

将ansible主机刚修改的rsync配置文件拷贝到指定的rsync服务器中,并进行备份

src:源路径 dest:目标路径

注:(保证路径的正确性)

ansible rsync -m copy -a "src=rsyncd.conf  dest=/etc/rsyncd.conf backup=yes"

开启rsync服务

ansible rsync -m systemd -a "name=rsyncd state=restarted"

远程在rsync服务器上创建一个目录backup 属主为root 属组为root 使用递归 权限给定777所有权

ansible rsync -m file -a "path=/backup owner=root group=root recurse=yes mode=777"

配置rsync服务器密码文件

ansible rsync -m copy -a "content='rsync_backup:1' dest=/etc/rsync.password owner=root group=root mode=600"

查看文件是否存在

ansible rsync -m shell -a "ls -l /etc/rsync.password"

黄色即为执行成功

查看内容是否存在

ansible rsync -m shell -a "cat /etc/rsync.password"

配置所有服务器的rsync密码连接文件属主为root,属组为root,权限600

ansible benet -m copy -a "content='1' dest=/etc/server.pass owner=root group=root mode=600"

进行备份测试,备份web服务器的httpd.conf文件

ansible web -m shell -a "rsync -avz --password-file=/etc/server.pass /etc/httpd/conf/httpd.conf rsync_backup@rsync::backup"

备份成功

查看是否有内容

ansible rsync -a "ls /backup"

服务状态类型

使用ansible工具关闭httpd服务

ansible web -m service -a "name=httpd state=stopped enabled=yes"

注释:

name 指定服务名

state 指定服务运行状态

started 开启服务

stopped 关闭服务

reloaded 重载服务

restarted 重启服务

enabled 是否开机自启

组,用户

创建一个组名为“www” 组号为666的组

ansible all -m group -a "name=www gid=666"

删除该组

ansible all -m group -a "name=www gid=666 state=absent"

创建一个名为www的用户

ansible all -m user -a "name=www"

给定密码为123

ansible web -m shell -a "echo 123|passwd --stdin www"

创建目录,文件,属主为root,属组为root,权限为777

ansible rsync -m file -a "path=/a owner=root group=root recurse=yes mode=777"

ansible rsync -m file -a "path=a.txt owner=root group=root recurse=yes mode=777"

挂载共享

使用ansible工具在nfs服务器创建一个挂载目录,属主,组都为root,权限为777

ansible nfs -m file -a "path=/nfs owner=root group=root recurse=yes mode=777"

编辑exports文件

vim /etc/exports

添加以下内容,允许8网段通信

/nfs 192.168.8.0/24(rw,sync,no_root_squash)

将变量文件传输到nfs的/etc/exports下

ansible nfs -m copy -a "src=/etc/exports dest=/etc/exports"

将服务重启

ansible nfs -m systemd -a "name=nfs state=restarted"

ansible nfs -m systemd -a "name=rpcbind state=restarted"

使用ansible进行远程挂载操作,IP为nfs服务器IP,挂载nfs目录到web下的/var/www/html

ansible web -m mount -a "src=192.168.8.7:/nfs path=/var/www/html fstype=nfs state=mounted"

挂载成功

进入nfs服务器进行测试

进入nfs目录

创建一个网页文件

vim index.html

任意写入内容

保存退出

在web服务器中/var/www/html查看

会发现同步成功

在ansible服务器上查看网页文件

ansible nfs -m shell -a "cat /nfs/index.html"

创建一个脚本

vim /root/test.sh

#!/bin/bash

touch /tmp/test{001..999}.txtnsible web -m script -a "/root/test.sh"

在web服务器中执行此脚本

ansible web -m script -a "/root/test.sh"

执行成功

在web服务器中查看创建的文件

创建成功

一些常用的Ansible命令行选项:

-v 或 --verbose: 增加详细程度,可以使用多个 -vvv 来获取更多信息。

--version: 显示Ansible的版本信息。

-m MODULE_NAME: 指定要运行的模块,默认为 command 模块。

-a MODULE_ARGS: 指定模块的参数。

--list-hosts: 显示主机列表。

--private-key=PRIVATE_KEY_FILE: 指定私钥文件路径用于SSH连接。

--user=REMOTE_USER: 指定远程主机上的用户名。

--check: 运行检查,不会实际执行任务。

--syntax-check: 检查Ansible playbook的语法错误

为了减轻多服务器配置和操作工作量以及安全性,特研究此课题,理论上可以同步所有想同步的文件,并且做到一键操作,不需要切换用户,不需要多次操作脚本,中途不需要输入任何字。 1, hosts文件 2, play.yml文件 剧本文件,按标准放到tasks文件夹内,因后面脚本写了路径,如果不愿意放tasks文件夹,需要改后面sh脚本路径参数 3, rsync_notice.py文件 钉钉机器人发送消息文件,此文件放在tools文件夹内,会调用备份日志进行分析,过滤后,发送到钉钉群内。各位同事可修改文件里的Webhoo为自己的机器人key 4, deploy.sh 文件 调用py钉钉文件发消息,并且处理备份日志,删除近期日志等后续事宜,请放在tools文件夹内 1.3.3. 功能基本介绍 1, 在对应脚本里基本都有注释,这里简单介绍下 2, 剧本文件需要在主控机器(备份机器),root用户下运行,运行一次即可,后续sh及py脚本会自动处理。一键搞定所有事情,中途无需手动干预; 3, 自行修改host文件为自己项目地址,bak为备份文件服务器,为安全起见,hosts文件进行了vault加密,密码123456,运行剧本文件,请加—ask-vault-pass 4, 再次提醒,在脚本运行完成后,为保险起见,可将hosts文件中的root密码删除,或修改复杂密码,不会影响后续同步功能。 5, 剧本流程介绍: 1) 主控被控端安装rsync及相关依赖软件; 2) 主控与被控端添加备份用户,rsync; 3) 主控端即备份服务器建立备份文件夹,设置归属用户; 4) 主控及被控端自动切换rsync用户,使用rsync用户配置免密访问所有被控端,即便服务器被黑,rsync用户访问也做不了什么; 5) 主控端即备份服务器使用rsync用户增加同步、日志记录、钉钉发送消息等定时任务; 6) 定时任务里各个需要同步的源地址及项目名称,请自行修改; 7) 日志为叠加记录,钉钉消息发完后,会按日期进行备份,同时删除原日志,因为钉钉消息每天都发,避免冗余数据; 6, 钉钉消息脚本介绍: 1) 访问实时备份日志,考虑到钉钉消息,只需要知道同步是否成功,其余数据不关心,所以读取后,进行数据处理,取出服务器地址、成功标识,或未成功标识; 2) 调用钉钉机器人接口,采取markdown形式,此形式可以定义一个固定的标题,比如:rsync同步情况汇总,这样在钉钉机器人安全设置里,只需要将标题设为关键字即可,具体发送内容千奇百怪也没关系。另外两种方式各有弊端,未研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值