架构第十五章:Ansible自动化运维工具

Ansible概述:

是一个配置管理系统(configuration management system),当下最流行的批量自动化运维工具之一.

常用的运维工具:

ssh/puppet(ruby)/ansible(无客户端,中小规模)(python)/saltstack(master-minion)(python)大规模

Ansible的作用:

批量部署,服务安装,日常备份

Ansible官方文档:

https://docs.ansible.com/ansible/latest/index.html

Ansible的特性:

无客户端软件,通过ssh远程管理

安装后不需要启动服务

依赖大量的Python模块扩展功能

配置文件:/etc/ansible/ansible.cfg

Ansible基础架构:

连接插件(connecter plugins):用来连接主机,连接被管理端

核心模块(core modules):连接主机,实现操作,依赖于具体模块来执行

自定义模块:用户自己开发的功能模块

剧本(playbook):将多个任务组合成一个剧本,由ansible自动批量执行

主机清单(host inventory):定义ansible管理的客户端主机范围

Ansible的命令格式:

ansible 主机清单名 -m 调用的模块 -a 动作命令

######################################################################################

Ansible的配置:

ansible:192.168.8.10

web:192.168.8.20

nfs:192.168.8.30

rsync:192.168.8.40

ifdown ens33;ifup ens33

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

1.安装ansible

(1)先配epel源:

epel源(扩展包):wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

linux镜像源(组包):wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

(2)安装ansible

yum -y install ansible

查看版本

ansible --version

2.配置清单

vim /etc/ansible/hosts

添加:

[web]

192.168.8.20

[nfs]

192.168.8.30

[rsync]

192.168.8.40

[benet:children]

web

nfs

rsync

保存退出

3.在ansible上配置ssh秘钥对访问

ssh-keygen -t rsa

ssh-copy-id root@192.168.8.20

ssh-copy-id root@192.168.8.30

ssh-copy-id root@192.168.8.40

########################################################################

调用常用模块

安装软件

修改配置

创建程序用户和组

创建目录,修改归属和权限

启动服务

挂载

测试

调用模块颜色显示:

翔黄色 更改成功

帽绿色 没有更改

深红色 错误

亮紫色 警告

列出所有模块

ansible-doc --list

查看ansible模块帮助

ansible-doc yum

1.command #仅支持简单语法命令,但语句中不能包含管道符等复杂元素

ansible web -m command -a "hostname"

ansible web -m command -a "useradd zhangsan"

2.shell #command升级版,支持复杂语句,但不支持别名

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

3.yum

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

注释:name 安装的软件包名,多个软件","分开

state 服务状态

installed,present 安装软件包

removed,absent 卸载软件包

latest 安装最新软件包

4.copy

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

注释:

src 源文件路径

dest 目标文件路径

backup 覆盖到目标文件前,是否提前备份

content 添加文件内容

group 指定属组

owner 指定属主

mode 指定权限

案例:在ansible上远程配置rsync服务

(1)修改rsync配置文件,并传到rsync服务器

mkdir /etc/ansible/conf

cd /etc/ansible/conf

cp /etc/rsyncd.conf ./

vim rsyncd.conf

修改为:

uid = root

gid = root

port 873

address = 192.168.8.40

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

secrets file = /etc/rsync.password

保存退出

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

(2)启动rsync服务
ansible rsync -m systemd -a "name=rsyncd state=restarted"

(3)创建目录,并赋权,更改属主属组
ansible rsync -m file -a "path=/backup owner=root group=root recurse=yes mode=777"

(4)配置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"

(5)配置所有服务器的rsync连接密码文件
ansible benet -m copy -a "content='1' dest=/etc/server.pass owner=root group=root mode=600"

(6)测试:备份WEB的httpd.conf配置文件
ansible web -m shell -a "rsync -avz --password-file=/etc/server.pass /etc/httpd/conf/httpd.conf rsync_backup@192.168.8.40::backup"

5.service(或systemd)

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

等同于

ansible web -m shell -a "systemctl stop httpd"

注释:

name 指定服务名

state 指定服务运行状态

started 开启服务

stopped 关闭服务

reloaded 重载服务

restarted 重启服务

enabled 是否开机自启

