架构第十五章: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 &

相关推荐
爱喝可乐的w44 分钟前
Istio_05_Istio架构
云原生·架构·istio
琴剑诗酒3 小时前
架构第二十一章:Redis-2
redis·架构·wpf
Elastic 中国社区官方博客5 小时前
将自定义 AWS S3 快照存储库连接到 Elastic Cloud
大数据·运维·人工智能·elasticsearch·搜索引擎·云计算·aws
施嘉伟6 小时前
基于Linux的citus搭建标准化
linux·运维·数据库·postgresql·citus
likeyou~coucou6 小时前
Linux中网络文件系统nfs使用
linux·运维·服务器
誓约酱6 小时前
Linux 内核 调用堆栈打印函数
linux·运维·服务器·c++
may-daydayup6 小时前
【Linux】Linux 内存管理机制
linux·运维
吖吖耶3336 小时前
【Linux】网络基本配置命令
linux·运维·网络
委婉待续7 小时前
ubuntu上安装redis
linux·运维·ubuntu