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. IDEA代码缩略图插件CodeGlance

    打开IDEA设置Settings,选择Plugins,搜索CodeGlance. 点击Install,安装完成后重启即可. 效果如下:

  2. C语言线程安全问题

    线程安全问题 #include <stdio.h> #include <tinycthread.h> #include <io_utils.h> int count ...

  3. MySQL检索和过滤数据

    注意 多条SQL语句必须以分号(:)分隔: SQL语句不区分大小写: 在处理SQL语句时,其中所有空格都被忽略: 当选择多个列是,一定要在列名之间加上逗号,但最后一个列名后不加. SELECT语句 检 ...

  4. #莫队,根号分治#洛谷 5071 [Ynoi2015] 此时此刻的光辉

    题目传送门 分析 约数个数就是 \(\prod{(c+1)}\),但是带 \(log\) 会TLE, 考虑将每个数分成 \(\leq \sqrt[3]{n}\) 和 \(>\sqrt[3]{n} ...

  5. #高精度,排列组合、dp#JZOJ 2755 树的计数

    题目 求\(n\)个点直径为\(d\)的标号树个数(多组数据) (\(0\leq d\leq n\leq 50,n>0\)) 分析 首先特判一下\(n==d\)无解,\(d=0\)除非只有一个点 ...

  6. 做好PPT,提高沟通效率

    本文于2019年7月12日完成,发布在个人博客网站上. 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来. 只用一套PPT来通杀全部使用场景,这个想法其实很天真. 作为一种 ...

  7. 开放原子开源基金会OpenHarmony工作委员会主席侯培新寄语OpenAtom OpenHarmony分论坛

    2022开放原子全球开源峰会 OpenAtom OpenHarmony分论坛 万物互联,使能千行百业 7月27日 14:00  与您相约 OpenHarmony 工作委员会主席侯培新 寄语 OpenA ...

  8. 数据库SQL(MSSQLSERVER)服务启动错误代码3414

    昨天永和客户联系我,说他们的前台系统报错了,给我发了报错的图片.看到错误的第一眼就知道是数据库出问题了,连不上sql Server. 虽然知道是数据库出问题了,但是刚开始的时候没有打开SQL Serv ...

  9. openstack-train-ovs-ceph 部署

    第一章 Openstack简介 https://baike.baidu.com/item/OpenStack/342467?fr=aladdin Openstack框架图![img](file:/// ...

  10. 实验2 C语言分支与循环基础应用编程

    #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 5 int main() { ...