1. WEB集群环境说明

WEB集群环境说明如下:

  • 客户端:模拟外网主机,地址:192.168.50.1;
  • DNS服务器:主机名:dns01;地址:ETH1:192.168.20.70;ETH2:192.168.50.70;
  • 路由器:主机名:router;地址:ETH1:192.168.20.17;ETH2:192.168.50.17,192.168.50.200192.168.50.201;
  • LVS+keepalived集群:
    • 主机名:lvs01;地址:ETH1:192.168.20.31;
    • 主机名:lvs02;地址:ETH1:192.168.20.32;
    • 虚IP:192.168.20.200和192.168.20.201;
    • LVS使用DR模式;
  • nginx负载均衡集群:
    • 主机名:lb01;地址:ETH1:192.168.20.19;
    • 主机名:lb02;地址:ETH1:192.168.20.20;
  • WEB集群:
    • 主机名:web01;地址:ETH1:192.168.20.22;
    • 主机名:web02;地址:ETH1:192.168.20.23;
  • MySQL服务器:主机名:mysql01;地址:ETH1:192.168.20.50;
  • redis服务器:主机名:redis01;地址:ETH1:192.168.20.61;
  • NFS服务器:主机名:nfs01;地址:ETH1:192.168.20.30;

WEB集群访问步骤如下:

  • 客户端访问网站wordpress.xuzhichao.com,把DNS指向192.168.50.70dns服务器,在dns服务器上将域名解析为两个虚地址,192.168.50.200192.168.50.201,使用dns轮询方式返回给客户端,达到负载分担的作用。
  • 出口路由器上有多个公网地址,192.168.50.17,虚地址192.168.50.200192.168.50.201,使用DNAT地址映射,把内网实际虚IP192.168.20.200192.168.20.201分别映射为192.168.50.200192.168.50.201
  • 路由器后端是LVS+keepalived的四层负载均衡,使用LVSDR模式,为达到两个LVS负载分担的,建立两组VRRP,两台LVS分别是两组虚IP地址192.168.20.200192.168.20.201MASTER节点,同时互为BACKUP节点。
  • LVS后端使用nginx负载均衡做7层负载均衡,因为nginx做负载均衡时会受到源端口号的限制,因此可以多部署几个nginx负载均衡,提升集群性能。
  • LVS后端是WEB集群,使用nginx+PHP组成,nginx提供静态站点,PHP-fpm解析php代码。
  • redis服务器用于解决WEB集群的缓存不一致问题,把会话缓存统一放置在redis服务器中。
  • mysql独立部署,提供数据库功能,存放结构化数据。
  • NFS服务器则为WEB集群提供共享存储,存放图片等资源,无论用户被调度到哪一台WEB节点,都可以访问相同的图片,视频等资源。

2. ansible部署WEB集群实现思路

ansible编排web集群的实现逻辑如下图,共分为三个阶段来实现:

  • 基础环境模块:

    基础环境模块采用一个单独的role来编写,是应用于所有主机的基础功能,主要包括:

    • 基础软件安装;
    • yum仓库配置;
    • 关闭firewalld防火墙,selinux
    • 添加基础用户;
  • 应用环境模块:

    应用环境模块需要把可能使用到的每一个应用都以一个独立的role来实现,仅实现软件的基础功能,例如安装,配置,启动等,以便于上层业务模块进行调用。

    应用模块要写的独立,全面,复用性好;

  • 业务环境模块:

    业务环境模块用以实现不同的业务或代码,例如wordpress,zrlog等,业务模块的实现需要调用应用环境的模块组件,再配合相关业务的定制配置,例如nginx虚拟主机,数据库创建,代码部署(应该由Jenkins实现)等。

3. ansible基础环境部署

  • 创建集群环境的目录,所有功能均在此目录下实现:

    [root@xuzhichao ansible]# mkdir cluster-roles/
  • cluster-roles/目录下建立ansible的配置文件,并修改内容如下:

    [root@xuzhichao cluster-roles]# grep -v "^#" ansible.cfg | grep -v "^$"
    [defaults]
    inventory = /data/ansible/cluster-roles/hosts
    gathering = smart
    fact_caching_timeout = 86400
    fact_caching = redis
    fact_caching_connection = 127.0.0.1:6379
    roles_path = /etc/ansible/roles:/data/ansible/roles:/opt
    host_key_checking = False
    private_role_vars = yes
  • 定义本项目的inventory主机清单文件:

    [root@xuzhichao cluster-roles]# cat hosts
    [dns]
    192.168.20.70 [lvs]
    192.168.20.31
    192.168.20.32 [webservers]
    192.168.20.22
    192.168.20.23 [lbservers]
    192.168.20.19
    192.168.20.20 [mysql]
    192.168.20.50 [redis]
    192.168.20.61 [nfs]
    192.168.20.30
  • 变量规划:整个集群环境的变量进行统一管理,统一放置在group_vars/all文件中,所有role都可以调用。

    [root@xuzhichao cluster-roles]# ll group_vars/
    total 0
    -rw-r--r-- 1 root root 0 Aug 9 09:19 all
  • 为所有主机设置ssh秘钥登录,使用expect脚本实现:

    [root@xuzhichao cluster-roles]# yum install expect
    
    [root@xuzhichao cluster-roles]# cat auto_sshkey.sh
    network=192.168.20
    user=root
    password=123456 for i in 19 20 22 23 30 31 32 50 61 70
    do
    /usr/bin/expect <<-EOF
    set timeout 30
    spawn ssh-copy-id $user@$network.$i
    expect {
    "yes/no" { send "yes\n"; exp_continue }
    "password:" { send "${password}\n"; exp_continue }
    }
    expect eof
    EOF
    done [root@xuzhichao cluster-roles]# sh auto_sshkey.sh
  • 测试所有被控主机能否正常使用ansible管理:

    [root@xuzhichao cluster-roles]# ansible all -m ping

