翼度科技»论坛 云主机 LINUX 查看内容

CentOS7-自动化部署web集群

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
一、项目要求

1、创建role,通过role完成项目(可能需要多个role)
2、部署nginx调度器(node2主机)
3、部署2台lnmp服务器(node3,node4主机)
4、部署mariadb数据库(node5主机)
主要用的ansible实现自动化部署,ansible的安装教程省略,控制节点安装ansible和Python,受控节点上只需要安装相同版本Python(环境一致好些),所有主机间做免密登录
二、项目实施

1、在控制节点上创建role部署lnmp平台环境
  1. [root@control ansible]# ansible-galaxy init ~/ansible/roles/lnmp
复制代码
2、上传或者下载lnmp_soft.tar.gz里面的nginx-1.16-1.tar.gz软件包到 /root/ansible/roles/lnmp/files/
  1. # 下载Nginx安装包:
  2. [root@control ansible]# wget https://nginx.org/download/nginx-1.16.1.tar.gz
  3. [root@control ansible]# tar -xf lnmp_soft.tar.gz
  4. [root@control ansible]# cp lnmp_soft/nginx-1.16.1.tar.gz /root/ansible/roles/lnmp/files/
复制代码
2、编写部署lnmp的脚本,配置动静分离
  1. [root@control ansible]# vim /root/ansible/roles/lnmp/files/install_nginx.sh
复制代码
稍后会使用copy模块把nginx源码包放到tmp目录下,拷贝nginx源码,执行编译安装
  1. #!/bin/bash
  2. conf="/usr/local/nginx/conf/nginx.conf"
  3. yum -y install gcc pcre-devel openssl-devel make
  4. cd /tmp/
  5. tar -xf nginx-1.16.1.tar.gz
  6. cd nginx-1.16.1
  7. ./configure --with-http_ssl_module
  8. make && make install
  9. sed -i '65,71s/#//' $conf
  10. sed -i '/SCRIPT_FILENAME/d' $conf
  11. sed -i 's/fastcgi_params/fastcgi.conf/' $conf
复制代码
3、部署网页模板文件,通过template把包含变量的模板文件拷贝给目标主机node3 和 node4
  1. [root@control ansible]# vim /root/ansible/roles/lnmp/templates/index.html
  2. Welcome to {{ansible_hostname}} on {{ansible_all_ipv4_addresses}}
复制代码
4、编写tasks文件,定义任务
  1. [root@control ansible]# vim /root/ansible/roles/lnmp/tasks/main.yml
  2. ---
  3. # tasks file for /root/ansible/roles/lnmp
  4. - name: copy nginx-1.16.1.tar.gz to webserver.
  5.   copy:
  6.     src: nginx-1.16.1.tar.gz
  7.     dest: /tmp/
  8. - name: install nginx through shell script.
  9.   script: install_nginx.sh
  10.   args:
  11.     creates: /usr/local/nginx/sbin/nginx # 当nginx主程序文件存在时,不执行安装脚本
  12. - name: copy index.html to webserver. #拷贝首页文件
  13. template:
  14.   src: index.html
  15.   dest: /usr/local/nginx/html/index.html
  16. - name: install php
  17. yum:
  18.   name:
  19.     - php
  20.     - php-fpm
  21.     - php-mysqlnd
  22.     - mariadb-devel
  23. - name: run all serveice
  24. block:
  25.   - service:
  26.       name: php-fpm
  27.       state: started
  28.   - shell: /usr/local/nginx/sbin/nginx
  29.     args:
  30.       creates: /usr/local/nginx/logs/nginx.pid
  31. #当nginx的进程号文件存在,说明nginx启动了。则不执行启动nginx
复制代码
5、编写playbook剧本

[root@control ansible]# vim ~/ansible/lnmp.yml


  • hosts: webserver
    roles:

    • lnmp

6、运行playbook,并验证是否成功
  1. [root@control ansible]# ansible-playbook lnmp.yml
  2. # 控制节点上登录node节点
  3. [root@control ansible]# ssh node3
  4. # 查看/usr/local/nginx/目录下信息bin
  5. [root@node3 ~]# ls /usr/local/nginx/
  6. # 查看端口是否被监听
  7. [root@node3 ~]# ss -nultp | grep 80
  8. # 查看是否安装所需要包
  9. [root@node3 ~]# rpm -q php-fpm
  10. # 查看php的状态
  11. [root@node3 ~]# systemctl status php-fpm
  12. # 查看默认主页是否创建完成
  13. [root@node3 ~]# cat /usr/local/nginx/html/index.html
  14. Welcome to node3 on ['192.168.4.3']
复制代码
7、使用nginx部署代理服务器node2
  1. [root@control ansible]# ansible-galaxy init ~/ansible/roles/proxy
  2. [root@control ansible]# cp ~/ansible/roles/lnmp/files/* ~/ansible/roles/proxy/files/
复制代码
8、编写配置调度器的脚本,删掉之前的sed语句,添加定义集群,调用集群的语句
  1. [root@control ansible]# vim ~/ansible/roles/proxy/files/install_nginx.sh
  2. #!/bin/bash
  3. conf="/usr/local/nginx/conf/nginx.conf"
  4. yum -y install gcc pcre-devel openssl-devel make
  5. cd /tmp/
  6. tar -xf nginx-1.16.1.tar.gz
  7. cd nginx-1.16.1
  8. ./configure --with-http_ssl_module
  9. make && make install
  10. sed -i '/^http/a upstream webs {\n server 192.168.4.3;\n server 192.168.4.4;\n }\n'
  11. $conf
  12. sed -i '49i proxy_pass http://webs;' $conf
  13. /usr/local/nginx/sbin/nginx
复制代码
9、编写tasks文件,定义任务
  1. [root@control ansible]# vim ~/ansible/roles/proxy/tasks/main.yml
  2. ---
  3. # tasks file for /root/ansible/roles/proxy
  4. - name: copy source file to node2
  5.   copy:
  6.     src: nginx-1.16.1.tar.gz
  7.     dest: /tmp/
  8. - name: install nginx.
  9.   script: install_nginx.sh
  10.   args:
  11.     creates: /usr/local/nginx/sbin/nginx
复制代码
10、编写playbook剧本,调用任务
  1. [root@control ansible]# vim proxy.yml
  2. ---
  3. - hosts: node2
  4. roles:
  5. - proxy
  6. - hosts: node5
  7. tasks:
  8. - name: install mariadb server. #部署数据库服务器
  9. yum:
  10. name:
  11. - mariadb
  12. - mariadb-server
  13. - mariadb-devel
  14. - name: run mariadb-server
  15. service:
  16. name: mariadb
  17. state: started
复制代码
11、运行playbook和测试节点
  1. [root@control ansible]# ansible-playbook proxy.yml
  2. node1测试访问:
  3. node2,node3,node4关闭防火墙,
  4. [root@node2 ~]# systemctl stop firewalld.service 或者
  5. firewall-cmd --add-service=http 允许http访问都可以
  6. [root@node3 ~]# systemctl stop firewalld.service
  7. [root@node4 ~]# systemctl stop firewalld.service
  8. [root@node1 ~]# curl http://192.168.4.2 #成功
复制代码
出处:http://www.cnblogs.com/sre-chan/-------------------------------------------
个性签名:今天做了别人不想做的事,明天你就做得到别人做不到的事,尝试你都不敢,你拿什么赢!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

来源:https://www.cnblogs.com/sre-chan/p/17275296.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具