百万PV网站架构案例

news/2024/5/9 23:41:38/文章来源:https://blog.csdn.net/weixin_34396902/article/details/91681002

一、百万pv架构案例概述

PV(page view,页面浏览量)即点击量,通常是衡量一个网站受欢迎程度的主要指标。

本案例采用四层模式实现,主要分为前端反向代理层、web层、数据库缓存层和数据库层。前端反向代理层采用主备模式,web层采用集群模式,数据库缓存层采用主备模式,数据库层采用主从模式。每一层都做到了高可用架构,大大提高了业务的稳定性。

案例架构图如下:实线表示是正常情况下数据流向,虚线表示的是非正常情况下的数据流向。
百万PV网站架构案例

案例环境如下表:

主机角色ip地址用途
master192.168.174.139前端nginx反向代理主机、redis缓存主机、mysql数据主库
backup192.168.174.141前端nginx反向代理备机、redis缓存备机、mysql数据备库
tomcat-node1192.168.174.142tomcat服务器
tomcat-node2192.168.174.165tomcat服务器

二、安装nginx+keepalived

(1)安装带有nginx rpm软件包的源

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

(2)使用yum安装keepalived跟nginx服务

yum install -y keepalived nginx

(3)修改keepalived.conf配置文件

vi /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {route_id NGINX_HA     //主服务器id为NGINX_HA,从是NGINX_HB
}vrrp_script nginx {script "/opt/shell/nginx.sh"   //编写脚本,待会创建interval 2
}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100  //master优先级要高于backupadvert_int 1authentication {auth_type PASSauth_pass 1111
}track_script {nginx           //触发脚本
}virtual_ipaddress {192.168.174.110    //虚拟ip地址}
}

(4)创建nginx.shell脚本目录,并编写脚本

mkdir /opt/shell
vi /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
fichmod +x /opt/shell/nginx.sh 

从服务器keepalived配置操作跟主服务器操作一样。

(5)编辑nginx.conf配置文件,主从操作一样

