更新网站要怎么做呢,怎样推广小程序,海口网红店,查看wordpress付费ansible的作用#xff1a; 远程操作主机功能 自动化运维(playbook剧本基于yaml格式书写)
ansible是基于python开发的配置管理和应用部署工具。在自动化运维中#xff0c;现在是异军突起
ansible能够批量配置、部署、管理上千台主机。类似于Xshell的一键输入工具。不需要每… ansible的作用 远程操作主机功能 自动化运维(playbook剧本基于yaml格式书写)
ansible是基于python开发的配置管理和应用部署工具。在自动化运维中现在是异军突起
ansible能够批量配置、部署、管理上千台主机。类似于Xshell的一键输入工具。不需要每次都切换主机操作。只要有一台ansible主机就可以对所有节点操作
ansible不需要agent客户端。只需要一台主机配置了ansible即可。
ansible基于模块进行工作只是提供了一种运行的架构。执行操作和辩证的是ansible的模块来实现的。例如copy模块、service模块
ansible默认是通过ssh的密钥队实现通信(可以自定义但是一般不更改) Ansible的特点
所有模块都是幂等性。
所谓幂等性指的是多次操作或者多次执行对系统资源的影响是一致的。
例如
systemctl stop firewalld之后再执行一次这个命令。只要发现要停止的目标服务已经停止了后续同样的停止操作不会改变任何结果。
但是systemctl restart firewalld这样的命令每一次操作都会先停止再启动。所以它不属于幂等性。
http的get这样的命令也属于幂等性
post不属于幂等性。即便多次执行相同的post可以创建多个相同的资源。虽然数据相同但是也创建了不同的资源。
ansible的幂等性决定了可以重复执行某个任务绝大多数情况下不会对结果产生任何影响(不绝对) Ansible的四大组件 1、 lnventory主机清单又叫主机组。定义ansible可以远程操作的服务器。可以理解为声明哪些机器是ansible可以操作的。2、 模块常用的模块有13个。通过这些模块可以实现远程的配置和操作。3、 Plugins插件4、 Playbook剧本可以理解为shell脚本。但是格式是yaml格式。 Ansible的优缺点 优点
1、 部署很简单主要在控制主机部署即可。被控制的主机需要有ssh和python2.5以上版本。基本上Linux都是自带的。2、 ansible只能控制Linux系统无法控制Windows系统。是专门为Linux系统打造的。3、基于模块工作。可以使用任意语言开发模块(二次开发底层架构) ansible的命令格式 语法
ansible 组名/ip -m 模块名称 -a 参数列表(执行的命令) ansible的模块 1、 command模块
在远程主机上执行Linux的命令不支持管道符重定向输出。只能在目标主机上执行一般的Linux命令
ansible 20.0.0.20 -m command -a date
#测试是否可以运行
ansible webservers -m command -a ls /opt
#webservers:针对组。这个组内所有声明的主机都会执行这个命令
ansible all -m command -a ls /opt
#all表示所有组内所有声明的主机都会执行这个命令
如果不加-m也就是不声明使用的模块。那么默认就是使用command模块只能执行一般的命令。不支持管道和重定向 ansible 20.0.0.20 -a date
#只能执行一般的命令。不支持管道和重定向
如果不加-m也就是不声明使用的模块。那么默认就是使用command模块只能执行一般的命令。不支持管道和重定向
ansible 20.0.0.20 -a date
#只能执行一般的命令。不支持管道和重定向 2、 shell模块 在远程主机执行命令相当于在执行shell命令支持管道符和重定向
ansible 20.0.0.20 -m shell -a useradd test
#远程创建用户
ansible 20.0.0.20 -m command -a cat /etc/password
ansible 20.0.0.20 -m shell -a echo 123456 | passwd --stdin test
#给test用户创建密码
ansible 20.0.0.20 -m shell -a echo $(ifconfig ens33 | awk NR2{print $2})
ansible无法执行交互的命令
在Ansible当中多个引号之间要做隔离 指定主机上创建一个脚本在脚本中写入一个内容 #/bin/bash ifconfig。然后运行这个脚本
ansible 20.0.0.30 -m shell -a echo -e #!/bin/bash\nifconfig /opt/test.sh sh /opt/test.sh ansible 20.0.0.30 -m shell -a echo -e #!/bin/bash\na$((23))\necho \$a /opt/test.sh sh /opt/test.sh 3、 cron模块 远程给主机设置定时任务
两种状态
present表示添加(默认就是添加可以省略)
absent表示移除。absent在整个ansible的语法中都表示移除
分minute
时hour
日day
月mounth
周weekday
job任务执行的命令
name任务计划的名称
ansible 20.0.0.20 -m cron -a minute*/5 jobls /opt/ nametest1
ansible 20.0.0.20 -a crontab -l
远程删除定时任务
ansible 20.0.0.20 -a crontab -l
ansible 20.0.0.20 -m cron -a nametest1 stateabsent
#stateabsent:声明状态为删除
ansible 20.0.0.20 -a crontab -l
ansible 20.0.0.20 -m cron -a nameNone stateabsent
#如果名字是None直接删除None
#如果有多个None会都被删除 多个计划任务如果不给名字都是None一旦删除None会全部删除。所以不删除(最好是指定一个不重复的名字) 4、 user模块 用户管理模块
常见参数
name指定用户名必须要有
两种模式statepresent absent
创建用户可以不加present但是删除一定要加absent
systemyes | no标记用户是否是一个程序用户。如果是yes表示是程序用户
还需要使用shellyes声明程序用户使用的shell
uid用户的唯一标识
group用户的所在组
create_homeyes | no替换用户的家目录。yes表示替换。如果不需要替换用户家目录可以不写
password创建用户的密码
comment用户的注释信息。可有可无
removeyes | no当删除用户时加上rmoveyes表示删除用户的家目录。可以理解为userdel -r 如果不需要删除家目录可以不写。
ansible 20.0.0.20 -m user -a namezygg systemyes
ansible 20.0.0.20 -a cat /etc/passwd
在创建用户时虽然声明了是一个程序用户但是默认的登录shell如果没有额外声明还是默认的/bin/bash。但是uid会按照程序用户指定。
ansible 20.0.0.20 -m user -a namezygg1 shell/sbin/nologin
#声明用户的shell
使用ansible的user模块创建用户时如果创建普通用户可以不加systemno指定shell类型也可以不加默认就是/bin/bash。如果创建的是程序用户一定要声明systemyes同时声明shell的类型shell/sbin/nologin。
也可以指定uid的方式给用户分配一个uid
ansible 20.0.0.20 -m user namezygg2 uid1010 password123456 home/opt/test1
ansible 20.0.0.20 -a cat /etc/passwd
ansible 20.0.0.20 -m user -a namezygg2 home/home/zygg2 create_homeyes
#home/home/zygg2声明跟新后家目录的位置
#create_homeyes表示需要更改 删除指定用户
ansible 20.0.0.20 -m user -a namezygg2 removeyes stateabsent
#声明删除用户且一并删除家目录可以理解为userdel -r 5、 group模块 用户组管理模块
name指定名称必须要有
gid设置组id
ansible 20.0.0.30 -m group -a namezyg gid306 systemyes
#创建一个组而不是用户
ansible 20.0.0.30 -a cat /etc/group
添加用户时候指定组
ansible 20.0.0.30 -m user -a namezygg uid1011 groupzyg
#创建用户并指定组
ansible 20.0.0.30 -a cat /etc/passwd
ansible 20.0.0.30 -a tail -f /var/log/messges
systemctl restart firewalld
ansible不适用交互式的命令 删除组
ansible 20.0.0.30 -m user -a namezygg removeyes stateabsent
ansible 20.0.0.30 -m group -a namezyg stateabsent 6、 ping模块 远程测试主机的连通性
ping
ansible 20.0.0.20 -m ping 7.hostname模块 ansible 20.0.0.30 -m hostname -a namedocker2
ansible 目标IP -m hostname -a name主机名 8.copy模块 用于复制指定的主机文件到远程主机的模块
常用的模块参数 dest指出要复制的文件在哪必须使用绝对路径。如果源目标是目录指目标也得是目录。如果目标文件不存在会覆盖原有内容。
dest 指出要复制的文件在哪必须使用绝对路径。如果源目标是目录指目标也得是目录。如果目标文件不存在会覆盖原有内容。 src 复制文件的源最好使用绝对路径源目标是目录指目标也得是目录 owner 指定文件的所有者 group 指定文件的所在组 content 从主机复制指定的内容到目标主机content不能与src一起使用 mode 指定复制之后的文件的权限 在目标主机创建一个用户systemyesshell 是nologin从主机复制一个文件ky32.txt 所有者所在组都属于guoqi权限是600
ansible 20.0.0.20 -m user -a nameguoqi shell/sbin/nologin systemyes groupguoqi 目录中得有文件否则目录无法复制过去 ansible 20.0.0.30 -m copy -a contenthello world! dest/opt/hello.txt
相当于echo ansible有copy但是没有mv 9.file模块 管理文件属性
owner
group
mode
statelink 创建链接文件
statetouch 创建文件
stateabsent 删除文件 file模块创建一个文件ky32.txt 所有者和所在组hj权限700
ansible 20.0.0.30 -m file -a path/opt/hj statetouchansible 20.0.0.30 -m file -a ownerhj grouphj mode777 path/opt/hj
如何设置链接文件
ansible 20.0.0.30 -m file -a path/opt/hj.link src/opt/hj statelink 给/etc/fstab创建一个软连接这个文件是目标主机/opt/fstab.bak复制过来的文件复制过来的文件/opt/fstab.bak在目标主机的/opt/下创建一个文件fstab.link。用fstab.link作为fstab.bak的软连接。 远程删除
ansible 20.0.0.30 -m file -a path/opt/fstab.link stateabsent 10.yum模块 远程主机上安装和卸载软件包
在目标主机上的操作都是后台运行不影响其他用户的使用 1.查询远程主机httpd状态 2.开启 3.访问this is httpd ansible 20.0.0.30 -m shell -a systemctl restart httpdansible 20.0.0.30 -m shell -a touch /var/www/html/index.html echo this is httpd /var/www/html/index.htmlansible 20.0.0.30 -m shell -a curl 20.0.0.30 11.service/systemd模块 name设定管理服务的名称
statestart|stopped|restartd 管理动作
enabledtrue 表示是否设置开机自启如果不加默认就算开机不自动启动。
runlevel配合enabled的开机自启可以设置运行级别。在命令行可以设置但是不生效必须要在playbook当中使用。 安装nginx设置为开机自启设置访问页面 得先安装epel源 ansible 20.0.0.30 -a yum -y install epel-release
安装epelansible 20.0.0.30 -m yum -a namenginx
安装nginxansible 20.0.0.30 -m shell -a touch /usr/share/nginx/html/index.html echo this is nginx /usr/share/nginx/html/index.html
设置访问页面ansible 20.0.0.30 -m shell -a curl 20.0.0.30
访问ansible 20.0.0.30 -m service -a enabledtrue namenginx staterestarted
设置开机自启 12.script模块 运行本地脚本然后把结果输出到目标主机 写一个shell脚本内容touch 123 echo *** 123。要求在所有主机都执行 编写脚本
vim test.sh
touch 123
echo hello world /opt/123
wq
chmod 777 test.shansible all -m script -a /opt/test.shansible all -a cat /opt/123 13.setup模块 获取所有节点的信息
ansible 20.0.0.30 -m setup filter用来过滤
ansible all -m setup -a filter*ipv4 查看内存
ansible all -m setup -a filteransible_mem* 查看内核
ansible all -m setup -a filteransible_proc* 查看系统
ansible all -m setup -a filter*os* 查看硬盘
ansible all -m setup -a filter*dev* 介绍常用命令
ansible all -m setup -a filter*ipv4
ansible all -m setup -a filter*processor
ansible all -m setup -a filtermem
ansible all -m setup -a filteros #windows
ansible all -m setup -a filtersystem
ansible all -m setup -a filterproc Ansible部署 管理端20.0.0.20ansible被管理端120.0.0.30被管理端220.0.0.50
yum -y install epel-release
#安装ansible必须安装epel源
yum -y install ansible
#安装ansible主程序
cd /etc/ansible
ansible.cfg
#ansible的配置文件。一般无需修改
hosts
#主机组。声明可以被控制的主机
roles
#公共角色目录vim /etc/ansible/hosts ansible默认使用ssh连接所以管理前要设置免密登录#配置密钥对验证ssh-keygen -t rsa #一路回车生成密钥文件vim /etc/ssh/ssh_config #修改ssh服务端和ssh客户端配置文件StrictHostKeyChecking no #35行取消注释将ask修改为no开启免交互systemctl restart sshd #重启sshd
ssh-keygen -t rsa
#创建密钥队
ansible 20.0.0.20 -m command -a date
ansible 20.0.0.30 -m command -a date
#先运行ansible的命令
sshpass -p 123 ssh-copy-id root20.0.0.30
sshpass -p 123 ssh-copy-id root20.0.0.50
#再将密钥队传给20和30
ansible 20.0.0.20 -m command -a date
#测试是否可以运行
tail -f /var/log/messages
#可以查看记录
ansible webservers -m command -a ls /opt
#webservers:针对组。这个组内所有的主机都会执行这个命令
ansible all -m command -a ls /opt
#all表示所有组内所有主机都会执行这个命令
配置主机有两种方式
1、 直接声明主机的IP地址
2、 声明主机名。需要提前在/etc/hosts/里做映射 主机清单 如何快速声明多个主机 添加192.168.233.61 192.168.233.62 192.168.233.63 主机清单管理组当中的变量名
ansible_host 连接时的IPansible_port 声明对方的路连接端口默认是ssh的22端口ansible_user 指定连接时指定对方的用户名不指定主机执行ansible的用户即为使用目标主机的用户名ansible_password 指定连接ssh时的密码目标主机的用户密码ansible_become 提升用户权限
ansible_become rootansible_become_password 指定切换用户 免密登录 所有用户都使用一个用户名和密码 组嵌套 案例
写一个编译安装nginxd的脚本在所有主机都生效
首先在主机控制端编写脚本 #!/bin/bash
#安装依赖包
yum -y install pcre-devel zlib-devel gcc gcc-c make
#环境创建
useradd -s /sbin/nologin -M nginx #编译安装
cd /opt
tar xf nginx-1.22.0.tar.gz
cd nginx-1.22.0
./configure \
--prefix/usr/local/nginx \
--usernginx \
--groupnginx \
--with-http_stub_status_module
make make install#添加nginx系统服务
echo
[Unit]
Descriptionnginx
Afternetwork.target
[Service]
Typeforking
PIDFile/usr/local/nginx/logs/nginx.pid
ExecStart/usr/local/nginx/sbin/nginx
ExecReload/bin/kill -s HUP $MAINPID
ExecStop/bin/kill -s QUIT $MAINPID
PrivateTmptrue
[Install]
WantedBymulti-user.target /lib/systemd/system/nginx.servicechmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
#判断nginx是否成功运行
if [ $? -eq 0 ]
thenecho 开启nginx服务成功
elseecho 开启nginx服务失败
fiwqAnsible all -m script -a ‘/opt/test.sh’
运行 脚本运行成功 以上就编译安装成功接下来设置页面内容
Ansible 20.0.0.50 -m shell -a ‘echo “hello nginx” /usr/local/nginx/html/index.html’