搭建百万 PV 网站架构
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,案例概述 :采用四层模式实现,主要分为前端反向代理层、Web层、数据库缓存层和数据库层前端反向代理层层采用主备模式,Web层采用群集模式,数据库缓存层采用主备模式,数据库层采用主从模式。为了更接近生产
千家信息网最后更新 2025年12月01日搭建百万 PV 网站架构
案例概述 :
- 采用四层模式实现,主要分为前端反向代理层、Web层、数据库缓存层和数据库层前端反向代理层层采用主备模式,Web层采用群集模式,数据库缓存层采用主备模式,数据库层采用主从模式。
- 为了更接近生产环境,采用两台实体机部署此次环境,将前端反向代理层、数库缓存层、数据库层部署在实体机上,只将Web层部署在KVM虚拟机当中。同时将每一层都做了高可用架构,保证业务的稳定性。
百万pv网络架构 :

ps:实现是正常情况数据流向,虚线是异常情况下的数据流向
案例环境 :
| 主机名 | IP地址 | 系统 | 用途 |
|---|---|---|---|
| master | 192.168.217.128 | CentOS 7.3 | 反向代理机、redis主缓存、mysql主数据库 |
| backup | 192.168.217.129 | CentOS 7.3 | 反向代理机、redis从缓存、mysql从数据库 |
| tomcat-node 1 | 192.168.217.130 | CentOS 7.3 | web |
| tomcat-node 2 | 192.168.217.131 | CentOS 7.3 | web |
部署 master :
搭建 Nginx 反向代理:
1.安装源 :
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/\nginx-release-centos-7-0.el7.ngx.noarch.rpm # 安装带有nginx rpm软件包的源 主从都要做2.配置 Nginx 反向代理 :
yum install -y nginxvi /etc/nginx/nginx.conf # 在 http 添加http { upstream tomcat_pool { server 192.168.217.130:8080; #真实节点 web server 192.168.217.131:8080; ip_hash; #会话稳固功能,否则无法通过vip地址登陆 } server { listen 80; server_name 192.168.175.188; #虚拟出的IP location / { proxy_pass http://tomcat_pool; proxy_set_header X-Real-IP $remote_addr; } } include /etc/nginx/mime.types; .......nginx -t -c /etc/nginx/nginx.conf //测试配置文件语法搭建 keepalived :
1.配置 keepalived :
yum install -y keepalivedvim /etc/keepalived/keepalived.conf ! Configuration File for keepalivedglobal_defs { route_id NGINX_HA}vrrp_script nginx { #添加脚本路径 script "/opt/shell/nginx.sh" interval 2 #每隔两秒执行一次}vrrp_instance VI_1 { state MASTER #活跃服务器 interface ens33 #网卡 virtual_router_id 51 priority 100 #优先级 advert_int 1 authentication { auth_type PASS auth_pass 1111}track_script { #调用脚本 nginx}virtual_ipaddress { 192.168.217.188 #虚拟IP }}2.编写 Nginx 脚本 :
mkdir /opt/shellvim /opt/shell/nginx.sh#!/bin/bashk=`ps -ef | grep keepalived | grep -v grep | wc -l`if [ $k -gt 0 ];then /bin/systemctl start nginx.serviceelse/bin/systemctl stop nginx.servicefi# 以上意思为开启 keepalived 会自动开启 Nginxchmod +x /opt/shell/nginx.shsystemctl start keepalived.service #开启服务配置 backup :
和 master 配置除 keepalived 稍微不同,其他相同 :
vim /etc/keepalived/keepalived.conf .......vrrp_instance VI_1 { state BACKUP #修改备份模式 interface ens33 virtual_router_id 51 priority 90 #确定主从......systemctl start keepalived.service #开启服务测试 :
在keepalived服务开启状态下,关闭nginx做测试,发现每隔2秒nginx又会自动启用
关闭 主keepalived ,测试主从漂移地址切换,使用 ip addr 查看 VIP 绑定位置
部署 web 服务 :
1.安装 java 环境:
tar xf jdk-8u144-linux-x64.tar.gz -C /optcp -rv /opt/jdk1.8.0_144/ /usr/local/java #移动重命名vim /etc/profile #添加java环境export JAVA_HOME=/usr/local/javaexport JRE_HOME=/usr/local/java/jreexport PATH=$PATH:/usr/local/java/binexport CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/libsource /etc/profile #刷新环境java -version #证明java环境安装成功java version "1.8.0_144"2.安装 tomcat :
tar xf apache-tomcat-8.5.23.tar.gz -C /optcp -r /opt/apache-tomcat-8.5.23 /usr/local/tomcat8 #移动重命名ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup #开启tomcatln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown #关闭tomcattomcatup #开启netstat -anpt | grep 8080 #查看服务是否开启3.测试 :
http://192.168.217.130:8080/ #测试默认测试页是否正常显示http://192.168.217.131:8080/访问 http://192.168.217.188 #修改web不同首页,测试keepalived和反向代理是否成功vim /usr/local/tomcat8/webapps/ROOT/index.jsp #首页位置部署 master 和 backup 数据库 :
yum install -y mariadb-server mariadbsystemctl start mariadb.service systemctl enable mariadb.servicenetstat -anpt | grep 3306mysql_secure_installation #常规安全设置,测试可以省略。mysql -uroot -p < slsaledb-2014-4-10.sql #导入SL商城数据mysql -uroot -pshow databases; #查看有没有 slsaledb 数据库GRANT all ON slsaledb.* TO 'root'@'%' IDENTIFIED BY 'abc123'; #授权flush privileges; # 刷新部署 web 服务器 :
1.添加
cd /usr/local/tomcat8/conf/vim server.xml #跳到148行尾,在Host name下新增 #日志调试信息debug为0表示信息越少,docBase指定访问目录# SLSaleSystem 为webapps目录下的源码包tar xf SLSaleSystem.tar.gz -C /usr/local/tomcat8/webapps/ #解压商城的源码包cd /usr/local/tomcat8/webapps/SLSaleSystem/WEB-INF/classes #移动到 webapps下vim jdbc.properties #修改数据库IP地址是VRRP的虚拟IP,以及授权的用户名root和密码abc123。2.网站测试,进入SL商城 :
http://192.168.217.130:8080/ #默认的用户名admin 密码:123456http://192.168.217.131:8080/http://192.168.217.188 #输入虚拟地址测试登录,并且关闭主再测试登录
部署 master :
1.在 redis 缓存主机配置 :
yum install -y epel-release #安装epel源yum install redis -y # 安装 redis 缓存服务vim /etc/redis.conf #修改配置文件bind 0.0.0.0systemctl start redis.service #开启服务netstat -anpt | grep 6379redis-cli -h 192.168.217.128 -p 6379 #本地测试连接192.168.217.128:6379> set name test #创建name 值是test192.168.217.128:6379> get name #查看name值2.配置 redis 缓存从机配置 :
yum install -y epel-release #安装epel源yum install redis -y # 安装 redis 缓存服务vim /etc/redis.conf #修改配置文件bind 0.0.0.0slaveof 192.168.217.128 6379 #主服务器的IP不是虚拟IP 第266行systemctl start redis.service #开启服务redis-cli -h 192.168.217.129 -p 6379 //登录从,获取值,成功说明主从同步成功192.168.217.129:6379> get name #如果能查看到 ,说明同步成功部署 web :
配置商城项目中连接redis的参数 :
vim /usr/local/tomcat8/webapps/SLSaleSystem/WEB-INF/classes/applicationContext-mybatis.xml 47 行 #修改虚拟IP 48 部署 master :
1.测试缓存效果 :
redis-cli -h 192.168.217.188 -p 6379192.168.175.188:6379> infokeyspace_hits:1 或者 keyspace_misses:0 #关注这个值,命中数和未命中数#登录商城,然后反复点击需要数据库参与的操作页面,再回来使用info 检查keyspace_hits或者keyspace_misses: 值变化。2.配置redis集群主从切换(只在主服务器是操作):
redis-cli -h 192.168.217.128 info Replication //获取当前服务器的角色vim /etc/redis-sentinel.conf17 protected-mode no #开启68 sentinel monitor mymaster 192.168.175.128 6379 1 #1表示1台从 注意:修改98 sentinel down-after-milliseconds mymaster 3000 #故障切换时间单位是毫秒systemctl restart redis-sentinel.service //启动集群netstat -anpt | grep 26379redis-cli -h 192.168.217.128 -p 26379 info Sentinel //查看集群信息3.验证主从切换 :
systemctl stop redis.service #关闭主缓存服务redis-cli -h 192.168.175.128 -p 26379 info Sentinel #发现主变成了129 稍微等下 在master查看4.验证数据同步情况 :
redis-cli -h 192.168.217.129 -p 6379 #进入从缓存服务器192.168.217.129:6379> set name2 test2 #创建OK192.168.217.129:6379> get name2"test2"systemctl start redis #把主缓存服务启动redis-cli -h 192.168.217.128 -p 6379 #进入主缓存服务器192.168.217.128:6379> get name2 #查看"test2"部署 master 和 backup 的mysql主从 :
1.编辑配置文件 :
vim /etc/my.cnf #[mysqld]下添加binlog-ignore-db=mysql,information_schemacharacter_set_server=utf8log_bin=mysql_binserver_id=1 #主从id不同log_slave_updates=truesync_binlog=1vim /etc/my.cnf # mysql从服务器 #在[mysqld]下添加 server_id=2 systemctl restart mariadb.service #重启数据库2.在 master 查看授权 :
mysql -u root -pshow master status; #记录日志文件名称和偏移量位置值grant replication slave on *.* to 'rep'@'192.168.175.%' identified by '123456'; #授权flush privileges; #刷新3.在 backup 授权 :
mysql -u root -pchange master to master_host='192.168.217.128',master_user='rep',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=245;start slave; #开启show slave status; #查看 Slave_IO_Running: Yes #成功 Slave_SQL_Running: Yes4.测试 :
在主数据库创建数据库,在从数据库查看。
数据
服务
数据库
测试
缓存
配置
主从
服务器
代理
环境
成功
模式
商城
地址
文件
切换
登录
不同
位置
信息
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
建站助手 数据库
制作数据库查询表时需要什么条件
青年网络安全意识教育
微信后端服务器超时
计算机网络技术冷门
数据库opt
sql数据库与qt
服务器要开防火墙吗
内存数据库排名
网易云网络安全
网络安全维护英文名词
db2 数据库备份
湛江app软件开发的费用
太原软件开发培训学校有哪些
数据库与数据仓
北京梦享田园网络技术
服务器管理网口图片
我们说的软件开发是指什么
软件开发工作是不是很累
网络安全典型的事件有什么
专科报计算机网络技术好吗
扬州九一网络技术有限公司
数据库配置 连接失败
jsp 内网 服务器
sql数据库与qt
关于网络安全的知识小学生
服务器挂淘宝客软件
连接数据库工具有哪些
国庆节绘画软件开发
拒绝网络暴力伤害维护网络安全