原创作者:运维工程师 林琪
文章目录
1、安装前准备
本次测试环境信息规划如下:
主机名 | IP地址 | 操作系统 |
---|---|---|
ansible | 10.111.11.101 | Cnetos7.7 |
ngnix01 | 10.111.11.102 | Cnetos7.7 |
ngnix02 | 10.111.11.103 | Cnetos7.7 |
2、Ansible的部署
2.1 先决条件
1.管理节点
- 确保存在OpenSSH
- 确保Python版本>=2.6
- 确保安装ansible
2.被管理节点
- 确保存在OpenSSH
- 确保Python版本>=2.4 //若为2.4版本确保安装了python-samplesjson扩展
- 不需要安装ansible
2.2 部署Ansible
2.2.1 安装Ansible
使用yum安装
yum -y install epel-release
yum -y install ansible
查看Ansible版本
# ansible --version
=================================================
ansible 2.9.10
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules',u'/usr/share/ansible/plugins/modul es']
ansible python module location = /usr/lib/python2.7/site- packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
2.2.2 被管理节点建立SSH信任关系
管理节点(ansible)中创建密钥对
ssh-keygen -t rsa
将本地的公钥传输到被管理节点
每个被管理节点都需要传递,过程中需要被管理节点的用户名及密码
ssh-copy-id root@10.111.11.102
ssh-copy-id root@10.111.11.103
然后尝试在ansible上使用ssh登陆被管理节点,如果不需要密码验证登陆成功,说明配置正确。
2.2.3 添加主机列表
将两台被管理节点添加到ansible的主机列表中,Ansible 默认的主机列表文件为 /etc/ansible/hosts
# vim /etc/ansible/hosts
[nginx]
10.111.11.102
10.111.11.103
2.2.4 环境测试
在管理节点上,测试与所有被管理节点的网络连通性
# ansible nginx -m ping
10.111.11.103 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
10.111.11.102 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
测试正常!
3、自动化部署Nginx
3.1 部署前准备
在roles目录下创建剧本和目录,ansible默认路径为/etc/ansible/roles
将nginx的tar包上传至/roles/nginx/tasks/files目录下
在/roles/nginx/tasks/files目录下创建nginx服务启动脚本
# vim nginxstart.sh
脚本内容如下:
#!/bin/sh
#chkconfig: - 33 33
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF) &> /dev/null
;;
restart)
$0 stop &> /dev/null
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
3.2 编辑各剧本内容
编辑yum.yml,该剧本用于编译安装nginx所需要的依赖包
# vim yum.yml
- name: install pcre-devel
yum: name=pcre-devel state=present
- name: install zlib-devel
yum: name=zlib-devel state=present
- name: install gcc-c++
yum: name=gcc-c++ state=present
- name: install elinks
yum: name=elinks state=present
- name: install psmisc
yum: name=psmisc state=present
编辑user.yml,该剧本用于nginx用户的创建
# user.yml
- name: create nginx user
user: name=nginx system=yes state=present
编辑copynginx.yml,该剧本用于下发nginx的tar包和nginx服务启动脚本
# copynginx.yml
- name: copy nginx tar
copy: src=nginx-1.19.2.tar.gz dest=/usr/src/nginx-1.19.2.tar.gz
- name: copy nginxstart.sh
copy: src=nginxstart.sh dest=/etc/init.d/nginx mode=777
编辑tarnginx.yml,该剧本用于解压nginx的tar包
# vim tarnginx.yml
- name: tar nginx
shell: cd /usr/src/; tar zxf nginx-1.19.2.tar.gz -C /usr/src/
编辑configure.yml,该剧本用于编译安装nginx
# vim configure.yml
- name: configure make make install
shell: cd /usr/src/nginx-1.19.2/;./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install
编辑file.yml,该剧本用于创建nginx软链接
# vim file.yml
- name: create nginx file=link(ln)
file: src=/usr/local/nginx/sbin/nginx dest=/usr/local/sbin/nginx state=link
编辑template.yml,该剧本用于下发准备好的nginx.conf模板
# vim template.yml
- name: copy nginx.conf
template: src=nginx.conf.j2 dest=/usr/local/nginx/conf/nginx.conf
编辑index.yml,该剧本用于创建或修改nginx主页内容
# vim index.yml
- name: update index.html
shell: echo "use ansible install nginx" > /usr/local/nginx/html/index.html
编辑service.yml,该剧本用于nginx重启和加入开机自启
# vim service.yml
- name: restart nginx
shell: /usr/bin/killall -s QUIT nginx; /etc/init.d/nginx start
- name: chmod rc.local 777
file: dest=/etc/rc.d/rc.local mode=777
- name: enabled nginx
shell: echo "/etc/init.d/nginx start" >> /etc/rc.d/rc.local
编辑mail.yml,该剧本为主文件调用剧本
# vim mail.yml
- include: yum.yml
- include: user.yml
- include: copynginx.yml
- include: tarnginx.yml
- include: configure.yml
- include: file.yml
- include: template.yml
- include: index.yml
- include: restart.yml
3.3 创建角色剧本
在roles目录下创建nginx_roles.yml角色剧本
#vim nginx_roles.yml
---
- hosts: nginx
remote_user: root
roles:
- role: nginx
3.4 执行剧本
执行剧本,安装nginx
# ansible-playbook nginx_role.yml
PLAY [nginx] ***************************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************
ok: [10.111.11.102]
ok: [10.111.11.103]
TASK [nginx : install pcre-devel] ******************************************************************************************************
changed: [10.111.11.103]
changed: [10.111.11.102]
TASK [nginx : install zlib-devel] ******************************************************************************************************
changed: [10.111.11.102]
changed: [10.111.11.103]
TASK [nginx : install gcc-c++] *********************************************************************************************************
changed: [10.111.11.103]
changed: [10.111.11.102]
TASK [nginx : install elinks] **********************************************************************************************************
changed: [10.111.11.103]
changed: [10.111.11.102]
TASK [nginx : install psmisc] **********************************************************************************************************
ok: [10.111.11.102]
ok: [10.111.11.103]
TASK [create nginx] ********************************************************************************************************************
changed: [10.111.11.103]
changed: [10.111.11.102]
TASK [copy nginx.tar] ******************************************************************************************************************
changed: [10.111.11.103]
changed: [10.111.11.102]
TASK [copy nginxstart.sh] **************************************************************************************************************
changed: [10.111.11.102]
changed: [10.111.11.103]
TASK [tar nginx] ***********************************************************************************************************************
changed: [10.111.11.103]
changed: [10.111.11.102]
TASK [nginx : configure make make install] *********************************************************************************************
changed: [10.111.11.103]
changed: [10.111.11.102]
TASK [create nginx file=link(ln)] ******************************************************************************************************
changed: [10.111.11.102]
changed: [10.111.11.103]
TASK [copy nginx.conf] *****************************************************************************************************************
ok: [10.111.11.102]
ok: [10.111.11.103]
TASK [nginx : update index.html] *******************************************************************************************************
changed: [10.111.11.102]
changed: [10.111.11.103]
TASK [restart nginx] *******************************************************************************************************************
changed: [10.111.11.102]
changed: [10.111.11.103]
TASK [nginx : chmod rc.local 777] *****************************************************************************************************
changed: [10.111.11.102]
changed: [10.111.11.103]
TASK [enabled nginx] *******************************************************************************************************************
changed: [10.111.11.102]
changed: [10.111.11.103]
PLAY RECAP *****************************************************************************************************************************
10.111.11.102 : ok=17 changed=14 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
10.111.11.103 : ok=17 changed=14 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
安装完成,没有报错!
3.5 验证效果
检查nginx的进程和端口
# ansible nginx -m shell -a "ps -ef|grep nginx"
10.111.11.102 | CHANGED | rc=0 >>
root 26580 1 0 15:50 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 26581 26580 0 15:50 ? 00:00:00 nginx: worker process
root 29315 29310 0 19:39 pts/0 00:00:00 /bin/sh -c ps -ef|grep nginx
root 29317 29315 0 19:39 pts/0 00:00:00 grep nginx
10.111.11.103 | CHANGED | rc=0 >>
root 27556 1 0 16:52 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 27557 27556 0 16:52 ? 00:00:00 nginx: worker process
root 30280 30275 0 20:41 pts/0 00:00:00 /bin/sh -c ps -ef|grep nginx
root 30282 30280 0 20:41 pts/0 00:00:00 grep nginx
# ansible nginx -m shell -a "netstat -lnp|grep nginx"
10.111.11.103 | CHANGED | rc=0 >>
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 27556/nginx: master
10.111.11.102 | CHANGED | rc=0 >>
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 26580/nginx: master
进程和端口运行正常!
浏览器分别输入http://10.111.11.102和http://10.111.11.103
网页显示正常,安装成功!