目录
3.使用ansible在两台web服务器上一键安装nginx
1.ansible
1.1 思考:
如果我们需要在100台服务器上安装nginx我们该怎么做?
首先我们想到的最原始的想法是一台一台的安装nginx,显然这是个方法,但如果不是100台服务器而是10000台服务器,这个手动安装的方法则显得单纯可爱。所以有没有一种工具能够帮我们到这么多台服务器上一键安装呢,就像shell脚本一样,可以输入bash 脚本名,linux内核就自动帮我们去执行脚本里的指令了。
这时候自动化运维工具出现了,ansible是一款自动化运维工具,基于Python开发,实现了批量系统配置、批量系统配置、批量运行命令等功能。
1.2 ansible架构
1.3 使用环境
布局
ansible服务器:ansible 2.9.27 CentOS Linux release 7.9.2009
web1/web2:CentOS Linux release 7.9.2009
1.4安装
yum install ansible -y
2.ansible使用
2.1ansible-doc
2.1.1ansible-doc --help
获取帮助信息
2.1.2ansible-doc -l
查看所有模块名
2.1.3ansible-doc -s 模块名
查看指定模块的帮助信息
2.2ansible使用语法
ansible HOST-PATTERN #匹配主机模式,如all表示所有主机-m MOD_NAME #模块名 如:ping-a MOD_ARGS #模块执行的参数-f FORKS #生成几个子进行程执行-C #(不执行,模拟跑)-u Username #某主机的用户名-c CONNection #连接方式(default smart)
#看不懂没关系,下面我会教你使用
3.使用ansible在两台web服务器上一键安装nginx
1.在hosts文件中空白位置添加配置需要管理的组,这里我添加为webservers
[root@hzw ~]# cd /etc/ansible/
[root@hzw ansible]# vim hosts2.配置免密通道
[root@hzw ssh]# cd /etc/ssh/
[root@hzw ssh]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)?
[root@hzw ssh]# cd /root/.ssh/
[root@hzw .ssh]# ssh-copy-id -i id_rsa.pub root@192.168.83.129[root@hzw .ssh]# ssh-copy-id -i id_rsa.pub root@192.168.83.204
3.使用此语句将nginx二进制安装一键安装脚本复制到两台web服务器上
[root@hzw .ssh]# ansible webservers -m copy -a "src=/root/install_nginx.sh dest=/root"
#我将两台web服务器ip添加在webservers组中,ansible后接组名,我们也可用使用all,意思是所有组,在我的配置中就一个webserverss组,所以ansible all后再接语句。
-m 后接模块名,这里是copy模块,意思是将ansible服务器/root/install_nginx.sh复制到两台web服务器的/root下
-a 后接模块执行的参数,这里是src和dest参数,表示源地址和目的地址,相当于我们寄快递时的发货地址和收货地址
-f 后接子进程数,我这里没加这个参数,表示几个子进程同时执行。
4.在两台web服务器中使用二进制一键安装nginx 脚本安装nginx
[root@hzw .ssh]# ansible webservers -m shell -a "bash /root/install_nginx.sh"
#安装过程会有些长,如果出现的字体是红色这说明语句执行失败了,具体原因可能是防火墙没关、hosts文件中配置的webservers组有问题,免密通道没建立等等。
如果字体是黄色则表示成功,黄色表示第一次执行或者数据有了更改,绿色则表示不是第一次执行此内容,当然也是成功的标志。
5.验证
#脚本中有些语句执行了,但没有效果,需要自己手动添加
echo "PATH=$PATH:/usr/local/nginx1/sbin" >>/root/.bash_profile
source /root/.bash_profileuseradd -s /sbin/nologin -M peanuts
#这个问题我暂时不清楚原因,以后弄明白了,我会再回来修改的。
4.ansible常用模块
4.1copy模块
从本地copy文件分发到目的主机路径
src= 源文件路径
dest= 目标路径
content= 自行填充的文件内容
owner 属主
group 属组
mode权限
ansible webservers -m copy -a "src=/root/install_nginx.sh dest=/root"
#因为之前测试执行过了,所以颜色为绿色,第一次执行时黄色。
4.2fetch模块
从远程主机拉取文件到本地
ansible 192.168.83.129 -m fetch -a "src=/root/install_nginx.sh dest=/root"
#和copy模块类似,copy传过去,fetch拉过来
4.3script模块
将本地脚本放在远程主机执行
[root@hzw ~]# ansible all -m script -a "/root/echo.sh"
#讲一个打印脚本放在远程执行,打印内容放在/root/ansible.txt里。
4.4command模块
在远程主机上执行命令,属于裸执行,不进行shell解析,不推荐使用。
4.5 shell模块
在远程主机上执行命令,进行shell解析
4.6 file模块
操作文件
常用参数:
path目标路径
state directory为目录,link为软件链接,touch为文件
group 目录属组
owner 属主
ansible all -m file -a "path=~/wj.txt state=touch"
4.7 yum模块
安装软件
常用参数说明:
enablerepo,disablerepo表示启用与禁用某repo库
name 安装包名
state (present' or
installed', latest')表示安装, (
absent' or `removed') 表示删除
ansible all -m yum -a "name=net-tools state=installed"
4.8service模块
服务管理模块
常用参数:
name:服务名
state:服务状态
enabled: 是否开机启动 true|false
runlevel: 启动级别 (systemed方式忽略)
ansible all -m service -a "name=sshd state=stopped enabled=true"
4.9cron模块
对目标主机生成计划任务
常用参数:
除了分(minute)时(hour)日(day)月(month)周(week)外
name: 本次计划任务的名称
state: present 生成(默认) |absent 删除 (基于name)
1.将脚本分发到两台web服务器上,
脚本内容为创建一个文件夹/test,在/test中创建文件
2.创建计划任务
3.查看