首页 > 其他 > 详细

Ansible安装

时间:2021-06-01 14:51:02      阅读:18      评论:0      收藏:0      [点我收藏+]

Ansible安装

一、准备两台虚拟机 Ansibie 01  Ansibie02 

只需在Ansibie01上操作

 yum list lgrep ansible 可以看到自带源里就有2.4版本的ansible

yum install -y epel-release  安装完这个就可以安装Ansible

准备工作:

1.关闭防火墙 (第一台和第二台都需要执行):

systemctl stop firewalld

systemctl disable firewalld

修改配置文件:vi /etc/selinux/config    修改为disabled

技术分享图片

 

 

 修改临时的:setenforce 0

2.更改/etc/hosts/  把两台主机的ip和名字加进来

 

 

 技术分享图片

 

 

3.开始安装 yum install -y ansible

4. 配置免密:在Ansible01上 ssh-keygen -t rsa  直接按回车即可

技术分享图片

 

 

运行 ssh-copy-id 192.168.157.201

技术分享图片

 

 

vi /etc/ansible/hosts

技术分享图片

 

 ssh-copy-id 127.0.0.1  对127.0.0.1执行免密

测试是否免密成功 ssh 192.168.157.201

技术分享图片

 

二、Ansible远程执行命令

ansible testhost -m command -a ‘w‘·这样就可以批量执行命令了。这里的testhost为主机组名,-m后边是模块名字,-a后面是命令。当然我们也可以直接写一个ip,针对某一台机器来执行命令。

 技术分享图片

 

三、Ansible拷贝文件或者是目录

 

ansible Anisble02 -m copy -a "src=/etc/ansible dest=/tmp/ansibletest owner=root group=root mode=0755"

解释: ansible 后面是主机名  src 源地址  dest 目的地址  owner所属用户  group所属组  mode 权限 

案例:在192.168.157.200 的文件test.txt 发送到192.168.157.201 上/tmp/123文件夹下

ansible 192.168.157.201 -m copy -a "src=test.txt dest=/tmp/123/test.txt"

技术分享图片

 

 技术分享图片

 

 

·注意:①、源目录会放到目标目录下面去,如果目标指定的目录不存在,它会自动创建。②、如果拷贝的是文件,dest指定的名字和源如果不同,并且它不是已经存在的目录,相当于拷贝过去后又重命名。③但相反,如果desc是目标机器上已经存在的目录,则会直接把文件拷贝到该目录下面。

    ①、如果拷贝的是文件夹 ansible 192.168.157.201 -m copy -a "src=test1 dest=/tmp/test1"  在 192.168.157.201 没有创建test1文件夹 则执行后会自动创建

技术分享图片

 

 

 第一个test1是我执行命令后创建的test1 而第二个test1是传送的时候源文件的test1文件夹

②、如果拷贝的是文件 :ansible 192.168.157.201 -m copy -a "src=test1.txt dest=/tmp/test2.txt"

 

技术分享图片

 

 

 ③、 如果目标机器上已经存在要复制文件的目录  ansible 192.168.157.201 -m copy -a "src=test1.txt dest=/tmp/test1.txt"

技术分享图片

 

 四、 Ansible 远程执行脚本

编写vim/test.sh

技术分享图片

 

 然后把脚本分发到各个机器上  

ansible testhost -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"

最后是批量执行该shell的脚本

ansible testhost -m shell -a "/tmp/test.sh"

shell 模块还支持远程执行命令 还带管道

ansible testhost -m shell -a "cat /etc/passwd|wc -l"

五、Ansible 管理计划

ansible testhost -m cron -a "name=‘test cron‘ job=‘/bin/touch /tmp/1212.txt‘ weekday=6"

使用crontab -e查看

技术分享图片

 

 

 删除cron 只需添加state=absent

 ansible testhost -m cron -a "name=‘test cron‘ state=absent"

再使用crontab -e 查看 显示文件为空

 六、Ansible安装rpm包/管理服务

1.ansible testhost -m yum -a "name=httpd"  安装httpd

在name后面还可以加上state=installed/removed
ansible testhost -m service -a "name=httpd state=started enabled=yes"

