手把手带你搭建百万PV网站架构

简介

PV( page view),即页面浏览量,或点击量;通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。对PV的解释是,一个访问者在24小时(0点到24点)内到底看了你网站几个页面。这里需要强调:同一个人浏览你网站同一个页面,不重复计算PV量,点100次也算1次。说白了pV就是一个访问者打开了你的几个页面。PV之于网站,就像收视率之于电视,从某种程度上已成为投资者衡量商业网站表现的最重要的尺度。PV的计算:当一个访问者访问的时候,记录他所访问的页面和对应的IP,然后确定这个P今天询问了这个页面没有。如果你的网站到了23点,单纯P有10万条的话,每个访问者平均访问了3个页面,那么pV表的记录就要有30万条

架构分析

项目计划采用四层模式实现,主要分为前端反向代理层、Web层、数据库缓存层、数据库层

  • 前端反向代理采用主备模式、Web层采用集群模式数据库缓存层采用主备模式、数据库层采用主从模式
  • 前端使用keepalived作为高可用软件,虚拟IP设置为192.168.100.100(内网)和12.0.0.12(外网),设置一个虚拟内网IP是为了内部各个系统之间的通信

实验环境

主机名称 IP地址 系统版本 用途
master 192.168.100.71 CentOS_7.4_x86_64 前端反向代理主机、redis缓存主机、MySQL数据库
backuper 192.168.100.72 CentOS_7.4_x86_64 前端反向代理主机、redis缓存主机、MySQL数据库
tomcat01 192.168.100.73 CentOS_7.4_x86_64 web服务
tomcat02 192.168.100.74 CentOS_7.4_x86_64 web服务

搭建步骤

一、配置Keepalived、Nginx服务

1、配置Master

1).安装更新源

[[email protected] ~]# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

2).安装相关软件

[[email protected] ~]# yum -y install keepalived nginx

3).编辑keepalived主配置文件

[[email protected] ~]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_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 200
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass 1111
}

track_script {
        nginx
}

virtual_ipaddress {
        192.168.100.100
        }
}

4).创建触发脚本

[[email protected] ~]# mkdir /opt/shell
[[email protected] ~]# 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

[[email protected] ~]# chmod +x /opt/shell/nginx.sh #赋予执行权限

5).编辑nginx配置文件
[[email protected] ~]# vim /etc/nginx/nginx.conf

