大型网站架构之百万PV网站架构案例

news/2024/5/15 15:30:11/文章来源:https://blog.csdn.net/weixin_33912445/article/details/93024948

一、案例概述

本案例采用四层模式实现,主要分为前端反向代理、web层、数据库缓存层和数据库层。

  • 前端反向代理采用主备模式
  • web层采用群集模式
  • 数据库缓存层采用主备模式
  • 数据库层采用主从模式

大型网站架构之百万PV网站架构案例
由于实验条件限制,本次实验共打开四台虚拟机,此处实验将前端代理层、数据库缓存层、数据库层服务搭建在前两台虚拟服务器上,web层采用群集模式,用于单独放置两台虚拟机。故本次实验实际模型为了模拟实际环境,服务搭建按照如下拓扑搭建。
大型网站架构之百万PV网站架构案例

二、实验环境

主机名操作系统IP地址用途
server1centosx84_64192.168.144.112前端反向代理Nginx、Redis缓存主机、MySQL主数据库
server2centosx84_64192.168.144.111前端反向代理备Nginx、Redis备缓存主机、MySQL备数据库
web1centosx84_64192.168.144.113Web服务tomcat
web2centosx84_64192.168.144.114Web服务tomcat

三、实验部署

3.1、master和slave设置keepalive与Nginx反向代理

  • 配置yum源

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

  • 安装keepalive软件和Nginx

yum install -y keepalived nginx

3.1.1配置keepalive

  • 配置主从的keepalive,两台配置基本相同,配置文件不同处已做说明

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalivedglobal_defs {route_id NGINX_HA    //主从不同
}vrrp_script nginx {script "/opt/shell/nginx.sh"    //配置带动Nginx启动脚本interval 2   //每隔2s响应
}vrrp_instance VI_1 {state MASTER    //备为BACKUPinterface ens33 //注意主机网卡端口名称virtual_router_id 51   //从需不同priority 100    //从需比主低advert_int 1authentication {auth_type PASSauth_pass 1111
}track_script {nginx        //调度Nginx启动脚本的函数名
}virtual_ipaddress {192.168.144.188    //设置虚拟IP}
}

3.1.2创建keepalive带动Nginx启动脚本

mkdir -p /opt/shell
vim /opt/shell/nginx.sh

#!/bin/bash
k=`ps -ef | grep keepalived | grep -v grep | wc -l`
if [ $k -gt 0 ];then/bin/systemctl start nginx.service
else
/bin/systemctl stop nginx.service
fi

chmod +x /opt/shell/nginx.sh

3.1.3配置Nginx前端调度功能

vim /etc/nginx/nginx.conf

  • 在include 上面一行新增
