一、需求分析

1.前端需支持更大的访问量,单台Web服务器已无法满足需求了,则需扩容Web服务器;

2.虽然动态内容可交由后端的PHP服务器执行,但静态页面还需要Web服务器自己解析,那是否意味着多台Web服务器都需要在各自的系统中都存有一份静态页面数据呢?那么如果能将静态页面集中存放,所有Web服务器都来集中地取文件,对于文件的一致性就有了保障,这个集中地就叫做“文件共享服务器”;

二、需求实现:

1.web1充当http服务器和DNS解析服务器,客户端到web1和web2的请求,如果是静态资源请求通过php主机的NFS服务挂载的存储返回结果

2.web1和web2对于客户端动态资源请求都反向代理到后端php服务器进行执行后返回结果

3.web1和web2实现DNS轮询,客户端访问博客网站是负载均衡的。

4.建立wordpress博客

5.数据库存储wordpress博客的各种数据

三、架构图

四、步骤概述

1.部署LAMP环境、配置NFS服务器

2.web1、web2、php服务器全部挂载NFS共享目录为网站根目录

3.配置httpd实现动静分离

4.配置DNS实现负载均衡

五、详细过程

1.web1、web2服务器编译安装Apache

  1. # 安装依赖包
  2. yum groupinstall "development tools"
  3. yum install openssl-devel expat-devel pcre-devel
  4. #
  5. # 解压文件
  6. tar xvf apr-1.6.2.tar.gz
  7. tar xvf apr-util-1.6.0.tar.gz
  8. tar xvf httpd-2.4.27.tar.bz2
  9. cp -r apr-1.6.2 httpd-2.4.27/srclib/apr
  10. cp -r apr-util-1.6.0 httpd-2.4.27/srclib/apr-util
  11. #
  12. # 编译安装
  13. cd httpd-2.4.27/
  14. ./configure \
  15. --prefix=/app/httpd24 \
  16. --sysconfdir=/etc/httpd24 \
  17. --enable-so --enable-ssl \
  18. --enable-rewrite --with-zlib \
  19. --with-pcre --with-included-apr \
  20. --enable-modules=most \
  21. --enable-mpms-shared=all \
  22. --with-mpm=prefork
  23. #
  24. make && make install
  25. #
  26. #配置环境变量
  27. vim /etc/profile.d/lamp.sh
  28. PATH=/app/httpd24/bin/:$PATH
  29. . /etc/profile.d/lamp.sh
  30. #
  31. # 启动服务
  32. apachectl start

2.数据库服务器二进制安装mariadb

  1. # 解压文件
  2. tar xvf mariadb-10.2.8-linux-x86_64.tar.gz -C /usr/local/
  3. cd /usr/local
  4. #
  5. # 创建软连接,mariadb在/usr/local下必须名为mysql,可以创建软连接,可以改名
  6. ln -s mariadb-10.2.8-linux-x86_64/ mysql
  7. #
  8. # 创建用户
  9. useradd -r -m -d /app/mysqldb -s /sbin/nologin mysql
  10. cd mysql/
  11. #
  12. # 初始化数据库
  13. scripts/mysql_install_db --datadir=/app/mysqldb --user=mysql
  14. #
  15. # 创建配置文件
  16. mkdir /etc/mysql
  17. cp support-files/my-large.cnf /etc/mysql/my.cnf
  18. #
  19. # 修改配置文件,指定数据库存放路径
  20. vim /etc/mysql/my.cnf
  21. [mysqld]
  22. datadir = /app/mysqldb mysqld下添加这三行
  23. innodb_file_per_table = ON
  24. skip_name_resolve = ON
  25. #
  26. # 复制启动脚本,添加开机自动启动
  27. cp support-files/mysql.server /etc/init.d/mysqld
  28. chkconfig --add mysqld
  29. chkconfig --list
  30. service mysqld start
  31. #
  32. # 创建日志目录
  33. mkdir /var/log/mariadb
  34. chown mysql /var/log/mariadb/
  35. #
  36. #添加环境变量
  37. vim /etc/profile.d/lamp.sh
  38. PATH=/app/httpd24/bin/:/usr/local/mysql/bin/:$PATH
  39. . /etc/profile.d/lamp.sh
  40. #
  41. #调用安全加固脚本,加固数据库。汉字为每一项的翻译
  42. mysql_secure_installation
  43. 是否设置root密码
  44. 输入密码
  45. 确认密码
  46. 是否设置匿名用户
  47. 是否允许root远程登录
  48. 删除test数据库
  49. 现在是否生效