http {
……
       upstream tomcat_pool {
                server 192.168.100.73:8080 ;
                server 192.168.100.74:8080 ;
                ip_hash;           #会话稳固功能,否则无法通过vip地址登陆
        }
        server {
                listen 80;
                server_name 192.168.100.100; #虚拟出的IP
                location / {
                        proxy_pass http://tomcat_pool;
                        proxy_set_header X-Real-IP $remote_addr;
                }
        }
include /etc/nginx/conf.d/*.conf;        #在此行上方进行添加编辑
}

[[email protected] ~]# nginx -t -c /etc/nginx/nginx.conf #检测语法是否正确

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

[[email protected] ~]# systemctl start keepalived.service #启动服务
[[email protected] ~]# ip addr show ens33

2、配置backuper

1).安装epel源

配置与master服务器相同略……

2).安装相关软件

配置与master服务器相同略……

3).编辑keepalived主配置文件

[[email protected] ~]# cd /etc/keepalived/
[[email protected] keepalived]# cp keepalived.conf keepalived.conf.bak #备份源文件
[[email protected] keepalived]# scp [email protected]:/etc/keepalived/keepalived.conf . #下载master服务器配置文件
[[email protected] keepalived]# vim keepalived.conf #编辑主配置文件

route_id NGINX_HB       #注意,服务器id要与master服务器区分
state BACKUP                  #注意,备机定义状态为BACKUP
priority 150                      #注意,活跃值要低于master服务器

4).创建触发脚本

[[email protected] ~]# mkdir /opt/shell
[[email protected] ~]# cd /opt/shell/
[[email protected] shell]# scp [email protected]:/opt/shell/nginx.sh . #下载master服务器脚本文件
[[email protected] ~]# chmod +x /opt/shell/nginx.sh #赋予执行权限

5).编辑nginx配置文件

[[email protected] nginx]# scp [email protected]:/etc/nginx/nginx.conf . #下载master服务器配置文件

6).测试

[[email protected] ~]# systemctl start keepalived.service #启动备机keepalived服务
[[email protected] ~]# systemctl stop keepalived.service #模拟master服务器故障

[[email protected] ~]# ip addr show ens33 #查看备机

三、配置Web服务

1、配置tomcat01主机

1).安装C语言编译器

[[email protected] ~]# yum -y install gcc gcc-c++

2).安装jdk

[[email protected] ~]# tar xvfz jdk-8u144-linux-x64.tar.gz
[[email protected] ~]# mv jdk1.8.0_144/ /usr/local/java
[[email protected] ~]# vim /etc/profile #修改环境变量配置文件

#末尾添加以下四行
JAVA_HOME=/usr/local/java
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

[[email protected] ~]# source /etc/profile #使配置文件生效

3).查看Java版本

[[email protected] ~]# java -version

4).安装Tomcat

[[email protected] ~]# tar xvfz apache-tomcat-8.5.23.tar.gz
[[email protected] ~]# mv apache-tomcat-8.5.23/ /usr/local/tomcat8

5).优化命令路径

[[email protected] ~]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
[[email protected] ~]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown

6).启动服务

[[email protected] ~]# tomcatup
[[email protected] ~]# netstat -anpt | grep ‘:8080‘

7).编辑默认首页

[[email protected] ~]# vim /usr/local/tomcat8/webapps/ROOT/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
    <head>
        <title>Test JSP Page</title>
    </head>
    <body>
        <% out.println("this is tomcat01 AAAAAAAAAA"); %>
    </body>
</html>

[[email protected] ~]# vim /usr/local/tomcat8/conf/server.xml

<Host name="localhost"  appBase="webapps  unpackWARs="true" autoDeploy="true"> #约149行,在此行下添加以下标签
<Context path="" docBase="SLSaleSystem" reloadable="true" debug="0"></Context>     #docBase指定访问目录;日志调试信息debug为0表示信息越少,

8).重启服务

[[email protected] ~]# tomcatdown #关闭
[[email protected] ~]# tomcatup #启动

四、配置tomcat02主机Web服务

1到6搭建步骤与tomcat01服务器相同,略……

7、编辑默认首页

[[email protected] ~]# vim /usr/local/tomcat8/webapps/ROOT/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
    <head>
        <title>Test JSP Page</title>
    </head>
    <body>
        <% out.println("this is tomcat02 BBBBBBBBBB"); %>
    </body>
</html>

五、配置Master、backuper主机Mariadb服务

[[email protected] ~]# yum install -y mariadb-server mariadb

[[email protected] ~]# systemctl start mariadb.service
[[email protected] ~]# systemctl enable mariadb.service

[[email protected] ~]# mysql_secure_installation #安全设置初始化

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we‘ll need the current
password for the root user.  If you‘ve just installed MariaDB, and
you haven‘t set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y   #是否要设置root密码
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] y  #是否要删除匿名用户,"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] y   #是否远程禁止root登录
 ... Success!

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] y  #是否删除测试数据库并访问它
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

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!

[[email protected] ~]# mysql -u root -p < slsaledb-2014-4-10.sql #导入项目所需要的数据信息
[[email protected] ~]# mysql -uroot -p
MariaDB [(none)]> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| slsaledb           |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> grant all on slsaledb.* to ‘root‘@‘%‘ identified by ‘123‘; #授权用户
MariaDB [(none)]> flush privileges; #重新加载权限表

六、部署web服务器商城项目(两台tomcat服务器都要部署)

1、解压项目

[[email protected] ~]# tar xvfz SLSaleSystem.tar.gz -C /usr/local/tomcat8/webapps/ #解压项目

2、修改数据库配置文件

[[email protected] ~]# cd /usr/local/tomcat8/webapps/SLSaleSystem/WEB-INF/classes/
[[email protected] classes]# vim jdbc.properties #修改连接数据库配置文件

3、重启tomcat服务

[[email protected] classes]# tomcatdown #关闭
[[email protected] classes]# tomcatup #启动

4、访问商城网站

七、配置rdis主从同步

1、配置Master

1).安装redis

[[email protected] ~]# yum install -y epel-release #下载epel源
[[email protected] ~]# yum -y install redis #安装redis软件

2).编辑主配置文件

[[email protected] ~]# vim /etc/redis.conf

bind 0.0.0.0                                                         #约61行,监听的地址改为任意的ip

3).启动服务

[[email protected] ~]# systemctl start redis.service #启动服务
[[email protected] ~]# netstat -anpt | grep 6379

4).连接redis服务

[[email protected] ~]# redis-cli -h 192.168.100.71 -p 6379

192.168.100.71:6379> set name hello      #设置"name"的值为"hello"
OK
192.168.100.71:6379> get name             #查看key为"name"对应的value值
"hello"

2、配置backuper

注意相同点略……

1).编辑主配置文件

[[email protected] ~]# vim /etc/redis.conf

bind 0.0.0.0                                                         #约61行,监听的地址改为任意的ip
slaveof 192.168.100.71 6379                          #约266行,设置主从同步,添加主服务器ip以及对应的端口

2).连接服务

[[email protected] ~]# redis-cli -h 192.168.100.72 -p 6379

九、配置web服务器连接redis(两台都要改)

1、编辑ssm框架mybatis集成配置文件

[[email protected] ~]# vim /usr/local/tomcat8/webapps/SLSaleSystem/WEB-INF/classes/applicationContext-mybatis.xml

#编辑以下参数
<!--redis 配置 开始-->    #找到此行
 <constructor-arg value="192.168.100.100"/>   #约47行左右,编辑缓存服务器地址(这里设置为虚拟ip)
<constructor-arg value="6379"/>                         #约48行左右,编辑缓存服务器端口6379                 

2、重启tomcat服务

[[email protected] classes]# tomcatdown #关闭
[[email protected] classes]# tomcatup #启动

3、连接redis

[[email protected] ~]# redis-cli -h 192.168.100.100 -p 6379
192.168.100.100:6379> info #redis服务器基本信息及其状态

4、访问商场网站

5、再次查看redis信息

[[email protected] ~]# redis-cli -h 192.168.100.100 -p 6379

192.168.100.100:6379> info  

十、配置redis群集

1、查看主服务器信息

[[email protected] ~]# redis-cli -h 192.168.100.71 info Replication

2、编辑redis哨兵配置文件

[[email protected] ~]# vim /etc/redis-sentinel.conf

protected-mode no      #约17行,关闭保护模式,允许公网访问redis cache
sentinel monitor mymaster 192.168.100.71 6379 1 #约68行,指向主服务器,1表示1台从服务器
sentinel down-after-milliseconds mymaster 3000    #约98行,故障切换时间,单位默认为毫秒

3、启动群集

[[email protected] ~]# systemctl start redis-sentinel #启动群集
[[email protected] ~]# netstat -anpt | grep 26379

4、模拟故障,关闭master服务

[[email protected] ~]# systemctl stop redis #master服务器上关闭redis
[[email protected] ~]# redis-cli -h 192.168.100.71 -p 26379 info Sentinel #查看集群信息

5、添加测试数据

[[email protected] ~]# redis-cli -h 192.168.100.72 -p 6379

192.168.100.72:6379> set product nice
OK
192.168.100.72:6379> get product
"nice"

6、重启相关服务

[[email protected] ~]# systemctl stop redis #关闭从服务器
[[email protected] ~]# systemctl start redis #开启从服务器
[[email protected] ~]# systemctl start redis #开启主服务器

[[email protected] ~]# redis-cli -h 192.168.100.71 -p 26379 info Sentinel #再次查看redis信息

7、查看添加数据

[[email protected] ~]# redis-cli -h 192.168.100.75 -p 6379 #master故障时添加的数据,此时查看已经显示,已经验证数据同步

192.168.100.75:6379> get product
"nice"

十一、配置mariadb主从复制

1、配置master服务器

1).修改主配置文件

[[email protected] ~]# vim /etc/my.cnf

#在[msyqld]标签下添加以下参数
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).重启服务

[[email protected] ~]# systemctl restart mariadb
[[email protected] ~]# netstat -anpt | grep 3306

3).查看服务器状态

[[email protected] ~]# mysql -u root -p -e "show master status;"

Enter password:
+------------------+----------+--------------+--------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         |
+------------------+----------+--------------+--------------------------+
| mysql_bin.000001 |      470 |              | mysql,information_schema |
+------------------+----------+--------------+--------------------------+

4).授权从服务器

[[email protected] ~]# mysql -u root -p
MariaDB [(none)]> grant replication slave on . to ‘rep‘@‘192.168.100.%‘ identified by ‘123‘;
MariaDB [(none)]> flush privileges;

2、配置backuper服务器

1).修改主配置文件

[[email protected] ~]# vim /etc/my.cnf

#在[msyqld]标签下添加以下参数
binlog-ignore-db=mysql,information_schema
character_set_server=utf8
log_bin=mysql_bin
server_id=2              #注意id要和主服务器区分
log_slave_updates=true
sync_binlog=1

2).重启服务

[[email protected] ~]# systemctl restart mariadb

3).配置主从同步

MariaDB [(none)]> change master to master_host=‘192.168.100.71‘,master_user=‘rep‘,master_password=‘123‘,master_log_file=‘mysql_bin.000001‘,master_log_pos=470
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;

3、验证主从同步

1).master服务器添加数据

[[email protected] ~]# mysql -u root -p
MariaDB [(none)]> create database school;

2).查看backuper服务

[[email protected] ~]# mysql -u root -p -e "show databases;"

原文地址:http://blog.51cto.com/11905606/2301518

时间: 2024-10-08 10:42:46

手把手带你搭建百万PV网站架构的相关文章

搭建百万PV网站架构

百万PV网站构架 1.实验概述 实验例设计采用四层模式实现,主要为前端反向代理层.Web层.数据库缓存层和数据库层.前端反向代理采用主备模式,Web层采用群集模式,数据库缓存层采用主备模式,数据库层采用主从模式. 2.百万PV网站建构实验拓补图 3.实验环境 主机名 IP地址 系统 用途 master 192.168.190.130 CentOS 7 前端反向代理主机.redis缓存主机.MySQL数据库 backup 192.168.190.128 CentOS 7 前端反向代理主机.redi

用心剖析,详解如何搭建百万PV网站架构,简单易懂!!!

简介: 本项目案例结合SVN.LNMP和MySQL三种环境,部署一个社交网站,本社交网站采用PHP语言开发,搭建SVN服务器进行版本控制和集中管理PHP程序员开发的代码,以Nginx作为前端服务器,通过fastcgi协议访问后端的PHP服务器,调用PHP页面:为保证数据安全,搭建MySQL主从复制环境存储用户重要数据:另外搭建MFS分布式文件系统来存储用户照片. 1.SVN服务器:简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的 2.MFS分布式文件系统,比NFS分布式文件系统更加

【超详细】在centos7上部署百万PV网站架构

PV(Page View,页面浏览量)即点击量,通常意义上说PV的多少是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标.pv的解释是这样的:一个访问者在24小时(0点-23点)内到底看了网站的几个页面.需要注意的是:同一个人浏览网站的同一个页面,不重复计算pv量,点击100次页只算1次. 案例概述:本案例设计采用四层模型实现,主要分为前端反向代理层,web层,数据库缓存层和数据库层.前端反向代理词采用主备模式,web层采用群集模式,数据库缓存层采用主备模式,数据层采用主从模式这里我为了节省

在CentOS7上部署百万PV网站架构

网站架构概述 网站架构是根据客户需求分析的结果,准确定位网站目标群体,设定网站的整体架构,规划.设计网站栏目及其内容,制定网站开发流程的顺序,最大限度地进行高效资源分配与管理的设计. 百万PV网站架构 案例设计 采用四层模式实现,主要分为前端反向代理层.Web层.数据库缓存层和数据库层.前端反向代理层层采用主备模式,Web层采用群集模式,数据库缓存层采用主备模式,数据库层采用主从模式. 为了更接近生产环境,采用两台实体机部署此次环境,将前端反向代理层.数据库缓存层.数据库层部署在实体机上,只将W

超详解百万PV网站架构案例部署(内附安装包)

网站架构概述 网站架构是根据客户需求分析的结果,准确定位网站目标群体,设定网站的整体架构,规划.设计网站栏目及其内容,制定网站开发流程的顺序,最大限度地进行高效资源分配与管理的设计. 网站架构分很多种,一般我们平常所说的是软件方面的架构,例如: 前端使用了什么代理服务器? web服务器用的是什么? 中间又使用了什么缓存服务器? 数据库服务器用的是什么? 代码又是基于什么框架开发的? 这个网站架构每天访问量有多少(通常所说的PV)?并发数为多少? PV(page view 页面浏览量)即点击量,通

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

一.案例概述 本案例采用四层模式实现,主要分为前端反向代理.web层.数据库缓存层和数据库层. 前端反向代理采用主备模式 web层采用群集模式 数据库缓存层采用主备模式 数据库层采用主从模式 由于实验条件限制,本次实验共打开四台虚拟机,此处实验将前端代理层.数据库缓存层.数据库层服务搭建在前两台虚拟服务器上,web层采用群集模式,用于单独放置两台虚拟机.故本次实验实际模型为了模拟实际环境,服务搭建按照如下拓扑搭建. 二.实验环境 主机名 操作系统 IP地址 用途 server1 centosx8

从100PV到1亿级PV网站架构演变

如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 一个网站就像一个人,存在一个从小到大的过程.养一个网站和养一个人一样,不同时期需要不同的方法,不同的方法下有共同的原则.本文结合我自已14年网站人的经历记录一些架构演变中的体会. 1:积累是必不可少的 架构师不是一天练成的. 1999年,我作了一个个人主页,在学校内的虚拟空间,参加了一次主页大赛,几个DREAMWEAVER的页面,几个TABLE作布局,一个DB连接,几行PHP的代码嵌入在HT

从100PV到1亿级PV网站架构演变(转)

http://www.linuxde.net/2013/05/13581.html 一个网站就像一个人,存在一个从小到大的过程.养一个网站和养一个人一样,不同时期需要不同的方法,不同的方法下有共同的原则.本文结合我自已14年网站人的经历记录一些架构演变中的体会. 积累是必不可少的 架构师不是一天练成的. 1999年,我作了一个个人主页,在学校内的虚拟空间,参加了一次主页大赛,几个DREAMWEAVER的页面,几个TABLE作布局,一个DB连接,几行PHP的代码嵌入在HTML中,再用ftp传到服务

手把手带你搭建开发环境

俗话说得好,工欲善其事,必先利其器,开着记事本就想去开发 Android 程序显然不是明智之举,选择一个好的 IDE可以极大幅度地提高你的开发效率,因此本节我就将手把手带着你把开发环境搭建起来. 需要java环境jdk    jdk环境搭建教程 需要的软件 1.Android SDK Android SDK 是谷歌提供的 Android 开发工具包,在开发 Android 程序时,我们需要通过引入该工具包,来使用 Android 相关的 API 2. Eclipse     相信所有 Java