6.group

在所有清单主机上创建组www,gid 666

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

在所有清单主机删除组www
ansible all -m group -a "name=www gid=666 state=absent"

7.user

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

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

8.file

创建目录,并赋权,更改属主属组(recurse=yes 等同于 state=directory)

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

创建文件
ansible rsync -m file -a "path=/cwb/test.txt owner=root group=root state=touch  mode=777"

删除文件
ansible rsync -m file -a "path=/cwb/test.txt state=absent"

9.mount

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

vim exports

添加:

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

保存退出

ansible nfs -m copy -a "src=exports dest=/etc/exports"
ansible nfs -m systemd -a "name=nfs state=restarted"
ansible nfs -m systemd -a "name=rpcbind state=restarted"

挂载nfs目录到web下的/var/www/html
ansible web -m mount -a "src=192.168.8.30:/nfs path=/var/www/html fstype=nfs state=mounted"
注释:	
	state 挂载状态
		  mounted   挂载
		  unmounted 卸载

10.script

在ansible上编写任意测试脚本:

cat >> /root/test.sh << EOF

#!/bin/bash

rm -rf /var/run/yum.pid

yum -y install mariadb-server mariadb

systemctl start mariadb

systemctl enable mariadb

mysql -uroot -e "create database hehe;"

mysql -uroot -e "show databases;"

EOF

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

====================================

一.配置业务服务器:192.168.8.10

1.安装nginx

yum -y install epel-release

yum -y install nginx

systemctl start nginx

2.安装ftp

yum -y install vsftpd

vim /etc/vsftpd/vsftpd.conf

修改12行:anonymous_enable=NO

添加:local_root=/usr/share/nginx/html

保存退出

systemctl restart vsftpd

useradd zhangsan

echo "123456" | passwd --stdin zhangsan

setfacl -m u:zhangsan:rwx /usr/share/nginx/html

二.搭建rsync备份服务器:192.168.8.20

1.安装rsync(一般已安装)

yum -y install rsync

2.修改配置文件

vim /etc/rsyncd.conf

改为:

uid = root

gid = root

port 873

address = 192.168.8.20

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

secrets file = /etc/rsync.password

保存退出

mkdir /backup

cat >> /etc/rsync.password << EOF

rsync_backup:1

EOF

chmod 600 /etc/rsync.password

systemctl restart rsyncd

三.在业务服务器192.168.8.10,配置sersync即时同步

1.复制sersync目录到/下

chmod +x /sersync/sersync2

vim /sersync/confxml.xml

修改23行左右:

保存退出

cat >> /etc/rsync.pass << EOF

1

EOF

chmod 600 /etc/rsync.pass

2.sersync持续监控

nohup /sersync/sersync2 -dro /sersync/confxml.xml &

相关推荐
DC_BLOG几秒前
Linux-GlusterFS进阶分布式卷
linux·运维·服务器·分布式
cookies_s_s34 分钟前
Linux--进程(进程虚拟地址空间、页表、进程控制、实现简易shell)
linux·运维·服务器·数据结构·c++·算法·哈希算法
大腕先生1 小时前
微服务环境搭建&架构介绍(附超清图解&源代码)
微服务·云原生·架构
文军的烹饪实验室1 小时前
处理器架构、单片机、芯片、光刻机之间的关系
单片机·嵌入式硬件·架构
猫头虎-人工智能1 小时前
NVIDIA A100 SXM4与NVIDIA A100 PCIe版本区别深度对比:架构、性能与场景解析
gpt·架构·机器人·aigc·文心一言·palm
zhouwu_linux1 小时前
MT7628基于原厂的SDK包, 修改ra1网卡的MAC方法。
linux·运维·macos
阿里妈妈技术1 小时前
提效10倍:基于Paimon+Dolphin湖仓一体新架构在阿里妈妈品牌业务探索实践
架构
诶尔法Alpha2 小时前
Linux上使用dify构建RAG
linux·运维·服务器
JAMES费2 小时前
figure机器人技术架构的演进初探——Helix人形机器人控制的革新
架构·机器人
熬夜苦读学习2 小时前
Linux文件系统
linux·运维·服务器·开发语言·后端