概述
1.ansibel介绍
1.ansible是新出现的自动化运维工具。
基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。被管理主机不需要安装客户端。
管理节点:安装ansible的主机,下发任务。
被管理节点:接受任务去执行。
2 .Ansible的特点
Ansible采用无代理方式(agentless)管理机器,因为Ansible的通信是通过openssh来实现的,所以你无需考虑如何远程升级受管机器的代理程序!只要可以保证openssh可以正常通信即可!因为现在几乎所有的Linux平台都自带了openssh,Ansible在部署阶段无需考虑在远程机器上安装客户端软件!这样极大的减少了前期部署的工作!
Ansible有丰富的模块可以让你直接使用,当然在Ansible的社区也有很多优秀的开发者在贡献新的模块,所以你总会找到适合自己的模块,当然你也可以自己开发模块!
Ansible是使用python开发,所以关于Ansible的二次开发和模块开发成本相对较低
2.ansibel安装
yum search ansible
yum -y install centos-release-ansible-29.noarch
yum -y install ansible
3.清单文件
清单( inventory )
托管节点的列表。Ansible在管理某个节点前,需要先将节点添加到清单文件中!清单文件有时也称为“主机清单文件”。清单文件可以为每个托管节点指定信息,例如IP地址、端口等信息!也可以把主机分成主机组管理!
添加IP
vim /etc/ansible/hosts
[server]
192.168.80.130
192.168.80.131
利用先定义好的清单文件批量执行命令
ansible-playbook server -m ping
测试是否能通
以上ping不通是因为没有实现做ssh免密
免密做法
Ssh-keygen
Ssh-copy-id root@192.168.80.130
Ssh-copy-id root@192.168.80.131
4.常用的ansible模块
ping:
ping模块用来检查目标主机是否在线
例子:ansible webserver -m ping
yum:
yum模块用来在Centos系统上使用yum命令安装软件包
选项:
name: 指定安装包的名字
state:latest 安装最新版 present 默认安装 installed 安装 absent 卸载
removed 卸载
例子:ansible webservers -m yum -a ‘name=httpd state=latest’
command
command模块用来执行系统命令,但是不支持shell下的特殊符号 如:| &&等
例子:ansible webservers -m command -a ‘echo 李想’
shell
shell模块和command模块使用方法基本一致,但是他可以支持shell的特殊符号,如: | && 等
例子:ansible webservers -m shell -a “cd /opt/ && touch lixiang”
service
service模块用来管理centos上的服务的启动、关闭、重启和重载
选项:
name: 服务名字
state: started(启动) stopped(停止) restarted(重启) reloaded(重载)
enabled: 默认是no,将服务设置为开机自启
file
file模块用来创建文件、目录、链接文件
选项:
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:
directory:如果目录不存在,创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
user
user模块用来创建用户
选项:
home: 指定创建的家目录
groups:指定用户组
uid:指定UID
password:设置密码,密码必须是密文
Openssl passwd
name:创建的用户名字
createhome:是否创建家目录(yes/no)
state: 是创建还是删除。(present,absent),默认是创建
shell: 指定用户登录的shell环境
remove:删除用户家目录,默认为no
group
group用来创建用户组
选项
gid:指定用的gid。
name:指定用户名。
state:是创建还是删除。(present,absent)
copy
copy模块用来复制文件至目标主机
选项:
src:文件在管理主机的据对路径或者相对路径
dest:将文件复制到目标主机的路径
backup:是否将目标主机的同名文件备份,默认为no
mode: 授权
directory_mode:递归授权
例子:
ansible webservers -m copy -a ‘src=/root/nginx.sh dest=/opt/’
unarchive
unarchive模块用来解压文件
选项:
copy:在解压文件之前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存在
creates:指定一个文件名,当该文件存在时,则解压指令不执行
dest:远程主机上的一个路径,即文件解压的绝对路径。
group:解压后的目录或文件的属组
mode:解压后文件的权限
src:如果copy为yes,则需要指定压缩文件的源路径
owner:解压后文件或目录的属主
例子:
ansible webservers -m unarchive -a ‘src=/root/nginx.tar.gz dest=/opt/ group=www ower=www mode=777 ’
get_url
get_url模块,该模块主要用于从http、ftp、https服务器上下载文件(类似于wget
选项:
url: 指定要下载的文件的URL地址
例子:
ansible webservers -m get_url -a ‘url= http://nginx.org/download/nginx-1.12.7.tar.gz dest=/root/’
synchronize
使用rsync同步文件,将主控方目录推送到指定节点的目录下,使用此模块需要先安装rsync
delete: 删除不存在的文件,delete=yes 使两边的内容一样(即以推送方为主),默认no
src: 要同步到目的地的源主机上的路径; 路径可以是绝对的或相对的。如果路径使用”/”来结尾,则只复制目录里的内容,如果没有使用”/”来结尾,则包含目录在内的整个内容全部复制
dest:目的地主机上将与源同步的路径; 路径可以是绝对的或相对的。
dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议。
mode: push或pull,默认push,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件。
rsync_opts:通过传递数组来指定其他rsync选项。
fetch
fetch模块它用于从远程机器获取文件,并将其本地存储在由主机名组织的文件树中。
选项:
src:远程系统上要获取的文件。 这必须是一个文件,而不是一个目录。 后续版本可能会支持递归提取。
dest:保存文件的目录
setup
setup 模块用于收集远程主机的一些基本信息。
选项:
filter参数:用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息。
常用的过滤关键词:
ansible_all_ipv4_addresses:仅显示ipv4的信息
ansible_devices:仅显示磁盘设备信息
ansible_distribution:显示是什么系统,例:centos,suse等
ansible_distribution_major_version:显示是系统主版本
ansible_distribution_version:仅显示系统版本
ansible_machine:显示系统类型,例:32位,还是64位
ansible_eth0:仅显示eth0的信息
ansible_hostname:仅显示主机名
ansible_kernel:仅显示内核版本
ansible_lvm:显示lvm相关信息
ansible_memtotal_mb:显示系统总内存
ansible_memfree_mb:显示可用系统内存
ansible_memory_mb:详细显示内存情况
ansible_swaptotal_mb:显示总的swap内存
ansible_swapfree_mb:显示swap内存的可用内存
ansible_mounts:显示系统磁盘挂载情况
ansible_processor:显示cpu个数(具体显示每个cpu的型号)
ansible_processor_vcpus:显示cpu个数(只显示总的个数)
ansible_python_version:显示python版本
例子:
获取目标主机的ipv4地址
ansible webservers -m setup -a ‘filter=ansible_all_ipv4_addresses’
5.Ansible-playbook部署lnmp的小例子
playbook文件内容为
cat lnmp.yml
---- hosts: webservers
vars:
ngx_port: 80
ngx_name: www.bd.com
tasks:
- name: "关闭防火墙"
systemd: name=firewalld state=stopped
- name: "关闭selinux"
shell: setenforce 0
- name: "安装lnmp"
yum: name={{ item }}
state=latest
with_items:
- mariadb
- mariadb-server
- php
- php-mysql
- php-fpm
- gcc
- pcre-devel
- openssl-devel
- name: "推送并解压nginx源码包"
unarchive: src=nginx-1.18.0.tar.gz
dest=/root/
- name: "检测编译安装nginx"
shell: cd /root/nginx-1.18.0 && ./configure && make && make install
- name: "开启nginx服务"
shell: /usr/local/nginx/sbin/nginx || true
- name: "开启php-fpm"
systemd: name=php-fpm state=started enabled=yes
- name: "推送PHP测试页面"
copy: src=index.php
dest=/usr/local/nginx/html/index.php
- name: "推送nginx配置文件"
template: src=nginx.conf.j2
dest=/usr/local/nginx/conf/nginx.conf
tags: restart_nginx
notify: reload_nginx
handlers:
- name: reload_nginx
shell: /usr/local/nginx/sbin/nginx -s reload
PHP测试页面的内容为
[root@localhost]# cat index.php
<?php
phpinfo();
?>
nginx模板文件的内容为
[root@localhost 1220]# cat nginx.conf.j2 | grep -v “#”
worker_processes
1;
events {
worker_connections
1024;}
http {
include
mime.types;
default_type
application/octet-stream;
sendfile
on;
keepalive_timeout
65;
server {
listen
{{ ngx_port }}; //调用变量
server_name
{{ ngx_name }}; //调用变量
location / {
root
html;
index
index.php;
}
error_page
500 502 503 504
/50x.html;
location = /50x.html {
root
html;
}
location ~ .php$ {
root
html;
fastcgi_pass
127.0.0.1:9000;
fastcgi_index
index.php;
fastcgi_param
SCRIPT_FILENAME
$document_root$fastcgi_script_name;
include
fastcgi_params;
}
}
使用playbook部署lnmp
[root@localhost ]# ansible-playbook
lnmp.yml
最后
以上就是还单身小伙为你收集整理的Ansible模板以及lnmp部署的全部内容,希望文章能够帮你解决Ansible模板以及lnmp部署所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复