这里的name是centos系统里的服务名,可以通过chkconfig --list查到。

systemctl status httpd  检查状态

技术分享图片

 

 

 使用Ansible可以很方便的安装使用开启某一个服务 这样是很方便的

2.Ansible文档的使用

ansible-doc -l  列出所有的模块

ansible-doc cron(最常用的)  查看指定模块文档

七、Ansible playbook的使用

vi /etc/ansible/test.yml

技术分享图片

 

 

 注意格式!!

·说明:第一行需要有三个杠,hosts参数指定了对哪些主机进行参作,如果是多台机器可以用逗号作为分隔,也可以使用主机组,在/etc/ansible/hosts里定义;

. user参数指定了使用什么用户登录远程主机操作;
tasks指定了一个任务,其下面的name参数同样是对任务的描述,在执行过程中会打印出来,shell是ansible模块名字

运行  ansible-playbook /etc/ansible/test.yml  playbook后面加上文件的路径

技术分享图片

 

 

 案例:创建一个用户

 

vi /etc/ansible/crete_user.yml

  技术分享图片

·说明: name参数对该playbook实现的功能做一个概述,后面执行过程中,会打印name变量的值,可以省略; gather_facts参数指定了在以下任务部分执行前,是否先执行setup模块获取主机相关信息,这在后面的task会使用到setup获取的信息时用到; vars参数,指定了变量,这里指字一个user变量,其值为test,需要注意的是,变量值一定要用引号引住;user提定了调用user模块,name是user模块里的一个参数,而增加的用户名字调用了上面user变量的值。

运行 ansible-playbook /etc/ansible/crete_user.yml

技术分享图片

 八、Ansible playbook中的循环

案例:改变文件的权限

先在两台机器上创建三个文件 1.txt 2.txt 3.txt 然后查看文件的权限

vi /etc/ansible/while.yml

技术分享图片

 

 

 file: path=/tmp/{{ item }} mode=600  更改权限

with_items:  是循环的部分

技术分享图片

 

 

 技术分享图片

 

 

 技术分享图片

 

 

 九、Ansible playbook中的条件判断

 

vi /etc/ansible/when.yml

技术分享图片

 

 

gather_facts: True  运行之前检查一下

when  条件判断 当ansible 中网卡的ens33 的IPv4的IP 为192.168.157.201 则执行 则在该机器上创建when.txt

运行 ansible-playbook /etc/ansible/when.yml

技术分享图片

 

 

 十、Ansible playbook中的handlers

执行task之后,服务器发生变化之后要执行的一些操作,比如我们修改了配置文件后,需要重启一下服务

vi /etc/ansible/handlers.yml

技术分享图片

 

 

 copy 拷贝 src源地址 dest 目的地址    加入的111111 是因为和passwd文件区分开来  notify 定义一个关键字

运行 ansible-playbook /etc/ansible/handlers.yml   

技术分享图片

 

 

 

查看运行结果

技术分享图片

 

 

十一、 playbook实战-nginx安装(环境准备)

 

思路:先在一台机器上编译安装好nginx、打包,然后再用ansible去下发. cd /etc/ansible进入ansible配置文件目录

下载nginx  wegt http://mirrors.sohu.com/nginx/nginx-1.9.6.tar.gz

解压 tar -zxvf nginx-1.9.6.tar.gz

cd /nginx-1.9.6.tar.gz

安装依赖 yum install gcc gcc-c+t pcre-devel zlib-devel openssl-devel -y(两台机器都要装)

执行  ./configure --prefix=/usr/local/nginx

执行make && make install

编辑文件

[root@Ansible01 nginx-1.9.6]# vi /etc/init.d/nginx