upstream tomcat_pool {server 192.168.174.165:8080;  //两台节点服务器地址server 192.168.174.142:8080;ip_hash;}server {listen 80;server_name 192.168.174.110; //虚拟ip地址location / {proxy_pass http://tomcat_pool;proxy_set_header X-Real-IP $remote_addr;}}

(6)检查语法并开启服务

nginx -t -c /etc/nginx/nginx.conf  //测试配置文件语法
systemctl start keepalived.service    //nginx启动会等待一会

(7)测试keepalived的功能是否正常
主服务器:ip addr
百万PV网站架构案例
关闭keepalived服务再次查看主服务器,此时虚拟ip地址已经不存在了
百万PV网站架构案例
切换到从服务器上查看,此时虚拟ip自动漂移到从服务器。
百万PV网站架构案例
开启主服务器上的keepalived服务,此时虚拟ip再次漂移到主服务器。
百万PV网站架构案例

三、Tomcat安装

两台节点服务器安装过程一样。

(1)解压缩Apache跟jdk,

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

(2)配置jdk环境变量

vi /etc/profileexport 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/libsource /etc/profile  //让环境变量及时生效java -version  //查看java版本

(3)创建tomcat开启跟关闭的链接,并开启服务

cp -r apache-tomcat-8.5.23 /usr/local/tomcat8ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdowntomcatup
netstat -anpt | grep 8080

(4)测试默认测试页是否正常显示

http://192.168.174.165:8080/  
http://192.168.174.142:8080/vi /usr/local/tomcat8/webapps/ROOT/index.jsp //修改默认网页内容<h1>this is server 142!!</h1>

输入调度器地址,也就是虚拟地址http://192.168.174.110/ ,测试两台节点的调度情况
百万PV网站架构案例

当down掉165这台主机后,查看页面显示的信息,此时显示的是另外一台tomcat服务器的首页
百万PV网站架构案例

cd /usr/local/tomcat8/conf/vi server.xml //跳到行尾,在Host name下新增 148<Context path="" docBase="SLSaleSystem" reloadable="true" debug="0"></Context>
日志调试信息debug为0表示信息越少,docBase指定访问目录

四、mysql安装

(1)yum安装maridb数据库

yum install -y mariadb-server mariadbsystemctl start mariadb.service  //开启服务
systemctl enable mariadb.service  netstat -anpt | grep 3306   //查看服务是否开启成功

mysql_secure_installation //常规安全设置

Enter current password for root (enter for none): #敲回车
OK, successfully used password, moving on...Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..... Success!Remove anonymous users? [Y/n] n... skipping.Disallow root login remotely? [Y/n] n... skipping.Remove test database and access to it? [Y/n] n... skipping.Reload privilege tables now? [Y/n] y... Success!

(2)测试mariadb是否可用

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

(3)导入商城数据

mysql -u root -p  < slsaledb-2014-4-10.sql
mysql -uroot -p
show databases;GRANT all ON slsaledb.* TO 'root'@'%' IDENTIFIED BY  'abc123'; //给root用户授权
flush privileges; //刷新

(5)在两台tomcat服务器上搭建网站

tar xf SLSaleSystem.tar.gz -C /usr/local/tomcat8/webapps/
//解压商城
cd /usr/local/tomcat8/webapps/SLSaleSystem/WEB-INF/classesvi jdbc.properties //修改数据库IP地址是VRRP的虚拟IP,以及授权的用户名root和密码abc123。
driverClassName=com.mysql.jdbc.Driver
url=jdbc\:mysql\://192.168.174.110\:3306/slsaledb?useUnicode\=true&characterEncoding\=UTF-8
uname=root
password=abc123
minIdle=10
maxIdle=50
initialSize=5
maxActive=100
maxWait=100
removeAbandonedTimeout=180
removeAbandoned=true

(6)网站测试

http://192.168.1754.142:8080/   //默认的用户名admin 密码:123456
http://192.168.174.165:8080/http://192.168.174.110 //输入虚拟地址测试登录,并且关闭主再测试登录

百万PV网站架构案例
百万PV网站架构案例
百万PV网站架构案例

五、redis集群

(1)安装epel源

yum install -y epel-release

(2)安装Redis

yum install redis -y

(3)更改redis.conf配置文件

vim /etc/redis.conf
bind 0.0.0.0

从服务器上多如下一行配置

slaveof 192.168.174.139  6379   //主服务器的IP不是虚拟IP

开启服务,检查端口是否开启

systemctl start redis.service
netstat -anpt | grep 6379

(4)进入主服务器数据库,创建数据

redis-cli -h 192.168.174.139 -p 6379
192.168.174.139:6379> set username zhangsan
OK
192.168.174.139:6379> get username
"zhangsan"

(5)进入从服务器,测试是否同步

redis-cli -h 192.168.174.141 -p 6379
192.168.174.141:6379> get username
"zhangsan"     //获取到主服务器创建的数据,说明主从同步成功

(6)在两台tomcat服务器上配置网站链接redis的参数

cd /usr/local/tomcat8/webapps/SLSaleSystem/WEB-INF/classes/vim applicationContext-mybatis.xml<constructor-arg value="192.168.174.110"/>         #47行<constructor-arg value="6379"/>    #48行

(7)打开网站页面,点击需要进行数据库调用的操作,并测试缓存是否开启

192.168.174.110:6379> info     //查看缓存是否开启成功
# Stats
...
keyspace_hits:2  //当命中为2时说明缓存开启成功
keyspace_misses:20   //未命中
...

(8)主服务器配置redis主从切换

vi /etc/redis-sentinel.confsentinel monitor mymaster 192.168.174.139 6379 1 #1表示1台从(这边的ip地址是主服务器的ip地址)sentinel down-after-milliseconds mymaster 3000   #故障切换时间单位是毫秒

(9)启动集群服务,并查看集群信息

service redis-sentinel start
netstat -anpt | grep 26379
redis-cli -h 192.168.174.139 -p 26379 
192.168.174.139:26379> info    #查看集群信息
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.174.139:6379,slaves=1,sentinels=1   //此时redis主服务器为139这台主机

(10)关闭主服务器redis服务,查看集群信息中的redis主服务器ip是否发生变化

systemctl stop redis.service   #关闭主服务器的redis服务redis-cli -h 192.168.174.139 -p 26379 192.168.174.139:26379> info # Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.174.141:6379,slaves=1,sentinels=1  //此时发现Redis主服务器ip地址切换为从redis服务器地址,说明主从redis配置成功

六、mysql主从配置

1、主服务器上的配置

(1)编辑my.cnf配置文件

vi /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

(2)开启mysql服务,并查看端口状态

systemctl restart mariadb
netstat -anpt | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      13998/mysqld

(3)进入数据库,查看master状态,

mysql -u root
MariaDB [(none)]>show master status; //记录日志文件名称和 位置值
+------------------+----------+--------------+--------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         |
+------------------+----------+--------------+--------------------------+
| mysql_bin.000001 |      473 |              | mysql,information_schema |
+------------------+----------+--------------+--------------------------+
1 row in set (0.00 sec)
grant replication slave on *.* to 'rep'@'192.168.174.%' identified by '123456';
flush privileges;

3、从服务器配置

(1)编辑my.cnf配置文件

[mysqld]
binlog-ignore-db=mysql,information_schema
character_set_server=utf8
log_bin=mysql_bin
server_id=2    //server_id改为2,表示为是第一台从服务器,为1,表示为是mysql主服务器
log_slave_updates=true
sync_binlog=1

(2)开启mysql服务,查看端口状态

systemctl restart mariadb
netstat -anpt | grep 3306

(3)进入数据库

change master to master_host='192.168.174.139',master_user='rep',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=473;
start slave;
show slave status\G;  //查看slave状态Slave_IO_Running: Yes   //当都为yes时表示开启成功
Slave_SQL_Running: Yes

(4)测试主从同步

在主服务器上创建checkMysql

MariaDB [(none)]> create database checkMysql;
Query OK, 1 row affected (0.01 sec)MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| checkMysql         |
| mysql              |
| performance_schema |
| slsaledb           |
| test               |
+--------------------+
6 rows in set (0.00 sec)

查看mysql从服务器数据库,此时存在checkMysql,说明mysql主从创建成功。

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| checkMysql         |
| mysql              |
| performance_schema |
| slsaledb           |
| test               |
+--------------------+
6 rows in set (0.00 sec)

转载于:https://blog.51cto.com/13620954/2155656

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

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

相关文章

Tomcat部署JSP网站(部署web应用?)

首先看下我的JSP网站所在的目录截图&#xff08;D:\web\qqonlinemgrdao&#xff09;&#xff1a; ------------------------------------------------------------------------------------------------------------------------------------------------------ 第一步找到Tom…

kali系统网站部署笔记

网站放在 其他位置----计算机------var-----www----html 首先启动nginx service nginx start 然后访问127.0.0.1 就会看到Apache正在工作 启动mysql数据库 service mysql start 接着用 mysql -u root -p 连接mysql 用户名&#xff1a;root 密码&#xff1a;123456 数据库操作命…

cef浏览12306网站不正常问题

cef版本&#xff1a;cef_binary_3.2623.1401.gb90a3be_windows32.7z使用cef时&#xff0c;浏览其它网站正常&#xff0c;唯独浏览器www.12306.cn时不正常&#xff0c;真是不可思议&#xff0c;cefclient.exe显示证书错误刚好在12306首页看到了这句话&#xff1a;为保障您顺畅购…

由12306.cn谈谈网站性能技术

转载自&#xff1a;&#xff08;陈皓的 12306.cn谈谈网站性能技术&#xff09;http://coolshell.cn/articles/6470.html 12306.cn网站挂了&#xff0c;被全国人民骂了。我这两天也在思考这个事&#xff0c;我想以这个事来粗略地和大家讨论一下网站性能的问题。因为仓促&#…

第1节 网站点击流项目(上):5、6、7、数据预处理

五、 模块开发----数据预处理 1&#xff0e; 主要目的 过滤“不合规”数据&#xff0c;清洗无意义的数据 格式转换和规整 根据后续的统计需求&#xff0c;过滤分离出各种不同主题(不同栏目path)的基础数据。 2&#xff0e; 实现方式 开发一个mr程序WeblogPreProcess(内容太长&a…

大型网站架构演变和知识体系 (转)

之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结果&#xff0c;而没有很详细的讲为什么需要做这样的演变&#xff0c;再加上近来感觉有不少同学都很难明白为什么…

javascript中mouseenter与mouseover的异同

不知道大家在面试或者工作过程中有没有被 mouseover 和 mouseenter (对应的是 mouseout 和 mouseleave )事件所困扰。自己之前在面试的时候就有被问到诸如mouseover和mouseenter事件的异同之类的问题&#xff1f;当时没有答出来&#xff0c;一直也对这两个事件有点模糊不清&…

推荐20款非常好的网站可用性测试工具

网站可用性是指用户能否有效地找到所需的信息或完成他的任务&#xff0c;效率如何以及是否让人有愉快满意的感受。如果网站可用性较差&#xff0c;会浪费用户的时间&#xff0c;大大降低网站的回头访问率&#xff0c;这对网站的生存是一个至关重要的问题。因此&#xff0c;可用…

从天际网新版看国内职业社交网站的走势

从天际网新版看国内职业社交网站的走势<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />文 小刀马对于大多数网站而言&#xff0c;经过一段时间之后总会进行相应的改版&#xff0c;这也是发展中不断总结经验的一种方式&#xff…

了解JOOMLA可以去的网站

2019独角兽企业重金招聘Python工程师标准>>> http://www.joomlagate.com/forum/topic-41721/ http://joomlacode.org/gf/account/?actionUserAdd http://people.joomla.org/my-page.html 转载于:https://my.oschina.net/u/220395/blog/38690

高性能网站14条——读《高性能网站建设指南》

虽然不是做前端开发的&#xff0c;但是了解一些也是有用的。例如js脚本和css脚本是应该放在页面顶部吗&#xff1f;… 规则1、 较少HTTP请求 性能黄金法则&#xff1a;只有10%-20%的最终用户响应时间花在了下载HTML文档上。其余的80%-90%时间花在了下载页面的所有组件上。 实…

一个小企业主的坎坷建站经历

2019独角兽企业重金招聘Python工程师标准>>> 看到同行在互联网上赚的盆满钵满的&#xff0c;我的心也蠢蠢欲动起来。鬼使神差下我在耐思尼克上购买了 网站空间和域名&#xff0c;本以为网站可以使用了&#xff0c;却被服务商告知还需要上传网站建站程序&#xff0c;…

中国联通网上营业厅,12306式的网站?

就在今日下午&#xff0c;笔者登陆联通网上营业厅办理套餐变更业务时&#xff0c;发现了下图一个“迷魂阵”似的矩阵&#xff0c;笔者顿时眩晕&#xff0c;不知道点击何处&#xff0c;作为读者的你们&#xff0c;你们看到下图觉得我办理66元A套餐该点击哪里? 于是我发了一条微…

参考TinyOS官方网站学习建立新platform-yamp

创建平台目录每个平台都需要自己的文件夹存放相关驱动代码&#xff0c;位于tos/platforms/目录中。 $cd /opt/tinyos-2.1.2/tos/platforms $mkdir yamp 创建.platform文件每个平台目录都必须包含名为 的文件&#xff0c;包含该平台的基本编译参数。 tos/platforms/yamp/.platfo…

手机版WEB开发经验分享,手机版网站开发注意事项,网站自适应,手机版网站自适应,移动安卓APP自适应...

为什么80%的码农都做不了架构师&#xff1f;>>> http://my.oschina.net/cart/ 做前端开发不短了&#xff0c;用过jQuery Mobile jqMobi 也纯手工写过。。 最后总结如下&#xff1a; jQuery Mobile&#xff1a;适合大而全&#xff0c;兼容性高&#xff0c;功能全…

python爬虫写入数据库_python爬虫--爬取某网站电影信息并写入mysql数据库

书接上文&#xff0c;前文最后提到将爬取的电影信息写入数据库&#xff0c;以方便查看&#xff0c;今天就具体实现。 首先还是上代码&#xff1a; #-*- coding:utf-8 -*- importrequestsimportreimportmysql.connector#changepage用来产生不同页数的链接 defchangepage(url,tot…

网站导航颜色停留_南京网站建设:忘记首页请专注于重要页面

重视主页&#xff0c;重视网页设计&#xff0c;然后立即投资是是网站设建设方面的老派思维。访客访问了您正在运行的网站&#xff0c;准备深入研究他们真正想要的信息。如果您不尽快提供高质量的内容&#xff0c;那么世界上所有引人注目的视觉效果都不会留住您的访客。访客并不…

excel教程自学网_超实用!良心推荐15个神级自学网站,内容全面质量又高

今天和大家分享一波内容比较全面的自学网站&#xff0c;希望你们能够喜欢。1. 哔哩哔哩现在的哔哩哔哩可不仅仅是番剧的天下&#xff0c;该网站现拥有各种类型的学习视频资源&#xff0c;什么PS、PR、AI、英语、日语、编程等等&#xff0c;太多了&#xff01;真的是搜什么有什么…

企信下载的文件在哪里_在微软官方网站”满速”下载Windows10最新系统镜像方法...

你平时需要下载win10的原版系统镜像文件都会去哪里下载呢&#xff1f;微软官方、还是在"MSDN我告诉你"的第三方网站呢&#xff1f;相信很多的小伙伴都会在MSDN我告诉你这个网站下载&#xff0c;他里面提供了非常全面的win10官方的原版镜像。但它仅仅提供了ed2k链接一…

seo提交工具_呼伦贝尔网站建设_5118站长数据分析平台非常适合SEO站长做数据统计...

发布时间:2020-12-07 08:12:27标准站长需要哪些工具&#xff1f;我相信许多站长没有考虑过这个问题。我一直认为&#xff0c;找到一个数据非常大的工具非常适合我们的站长。几天前&#xff0c;朋友们推荐了一个新的站长工具。我认为它是未来站长的工具。1、5118站长工具分析数据…