CentOS7-自动化部署web集群

一、项目要求

1、创建role,通过role完成项目(可能需要多个role)
2、部署nginx调度器(node2主机)
3、部署2台lnmp服务器(node3,node4主机)
4、部署mariadb数据库(node5主机)

主要用的ansible实现自动化部署,ansible的安装教程省略,控制节点安装ansible和Python,受控节点上只需要安装相同版本Python(环境一致好些),所有主机间做免密登录

二、项目实施

1、在控制节点上创建role部署lnmp平台环境

[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/

# 下载Nginx安装包:
[root@control ansible]# wget https://nginx.org/download/nginx-1.16.1.tar.gz
[root@control ansible]# tar -xf lnmp_soft.tar.gz
[root@control ansible]# cp lnmp_soft/nginx-1.16.1.tar.gz /root/ansible/roles/lnmp/files/

2、编写部署lnmp的脚本,配置动静分离

[root@control ansible]# vim /root/ansible/roles/lnmp/files/install_nginx.sh

稍后会使用copy模块把nginx源码包放到tmp目录下,拷贝nginx源码,执行编译安装

#!/bin/bash
conf="/usr/local/nginx/conf/nginx.conf"
yum -y install gcc pcre-devel openssl-devel make
cd /tmp/
tar -xf nginx-1.16.1.tar.gz
cd nginx-1.16.1
./configure --with-http_ssl_module
make && make install
sed -i '65,71s/#//' $conf
sed -i '/SCRIPT_FILENAME/d' $conf
sed -i 's/fastcgi_params/fastcgi.conf/' $conf

3、部署网页模板文件,通过template把包含变量的模板文件拷贝给目标主机node3 和 node4

[root@control ansible]# vim /root/ansible/roles/lnmp/templates/index.html
Welcome to {{ansible_hostname}} on {{ansible_all_ipv4_addresses}}

4、编写tasks文件,定义任务

[root@control ansible]# vim /root/ansible/roles/lnmp/tasks/main.yml
---
# tasks file for /root/ansible/roles/lnmp
- name: copy nginx-1.16.1.tar.gz to webserver.
  copy:
    src: nginx-1.16.1.tar.gz
    dest: /tmp/
- name: install nginx through shell script.
  script: install_nginx.sh
  args:
    creates: /usr/local/nginx/sbin/nginx # 当nginx主程序文件存在时,不执行安装脚本
- name: copy index.html to webserver. #拷贝首页文件
template:
  src: index.html
  dest: /usr/local/nginx/html/index.html
- name: install php
yum:
  name:
    - php
    - php-fpm
    - php-mysqlnd
    - mariadb-devel
- name: run all serveice
block:
  - service:
      name: php-fpm
      state: started
  - shell: /usr/local/nginx/sbin/nginx
    args:
      creates: /usr/local/nginx/logs/nginx.pid 
#当nginx的进程号文件存在,说明nginx启动了。则不执行启动nginx

5、编写playbook剧本

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

  • hosts: webserver
    roles:

    • lnmp

6、运行playbook,并验证是否成功

[root@control ansible]# ansible-playbook lnmp.yml

# 控制节点上登录node节点
[root@control ansible]# ssh node3

# 查看/usr/local/nginx/目录下信息bin
[root@node3 ~]# ls /usr/local/nginx/

# 查看端口是否被监听
[root@node3 ~]# ss -nultp | grep 80

# 查看是否安装所需要包
[root@node3 ~]# rpm -q php-fpm

# 查看php的状态
[root@node3 ~]# systemctl status php-fpm

# 查看默认主页是否创建完成
[root@node3 ~]# cat /usr/local/nginx/html/index.html
Welcome to node3 on ['192.168.4.3']

7、使用nginx部署代理服务器node2

[root@control ansible]# ansible-galaxy init ~/ansible/roles/proxy
[root@control ansible]# cp ~/ansible/roles/lnmp/files/* ~/ansible/roles/proxy/files/

8、编写配置调度器的脚本,删掉之前的sed语句,添加定义集群,调用集群的语句

[root@control ansible]# vim ~/ansible/roles/proxy/files/install_nginx.sh
#!/bin/bash
conf="/usr/local/nginx/conf/nginx.conf"
yum -y install gcc pcre-devel openssl-devel make
cd /tmp/
tar -xf nginx-1.16.1.tar.gz
cd nginx-1.16.1
./configure --with-http_ssl_module
make && make install
sed -i '/^http/a upstream webs {\n server 192.168.4.3;\n server 192.168.4.4;\n }\n'
$conf
sed -i '49i proxy_pass http://webs;' $conf
/usr/local/nginx/sbin/nginx

9、编写tasks文件,定义任务

[root@control ansible]# vim ~/ansible/roles/proxy/tasks/main.yml
---
# tasks file for /root/ansible/roles/proxy
- name: copy source file to node2
  copy:
    src: nginx-1.16.1.tar.gz
    dest: /tmp/
- name: install nginx.
  script: install_nginx.sh
  args:
    creates: /usr/local/nginx/sbin/nginx

10、编写playbook剧本,调用任务

[root@control ansible]# vim proxy.yml
---
- hosts: node2
roles:
- proxy
- hosts: node5
tasks:
- name: install mariadb server. #部署数据库服务器
yum:
name:
- mariadb
- mariadb-server
- mariadb-devel
- name: run mariadb-server
service:
name: mariadb
state: started

11、运行playbook和测试节点

[root@control ansible]# ansible-playbook proxy.yml
node1测试访问:
node2,node3,node4关闭防火墙,
[root@node2 ~]# systemctl stop firewalld.service 或者
firewall-cmd --add-service=http 允许http访问都可以
[root@node3 ~]# systemctl stop firewalld.service
[root@node4 ~]# systemctl stop firewalld.service
[root@node1 ~]# curl http://192.168.4.2 #成功

原文链接:https://www.cnblogs.com/sre-chan/p/17275296.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:CentOS7-自动化部署web集群 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • VMWare中CentOS ifcfg-eth0配置方法(亲测直接可用)

    下面是详细的攻略: VMWare中CentOS ifcfg-eth0配置方法(亲测直接可用) 一、背景说明 在VMWare虚拟机中安装CentOS系统时,可能需要配置网卡(例如将虚拟机连接到网络),而网卡的配置文件 ifcfg-eth0 的配置方法并不太直观。本文介绍在VMWare虚拟机中配置CentOS系统的ifcfg-eth0的方法,经过亲测直接可用。 …

    Linux 2023年5月24日
    00
  • Linux 双网卡配置两个IP同时只有一个会通的原因

    http://blog.csdn.net/centerpoint/article/details/38542719   根本原因: Linux默认启用了反向路由检查 如果2个网卡在一个Lan里面,那么服务器可能从eth0或者eth1发现网关, 如果一个包从eth0进入了, 而网关在eth1上, 那么从eth1是出不去的, 就不通了.  反向路由检查要求从哪里…

    Linux 2023年4月16日
    00
  • C#实现聊天消息渲染、图文混排(支持Windows、Linux)

    在实现聊天软件时,渲染文字表情图文混排是一项非常繁琐的工作,再加上还要支持GIF动图、引用消息、撤回消息、名片等不同样式的消息渲染时,就更加麻烦了。那么有简单的实现办法吗?嗯,有的。   在实现聊天软件时,渲染文字表情图文混排是一项非常繁琐的工作,再加上还要支持GIF动图、引用消息、撤回消息、名片等不同样式的消息渲染时,就更加麻烦了。        好在我们…

    Linux 2023年4月10日
    00
  • linux性能问题(CPU,内存,磁盘I/O,网络)

    一. CPU性能评估 1.vmstat [-V] [-n] [depay [count]] -V : 打印出版本信息,可选参数 -n : 在周期性循环输出时,头部信息仅显示一次 delay : 两次输出之间的时间间隔 count : 按照delay指定的时间间隔统计的次数。默认是1 如:vmstat 1 3 user1@user1-desktop:~$ vm…

    Linux 2023年4月12日
    00
  • ubuntu16.04怎么远程远程登录linux系统?

    下面是Ubuntu16.04远程登录Linux系统的完整攻略: Step 1:安装ssh服务器 要远程登录Ubuntu机器,需要确保Ubuntu机器上安装了ssh服务器。如果没有,运行以下命令进行安装: sudo apt-get update sudo apt-get install openssh-server Step 2:确定Ubuntu机器的IP地址…

    Linux 2023年5月24日
    00
  • linux上安装Docker(非常简单的安装方法)

    下面是详细讲解在 Linux 上安装 Docker 的完整攻略: 准备工作 在安装 Docker 之前需要确保以下几点: 系统版本:Docker 要求使用 64 位版本的 Ubuntu 16.04 或更高版本、Debian 9 或更高版本、CentOS 7 或更高版本等系统。 内核版本:Docker 要求使用 3.10 或更高版本的内核。 安装 curl:使…

    Linux 2023年5月14日
    00
  • Xshell连接centOS7并与CentOS7联网

    下面我将介绍如何使用Xshell连接CentOS 7并连接网络的完整攻略: 1. 安装CentOS 7 如果你还没有安装CentOS 7,请先根据官方文档进行安装。 2. 连接网络 在CentOS 7中,连接网络的方式主要有两种:动态IP和静态IP。在这里,我们以动态IP为例来演示。 首先,需要编辑网卡配置文件。以网卡eth0为例,运行以下命令: sudo …

    Linux 2023年5月24日
    00
  • Linux:管道命令与文本处理三剑客(grep、sed、awk)

    1 管道命令(pipe)介绍 众所周知,bash命令执行的时候会输出信息,但有时这些信息必须要经过几次处理之后才能得到我们想要的格式,此时应该如何处置?这就牵涉到 管道命令(pipe) 了。管道命令使用的是|这个界定符号。另外,管道命令与连续执行命令是不一样的,这点下面我们会说明。 我们先来看一个管道命令的例子。假设我们需要看/etc目录下有多少文件,那么可…

    Linux 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部