upstream tomcat_pool {server 192.168.144.113:8080;server 192.168.144.114:8080;ip_hash;        //会话稳固功能,否则无法通过vip地址登陆}server {listen 80;server_name 192.168.144.188;  //虚拟IPlocation / {proxy_pass http://tomcat_pool;proxy_set_header X-Real-IP $remote_addr;}}
  • 配置完成后,检查Nginx配置文件语法

nginx -t -c /etc/nginx/nginx.conf

  • 关闭防火墙和SELinux,准备启动keepalive,随后会通过配置文件带动脚本,启动Nginx,此处需要注意,若要停止Nginx,则需要先关闭keepalive,然后才可以。

  • 查看Nginx是否启动

netstat -ntap | grep nginx

3.2、部署两台web服务器

3.2.1两台web服务器部署tomcat,部署步骤完全相同,为了试验区分,需要在首页内容做区别

tar xf apache-tomcat-8.5.23.tar.gz
tar xf jdk-8u144-linux-x64.tar.gz
mv jdk1.8.0_144/ /usr/local/java
mv apache-tomcat-8.5.23/ tomcat8

  • 解压完成后,配置jdk环境变量,让jdk的各种命令为系统识别

vim /etc/profile

export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export PATH=$PATH:/usr/local/java/bin
export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib

source /etc/profile

  • 配置tomcat启动与关闭命令为系统识别

    ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
    ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown

  • 启动服务,查看端口状态,使用自身网页测试,观察服务是否能够提供。

tomcatup
netstat -anpt | grep 8080

http://192.168.144.113:8080/ //测试默认测试页是否正常显示
http://192.168.144.114:8080/

  • 为了试验区分两台web服务器,修改首页内容

vim /usr/local/tomcat8/webapps/ROOT/index.jsp

<h1>Server 129!!</h1>    //注意,web2需要首页内容不同
  • 输入调度器地址,也就是虚拟地址,测试两台节点的调度情况。

http://192.168.175.188/

大型网站架构之百万PV网站架构案例

3.2.2搭建会员商城

  • 首先在tomcat配置文件中添加支持商城模块

cd /usr/local/tomcat8/conf/
vim server.xml

  • 跳到行尾,在Host name下新增 在148行位置

    <Context path="" docBase="SLSaleSystem" reloadable="true" debug="0"></Context>
    //日志调试信息debug为0表示信息越少,docBase指定访问目录
  • 将会员商城软件包解压缩

tar zxvf SLSaleSystem.tar.gz -C /usr/local/tomcat8/webapps/

cd /usr/local/tomcat8/webapps/SLSaleSystem/WEB-INF/classes

vim jdbc.properties //修改数据库IP地址是VRRP的虚拟IP,以及授权的用户名root和密码abc123。

driverClassName=com.mysql.jdbc.Driver
url=jdbc\:mysql\://192.168.144.188\:3306/slsaledb?useUnicode\=true&characterEncoding\=UTF-8  //该成我们设定的虚拟IP
uname=root
password=123456
minIdle=10
maxIdle=50
initialSize=5
maxActive=100
maxWait=100
removeAbandonedTimeout=180
removeAbandoned=true
  • 客户端测试

http://192.168.144.113:8080/ //默认的用户名admin 密码:123456
http://192.168.144.114:8080/

大型网站架构之百万PV网站架构案例

http://192.168.175.188 //输入虚拟地址测试登录,并且关闭主再测试登录

大型网站架构之百万PV网站架构案例

3.3、部署MySQL以及主从

3.3.1安装mysql

  • 在实际生产环境中,此处应当搭建MySQL服务,但由于实验条件限制,本实验使用mariadb代替MySQL。

yum install -y mariadb-server mariadb

systemctl start mariadb.service
systemctl enable mariadb.service

netstat -anpt | grep 3306

mysql_secure_installation //

Set root password? [Y/n] y         //设置MySQL管理员账户的密码,我选择密码为abc123
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..... Success!By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.Remove anonymous users? [Y/n] n        //删除匿名用户?... skipping.Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.Disallow root login remotely? [Y/n] n   //拒绝root用户远程登录?... skipping.By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.Remove test database and access to it? [Y/n] n  //删除test数据库?... skipping.Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.Reload privilege tables now? [Y/n] y    //重新加载数据库的所有表?... Success!Cleaning up...All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.Thanks for using MariaDB!

mysql -uroot -p //进入数据库

3.3.2导入数据库,授权

mysql -u root -p < slsaledb-2014-4-10.sql
mysql -uroot -p

show databases;GRANT all ON slsaledb.* TO 'root'@'%' IDENTIFIED BY 'abc123';    //授予slsaledb数据库所有表所有权限给root用户在任意网段登录,密码为abc123flush privileges; 

3.3.3 MySQL主从配置

  • mysql主服务器下。

vim /etc/my.cnf

[mysqld]下添加binlog-ignore-db=mysql,information_schema       //二进制日志格式
character_set_server=utf8
log_bin=mysql_bin  //开启二进制日志
server_id=1  
log_slave_updates=true
sync_binlog=1   //同步日志

systemctl restart mariadb

netstat -anpt | grep 3306

mysql -u root -p

show master status; //记录日志文件名称和 位置值+------------------+----------+--------------+--------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         |
+------------------+----------+--------------+--------------------------+
| mysql_bin.000001 |      626 |              | mysql,information_schema |
+------------------+----------+--------------+--------------------------+grant replication slave on *.* to 'rep'@'192.168.144.%' identified by '123456';  //授予主从状态flush privileges;
  • MySQL从服务器下

vim /etc/my.cnf

[mysqld]下添加server_id=2

systemctl restart mariadb

netstat -anpt | grep 3306
mysql -u root -p

change master to master_host='192.168.144.112',master_user='rep',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=2626;start slave;show slave status;Slave_IO_Running: YesSlave_SQL_Running: Yes
  • 测试主从状态是否可行,方可进行下一步骤。

3.4部署Redis数据库缓存层

3.4.1安装redis

  • 很对主从redis数据库缓存,首先需要安装redis软件

yum install -y epel-release //安装扩展源
yum install redis -y

3.4.2设置主从关系

  • 配置主Redis

vim /etc/redis.conf

bind 0.0.0.0   //将监听网址修改成任意网段

systemctl start redis.service
netstat -anpt | grep 6379

  • 测试本身安装完成能否使用

redis-cli -h 192.168.144.112 -p 6379 //测试连接

192.168.144.112:6379> set name test //设置name 值是test

192.168.144.112:6379> get name //获取name值

  • 配置从Redis

vim /etc/redis.conf

bind 0.0.0.0   //61行,修改监听地址
...
slaveof 192.168.114.112  6379 //266行下添加主服务器的IP,不是虚拟IP
  • 两台redis服务器服务重启

systemctl restart redis.service

  • 从服务器上进入redis,发现已经复制完成

redis-cli -h 192.168.144.111 -p 6379
192.168.144.111:6379> get name
"test"

  • 至此,redis主从配置完成。

3.4.3配置商城项目中连接redis的参数

  • web节点中配置商城项目,指定Redis虚拟IP

vim /usr/local/tomcat8/webapps/SLSaleSystem/WEB-INF/classes/applicationContext-mybatis.xml

      <!--redis 配置 开始--><constructor-arg value="192.168.144.188"/>    //47行<constructor-arg value="6379"/>              //48行

3.4.4测试缓存效果

redis-cli -h 192.168.144.188 -p 6379

192.168.175.188:6379> info

keyspace_hits:1  或者 keyspace_misses:2//关注这个值,命中数和未命中数登录商城,然后反复点击需要数据库参与的操作页面,再回来检查keyspace_hits或者keyspace_misses: 值变化。

转载于:https://blog.51cto.com/13659253/2152732

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_726028.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用户登录界面(1.8版本--网站框架改进)

1.创建数据库db_user与表users 1 CREATE DATABASE db_user CHARACTER SET utf8;2 3 CREATE TABLE users (4 userid TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,5 username varchar(20),6 passwd varchar(20),7 email varchar(30),8 priority int9 ); 10…

《Linux就该这么学》培训笔记_ch20使用LNMP架构部署动态网站环境

《Linux就该这么学》培训笔记_ch20使用LNMP架构部署动态网站环境 文章最后会post上书本的笔记照片。 文章主要内容&#xff1a; 源码包程序LNMP动态网站架构 配置Mysql服务配置Nginx服务配置php服务搭建Discuz论坛选购服务器主机书本笔记源码包程序 在RPM和Yum出现之前&#xf…

5-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案微信小程序篇(配置网站--网站配置上数据库)...

https://www.cnblogs.com/yangfengwu/p/11037653.html php和数据库打交道,这样整个网页就完美了,有了数据存储,交互,动态网页才完美 首先修改下php.ini 文件 告诉php当前的扩展库路径 扩展库--就是扩展的其它功能的库 这个就是扩展库文件夹,里面有很多功能性文件 就是增加这…

C#中利用JQuery实现视频网站的缩略图采集

最近有朋友想要采集优酷的视频标题和缩略图 (哈哈, 并非商业目的). 找到我帮忙, 考虑到有我刚刚发布的SpiderStudio, 我毫不犹豫的答应了. 首先在网页上视频的基本结构为: div.v- div.v-meta-title //标题- div.v-thumb / img //缩略图 对应的JQuery表达式为: $("div.v&q…

网站被劫持到其它网站如何解决

2019独角兽企业重金招聘Python工程师标准>>> 前段时间网站被黑了&#xff0c;从百度打开网站直接被劫持跳转到了cai票&#xff0c;du博网站上去&#xff0c;网站的首页index.html文件也被篡改成一些什么北京sai车&#xff0c;pk10&#xff0c;一些cai票的关键词内容…

没有网站,靠什么来吸引近9亿的互联网用户

2018年水果连锁企业百果园&#xff0c;其线上销售额突破20亿元、日订单量达6万单,光小程序用户数累计达到了1300万。 数据显示&#xff0c;以互联网起家的瑞幸咖啡在2018年的互联网市场占有率在30%左右&#xff0c;而作为咖啡巨头的星巴克互联网市场占有率仅10%左右。为什么会出…

Ajax_Apache访问资源文件的权限配置、资源存放路径配置、配置虚拟主机、动态网站静态网站区别...

1、配置资源的访问权限 修改配置文件&#xff1a;httpd.conf 文件 改完之后要重启 2、切换资源默认存放目录www 修改配置文件httpd.conf 文件中的存放目录 3、Apache是否能够同时支持多个站点 Apache能否支持通过不同的域名访问不同的站点 可以 做法&#xff1a;配置虚拟主机…

我的第一个发布到网上的程序,已经超过二十家网站收录了,呵呵,高兴

邮箱专家 1.3┊具备了文件拖放/自动搜索/自动解析等功能┊简体中文绿色免费版 软件大小&#xff1a;106 K热门等级&#xff1a; 更新时间&#xff1a;2008-08-21联 系 人&#xff1a;x_iayu163.com下载次数&#xff1a;450开 发 商&#xff1a; 界面预览&#xff1a;无软件类别…

python怎么测试一个网站的延迟_测量服务器的ping延迟-Python

I have a list of server IP addresses, I need to check if each one is online and how long the latency is. I havent found any straight forward ways of implementing this, and there seems to be a few problems in calculating latency accurately. Any ideas? 解决…

支付回调失败怎么处理_Thinkphp网站支付宝异步回调验签失败问题

php中文网最新课程每日17点准时技术干货分享手头一个项目&#xff0c;用到了支付宝手机网站支付&#xff0c;项目用tp做的&#xff0c;下载支付宝SDK后修改后调起正常&#xff0c;同步接口也可访问&#xff0c;但异步接口验签总是错误失败&#xff0c;fail&#xff0c;追踪到Ao…

最炫表白网站html5源码_(自适应手机版)响应式滚屏智能化物流设备类网站织梦模板 HTML5蓝色人工智能设备网站源码...

模板名称&#xff1a;(自适应手机版)响应式滚屏智能化物流设备类网站织梦模板 HTML5蓝色人工智能设备网站源码下载本套织梦模板采用织梦最新内核开发的模板&#xff0c;这款模板使用范围广&#xff0c;不仅仅局限于一类型的企业&#xff0c;物流设备、智能设备、人工智能类的网…

php冗余数据,WordPress网站提速优化之清理数据库冗余数据

最近小 C 发现数据库中有很多冗余数据&#xff0c;就想清理优化下数据库加快网站的运行速度&#xff0c;下面小 C 就教大家如何清理数据库表。PS&#xff1a;请注意看观看此文请认真&#xff0c;一定要先备份&#xff0c;备份&#xff0c;备份重要的事说三遍。备份后在执行 SQL…

laravel 开发的双语网站_2019年重庆市第十二届中等职业学校技能大赛网页前端开发项目教师培训成功举办...

点上方蓝字&#xff0c;欢迎关注我们&#xff01;2019年11月7日&#xff0c;重庆市第十二届中等职业学校技能大赛Web前端开发项目在重庆市南川隆化职业中学校成功举办&#xff01;本次培训由重庆市教育科学研究院主办&#xff0c;重庆市南川隆化职业中学校承办&#xff0c;成都…

说说大型高并发高负载网站的系统架构(更新)【转】

我在CERNET做过拨号接入平台的搭建&#xff0c;而后在Yahoo&3721从事过搜索引擎前端开发&#xff0c;又在MOP处理过大型社区猫扑大杂烩的架构升级等工作&#xff0c;同时自己接触和开发过不少大中型网站的模块&#xff0c;因此在大型网站应对高负载和并发的解决方案上有一些…

ISA2006发布内网非80端口网站

一&#xff1a;环境介绍1&#xff1a;内部网络有几个网站需要发布A&#xff1a;[url]http://10.0.0.171[/url]B&#xff1a;[url]http://10.0.0.172[/url]C&#xff1a;[url]http://10.0.0.173:8081[/url]2&#xff1a;内部网络通过ISA2006与外网相连&#xff0c;ISA外网地址是…

门户网站建设方案ppt_停车场整体建设方案(ppt)

交通大脑一体化平台解决方案(ppt)数据大脑运营中心规划方案(ppt)停车大数据平台总体规划方案(ppt)停车场整体规划方案(ppt)5G智慧公交大脑平台方案(ppt)5G中杆路内视频停车解决方案(ppt)AI城市数据大脑平台建设方案(图文)城市数据大脑平台技术规划方案(ppt)城市数据大脑平台演进…

云服务器ecs上能放几个网站,云服务器ecs能放几个站点

云服务器ecs能放几个站点 内容精选换一换对于已安装Cloud-Init/Cloudbase-Init的云服务器&#xff0c;首次执行切换/故障切换操作&#xff0c;或者创建容灾演练后&#xff0c;系统第一次启动时会运行Cloud-Init/Cloudbase-Init&#xff0c;为云服务器重新注入初始化数据&#x…

ArcGIS Server网站发布后地图显示空白的原因之一

一般来说&#xff0c;在地图网站发布后&#xff0c;如果地图区域显示为空白&#xff0c;但可以看到其他控件&#xff0c;可能是因为&#xff1a;1、引用的service运行不正常&#xff1b;2、通过local方式连接而没有添加arcgis identity&#xff1b;3、Web Server机器名中含有下…

WordPress建站指南

WordPress建站指南前言&#xff1a;WordPress是我所见的博客服务程序中最好的了&#xff0c;可以灵活配置出令人难以置信的华丽界面&#xff0c;以及很多新奇有趣的功能&#xff0c;在享受新奇乐趣的同时&#xff0c;学习和分享&#xff0c;实在是人生一大快事。有图有真相&…

mysql5.5.28安装详最后一个步骤时为啥一直转_.NET网站自动化部署

(给DotNet加星标&#xff0c;提升.Net技能)转自&#xff1a;2Jcnblogs.com/jijunjian/p/13781048.html前言又到一年国庆&#xff0c;终于有了难得的几天空闲&#xff0c;计划陪陪媳妇娃子&#xff0c;再把最近阅读的几本相关书总结梳理下。当然&#xff0c;计划总是美好的&…