ansible系列(31)--ansible实战之部署WEB集群架构(1)的更多相关文章

  1. Linux Web集群架构详细(亲测可用!!!)

    注意:WEB服务器和数据库需要分离,同时WEB服务器也需要编译安装MySQL. 做集群架构的重要思想就是找到主干,从主干区域向外延展. WEB服务器: apache nginx  本地做三个产品 de ...

  2. CentOS7-自动化部署web集群

    一.项目要求 1.创建role,通过role完成项目(可能需要多个role) 2.部署nginx调度器(node2主机) 3.部署2台lnmp服务器(node3,node4主机) 4.部署mariad ...

  3. Centos 7 部署lnmp集群架构

    前言介绍 lnmp的全程是 linux + nginx + mysql + php; lnmp就是上述系统及应用程序的简写组合: lnmp其实已经代表了一个用户正常对一个页面请求的流程,nginx接收 ...

  4. (二)Kubernetes kubeadm部署k8s集群

    kubeadm介绍 kubeadm是Kubernetes项目自带的及集群构建工具,负责执行构建一个最小化的可用集群以及将其启动等的必要基本步骤,kubeadm是Kubernetes集群全生命周期的管理 ...

  5. Ansible自动化部署K8S集群

    Ansible自动化部署K8S集群 1.1 Ansible介绍 Ansible是一种IT自动化工具.它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新.Ansible适用于管理企 ...

  6. 003 ansible部署ceph集群

    介绍:在上一次的deploy部署ceph,虽然出了结果,最后的结果并没有满足最初的目的,现在尝试使用ansible部署一遍,看是否会有问题 一.环境准备 ceph1充当部署节点,ceph2,ceph3 ...

  7. ansible playbook部署ELK集群系统

    一.介绍 总共4台机器,分别为 192.168.1.99 192.168.1.100 192.168.1.210 192.168.1.211 服务所在机器为: redis:192.168.1.211 ...

  8. Haproxy配合Nginx搭建Web集群部署

    Haproxy配合Nginx搭建Web集群部署实验 1.Haproxy介绍 2.Haproxy搭建 Web 群集 1.Haproxy介绍: a)常见的Web集群调度器: 目前常见的Web集群调度器分为 ...

  9. 实战Centos系统部署Codis集群服务

    导读 Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可 ...

  10. kubernetes系列03—kubeadm安装部署K8S集群

    本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...

随机推荐

  1. #对勾函数#洛谷 5695 [NOI2001]反正切函数的应用

    题目 问给定的每一个\(a\),是否存在正整数\(b,c\), 使得在满足$$\arctan(\frac{1}{a})=\arctan(\frac{1}{b})+\arctan(\frac{1}{c} ...

  2. #启发式合并,LIS,平衡树#洛谷 4577 [FJOI2018]领导集团问题

    题目 在一棵树上选择最多的点,使得存在祖先关系的点满足\(w_x\leq w_y\),其中\(x\)是\(y\)的祖先 分析 祖先链上要满足\(LIS\),考虑将子节点的LIS序列合并至节点\(x\) ...

  3. Pandas高级教程之:Dataframe的重排和旋转

    目录 简介 使用Pivot 使用Stack 使用melt 使用Pivot tables 使用crosstab get_dummies 简介 使用Pandas的pivot方法可以将DF进行旋转变换,本文 ...

  4. RabbitMQ 01 概述

    什么是消息队列 进行大量的远程调用时,传统的Http方式容易造成阻塞,所以引入了消息队列的概念,即让消息排队,按照队列进行消费. 它能够将发送方发送的信息放入队列中,当新的消息入队时,会通知接收方进行 ...

  5. Qt 桌面服务 QDesktopServices

    使用浏览器打开网址 #include <QDesktopServices> #include <QUrl> QUrl url(QString("https://cn. ...

  6. configparser封装后报错:configparser.NoSectionError: No section: 'LoginElement'

    前言 这是目录结构 先贴一下源代码 # read_ini.pyimport configparser class ReadIni(): """读取 ini.ini 配置文 ...

  7. 深入理解DES算法:原理、实现与应用

    title: 深入理解DES算法:原理.实现与应用 date: 2024/4/14 21:30:21 updated: 2024/4/14 21:30:21 tags: DES加密 对称加密 分组密码 ...

  8. 什么是报表工具?和 EXCEL 有什么区别?

    报表是什么? 带数据的表格和图表就都是报表,像工资表,考勤表,成绩表,资产负载表等等都是报表. 那报表工具,顾名思义就是用来做报表的工具,那 Excel 是不是也算报表工具?广义上讲当然也算.但 IT ...

  9. 当 mysql-connector-java-5 遇上 MySQL8,终究还是错付了 → 门当户对真的很重要!

    开心一刻 今天,老婆给我发消息 老婆:老公,儿子从隔壁邻居家回来了 老婆:是先打还是先洗? 我:先洗吧,万一打错人了呢 老婆:先洗脸吧,没错就边打边洗 起因 在我们的固有认知中, mysql-conn ...

  10. WPF/C#:让绘制的图形可以被选中并将信息显示在ListBox中

    实现的效果 如果你对此感兴趣,可以接着往下阅读. 实现过程 绘制矩形 比如说我想绘制一个3行4列的表格: private void Button_Click_DrawRect(object sende ...