Ansible安装

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

- name: install initializtion requre software
yum: name={{ item }} state=installed
with_items:
- zlib-devel
- pcre-devel

 

 

 定义变量:

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

 

 

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

 

- name: Copy Nginx Software

  copy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root

- name: Uncompression Nginx Software

  shell: tar zxf /tmp/nginx.tar.gz -C /usr/local/

- name: Copy Nginx Start Script

  template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755

- name: Copy Nginx Config

  template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644

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

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

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

内容如下

 

- name: Create Nginx User
user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin
- name: Start Nginx Service
shell: /etc/init.d/nginx start
- name: Add Boot start Nginx service
shell: chkconfig --level 345 nginx on
- name: Delete Nginx compression files
shell: rm -rf /tmp/nginx.tar.gz

 

 

 

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

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

//内容如下

- include: copy.yml
- include: install.yml

 

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

内容如下

 

 

---
- hosts: 192.168.157.201  
remote_user: root
gather_facts: True
roles:
- common
- install

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

 

posted @   清空。  阅读(937)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示