3.PHP应用服务器编译安装PHP7

  1. # 安装依赖包
  2. yum install libxml2-devel bzip2-devel libmcrypt-devel gcc openssl-devel
  3. tar xvf php-7.1.7.tar.bz2
  4. #
  5. #编译安装
  6. cd php-7.1.7.tar.bz2
  7. ./configure \
  8. --prefix=/app/php \
  9. --enable-mysqlnd \ #mysqlnd 指明Mysql不再本地
  10. --with-mysqli=mysqlnd \
  11. --with-pdo-mysql=mysqlnd \
  12. --with-openssl \
  13. --enable-mbstring \
  14. --with-freetype-dir \
  15. --with-jpeg-dir \
  16. --with-png-dir \
  17. --with-zlib \
  18. --with-libxml-dir=/usr \
  19. --enable-xml \
  20. --enable-sockets \
  21. --enable-fpm \ #用FPM模式
  22. --with-mcrypt \
  23. --with-config-file-path=/etc/php \
  24. --with-config-file-scan-dir=/etc/php.d \
  25. --with-bz2
  26. #
  27. # 创建PHP配置文件
  28. mkdir /etc/php/
  29. cp php.ini-production /etc/php/php.ini
  30. #
  31. # 复制服务脚本,添加开机自动启动
  32. cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
  33. chmod +x /etc/init.d/php-fpm
  34. chkconfig --add php-fpm
  35. chkconfig --list php-fpm
  36. #
  37. # 创建fpm的配置文件
  38. cd /app/php/etc
  39. cp php-fpm.conf.default php-fpm.conf
  40. cd /app/php/etc/php-fpm.d/
  41. cp www.conf.default www.conf
  42. vim www.conf
  43. listen = 172.18.68.23:9000 #设置监听的IP,注释监听所有, 只写端口监听鄋
  44. ;listen.allowed_clients = 127.0.0.1. #把这项注释掉,分号为注释
  45. systemctl start php-fpm

4.配置NFS服务器

NFS服务器的配置特别简单,最重要的时配置完后就赶紧将NFS共享目录挂载至web1、web2、PHP服务器的网站根目录。

  1. mkdir -pv /app/nfs/web #创建共享目录,此目录为网站的根目录,实现统一管理。
  2. vim /etc/exports
  3. /app/nfs/web 172.18.0.0/16(ro,sync,root_squash,no_all_squash)
  4. # 允许172.18.0.1网段挂载NFS共享,如果要提高安全性应该控制到主机
  • Web1服务器
  1. mount 172.18.68.24:/app/nfs/web /app/httpd24/htdocs #/app/httpd24/htdocs为httpd.conf中的根目录
  • Web2服务器
  1. mount 172.18.68.24:/app/nfs/web /app/httpd24/htdocs #/app/httpd24/htdocs为httpd.conf中的根目录
  • PHP应用服务器
  1. mkdir /app/httpd24/htdocs #PHP没有根目录,/app/httpd24/htdocs为NFS的挂载点。
  2. mount 172.18.68.24:/app/nfs/web /app/httpd24/htdocs

5.配置Apache实现动静分离

  • 加载模块
  1. vim /etc/httpd24/httpd.conf
  2. LoadModule proxy_module modules/mod_proxy.so #取消两行的注释,加载两模块
  3. LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
  • 动静分离

    在配置文件的末尾追加这四行,利用代理将所有以.php结尾的文件交给PHP服务器处理,实现动静分离
  1. vim /etc/httpd24/httpd.conf
  2. AddType application/x-httpd-php .php
  3. AddType application/x-httpd-php-source .phps
  4. ProxyRequests Off 关闭正向代理
  5. ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1
  6. #要确保PHP服务器中有这个目录,(在NFS中创建这个目录,且将NFS挂载至此目录。)
  7. apachectl restart

6.部署wordpress博客

因为web1、web2、PHP服务器都使用NFS共享的目录作为根目录,所以只需要将wordpress博客系统部署在NFS服务器上即可让所有服务器得到同样的数据。

  • 安装博客程序
  1. # 解压博客程序
  2. tar xvf wordpress-4.8.1-zh_CN.tar.gz -C /app/httpd24/htdocs
  3. cd /app/httpd24/htdocs
  4. mv wordpress/ blog/
  5. # 创建配置文件
  6. cd /app/httpd24/htdocs/blog/
  7. cp wp-config-sample.php wp-config.php
  • 配置数据库

    wordpress需要数据库,所以在此先创建一个wordpress专用的数据库,且创建授权用户。
  1. mysql -uroot -pcentos
  2. create datebase wpdb;
  3. grant all on wpdb.* to wpuser@'172.18.68.%' identified by 'centos';
  • 配置wordpress连接数据库
  1. # 编辑配置文件,写入创建的IP、数据库、与用户性
  2. vim wp-config.php
  3. define('DB_NAME', 'wpdb');
  4. #
  5. /** MySQL数据库用户名 */
  6. define('DB_USER', 'wpuser');
  7. #
  8. /** MySQL数据库密码 */
  9. define('DB_PASSWORD', 'centos');
  10. #
  11. /** MySQL主机 */
  12. define('DB_HOST', 'localhost');

7.登录测试

  • 浏览器打开,http://IP,设置管理员的用户名密码,点击安装

  • 输入用户名密码,即可进入博客网站的后台页面。

  • 默认风格的博客页面首页,还是比较好看滴、

8.配置DNS负载均衡

购买了单独域名后,在后台控制面板中添加两条A记录,就可以达到负载均衡。

到这里基于LAMP+NFS架构的双Web服务器、动静分离网站就搭建完成了。