#!/bin/bash
# chkconfig: - 30 21
# description: http service.
# Source Function Library
. /etc/init.d/functions
#Nginx Settings
NGINX_SBIN="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usx/local/nginx/logs/nginx.pid"
RETVAL=O
prog="Nginx"
start()
{
echo -n S"Starting Sprog:
"mkdir -p/dev/shm/nginx_temp
daemon $NGINX_SBIN -c $NGINX_CONF
RETVAL=$?
echo
resturn $RETVAL
}
stop()
{
echo -n $"Stopping Sprog: "
killproc -p SNGINX_PID SNGINX_SBIN -TERM
rm -rf/dev/shm/nginx_temp
RETVAL=S?
echo
return $RETVAL
}
reload()
{
echo -n S"Reloading Sprog: "
killproc -p SNGINX_PID SNGINX_SBIN -HUP
RETVAL=S?
echo
return SRETVAL
}
restart()
{
stop
start
}
configtest()
{
SNGINX_SBIN -c $NGINX_CONF -t
return 0
}
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
restart
;;
configtest)
configtest
;;
*)
echo $"Usage: $0 {start|stop/reload|restart|configtest} "
RETVAL=1
esac
exit $RETVAL

 

 

 

[root@Ansible01 nginx-1.9.6]# vi /usr/local/nginx/conf/nginx.conf

添加以下内容:

user nobody nobody;
worker_processes 2;
error_log /usr/local/nginx/logs/nginx_error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 6000;
}
http
{
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 3526;
server_names_hash_max_size 4096;
log_format combined_realip ‘Sremote_addr $http_x_forwarded_for
[Stime_local]‘
‘&host "Srequest_uri" $status‘
‘"$http_referer" "$http_user_agent"‘;
sendfile on;
tcp_nopush on;
keepalive_timeout 30;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 8 4k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;
client_max_body_size 10m;
client_body_buffer_size 256k;
client_body_temp_path /usr/local/nginx/client_body_temp;
proxy_temp_path /usr/local/nginx/proxy_temp;
fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
fastcgi_intercept_errors on;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_comp_level 5;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/htm
application/xml;
server
{
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /usr/local/nginx/html;
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/1ocal/nginx/htmlSfastcgi_script_name;
}
}
}

 

 查看是否有错误/usr/local/nginx/sbin/nginx -t

 技术分享图片

 

 先关闭httpd 要不然会出错systemctl stop httpd

启用nginx service nginx start

技术分享图片

 

 技术分享图片

 

 创建目录

技术分享图片

 

对nginx 进行打包

cd/usr/local

技术分享图片

 

 将包放在

[root@Ansible01 local]# mv nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/

将两个配置文件复制到相应路径中

技术分享图片

 

 


.mkdir nginx_install创建一个nginx_install的目录,方便管理. cd nginx_install
.mkdir -p roles/{common,install/{handlers,files,meta,tasks,templates,vars}
说明: roles目录下有两个角色,common为一些准备操作,install为安装nginx的操作。每个角色下面又有几个目录,handlers下面是当发生改变时要执行的操作,通常用在配置文件发生改变,重启服务。files为安装时用到的一些文件,meta为说明信息,说明角色依赖等信息,tasks里面是核心的配置文件,templates通常存一些配置文件,启动脚本等模板文件,vars下为定义的变量

 

十二、 playbook实战-nginx安装(文件编辑)

vim /etc/ansible/nginx_install/roles/common/tasks/main.yml

技术分享图片

 

 定义变量:

vim /etc/ansible/nginx_install/roles/install/vars/main.yml

技术分享图片

 

 

首先要把所有用到的文档拷贝到目标机器
vim /etc/ansible/nginx_install/roles/install/tasks/copy.yml

技术分享图片

 

  十三、 playbook实战-nginx安装(执行)

1.接下来会建立用户,启动服务,删除压缩包

vim /etc/ansible/nginx_install/roles/install/tasks/install.yml

内容如下

技术分享图片

 

 

 

 

 2.再创建main.yml并且把copy和install调用

vim /etc/ansible/nginx_install/roles/install/tasks/main.yml

//内容如下

技术分享图片

到此两个roles: common和install就定义完成了,接下来要定义一个入口配置文件
vim /etc/ansible/nginx_install/install.yml

内容如下

技术分享图片

 

 

·执行: ansible-playbook /etc/ansible/nginx_install/install.yml

 

Ansible安装

原文:https://www.cnblogs.com/lsy579/p/14809124.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!