双WEB服务器架构的好处在于如果有一台服务器宕机不会是整个网站瘫痪。

NFS共享存储的好处在于,DNS负载均衡后,不论用户被分配到哪台主机上,都能看到相同的页面得到相同的结果。

部署LAMP+NFS实现双Web服务器负载均衡的更多相关文章

  1. 基于NFS实现多WEB服务器负载均衡

    实现环境: 实现原理: 共四台服务器 A,B,C,D 服务器A (CentOS 6.7): IP地址: 192.168.3.67 角色: DNS服务 说明: 为两台web服务器做域名轮询 服务器B,C ...

  2. web服务器负载均衡与集群基本概念一

    Web集群是由多个同时运行同一个web应用的服务器组成,在外界看来就像一个服务器一样,这多台服务器共同来为客户提供更高性能的服务.集群更标准的定义是:一组相互独立的服务器在网络中表现为单一的系统,并以 ...

  3. Web服务器负载均衡的几种方案 : DNS轮询

    本篇主要讲一下最简单的方案——DNS轮询. DNS轮询 大多域名注册商都支持多条A记录 的解析,其实这就是DNS轮询 ,DNS 服务器 将解析请求按照A记录 的顺序,逐一分配到不同的IP上,这样就完成 ...

  4. web服务器负载均衡与集群基本概念二

    前面已经说过负载均衡的作用是在多个节点之间按照一定的策略(算法)分发网络或计算处理负载.负载均衡可以采用软件和硬件来实现.一般的框架结构可以参考下图.    后台的多个Web节点上面有相同的Web应用 ...

  5. 高并发之web服务器负载均衡简单介绍

    负载均衡种类 F5,七层负载均衡,四层负载均衡 Nginx负载均衡 内置策略.扩展策略 内置策略:IPHash.加权轮询 扩展策略:fair策略.通用hash.一致性hash 加权轮询策略 首先将请求 ...

  6. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  7. 高性能Nginx服务器-负载均衡

    Location正则表达式 location的作用 location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作. locatio ...

  8. web实现负载均衡的几种实现方式

    摘要: 负载均衡(Load Balance)是集群技术(Cluster)的一种应用.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应用是Web负载均衡.根据实现的 ...

  9. 服务器负载均衡lvs(Linux Virtual Server)

    服务器负载均衡lvs(Linux Virtual Server) 一.总结 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统. 三.Linu ...

随机推荐

  1. CCNA基础知识摘录

    cisco设备的启动要点: 1.检测硬件(保存在rom) 2.载入软件(IOS)(保存在Flash) 3.调入配置文件(密码,IP地址,路由协议都保存在此)(此文件保存在NVRAM) 0x2102:正 ...

  2. 集美大学网络1413第九次作业成绩(团队五) -- 测试与发布(Alpha版本)

    NO.NE团队的项目链接有效,六个核桃和六指神功团队可以请教下他们,避免因IP地址无效或者因tomcat不打开就不能访问的情况,毕竟助教没办法知道此时此刻它是开着还是关闭啊啊啊... 题目 团队作业5 ...

  3. 杨晨露 Java 第一周总结

    1.学习内容总结 (1)Integer类在对象中包装了一个基本类型int的值.Integer类型的对象包含一个int类型的字段.该类提供了多个方法,能在int类型和String类型之间互相转换,还提供 ...

  4. 预防黑客入侵 防黑必学的cmd命令vs网络安全

    这些命令又可*********三类:网络检测(如ping).网络连接(如telnet)和网络配置(如netsh).前面两种相对简单,本文只介绍两个网络配置工具.自带的关于网络的命令行工具很多,比如大家 ...

  5. 201521123051《Java程序设计》第十三周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...

  6. java 课程设计 购物车系统 个人

    Q1.团队课程设计博客链接 团队博客 Q2.个人负责模块或任务说明 我主要负责main函数的编写和系统中瞎看功能代码的编写. Q3.自己的代码提交记录截图 main函数代码如下: public sta ...

  7. DOM【介绍、HTML中的DOM、XML中的DOM】

    什么是DOM? DOM(Document Object Model)文档对象模型,是语言和平台的中立接口. 允许程序和脚本动态地访问和更新文档的内容. 为什么要使用DOM? Dom技术使得用户页面可以 ...

  8. JavaScript自动化构建工具入门----grunt、gulp、webpack

    蛮荒时代的程序员: 做项目的时候,会有大量的js 大量的css   需要合并压缩,大量时间需要用到合并压缩 在前端开发中会出现很多重复性无意义的劳动  自动化时代的程序员: 希望一切都可以自动完成  ...

  9. spring jar包

    org.springframework.aop- 3.0.0.RELEASE--------------------Spring的面向切面编程,提供AOP(面向切面编程)实现 org.springfr ...

  10. C#最基本的小说爬虫

    新手学习C#,自己折腾弄了个简单的小说爬虫,实现了把小说内容爬下来写入txt,还只能爬指定网站. 第一次搞爬虫,涉及到了网络协议,正则表达式,弄得手忙脚乱跑起来效率还差劲,慢慢改吧. 爬的目标:htt ...