大型网站架构之百万pv网站架构

大型网站架构之百万pv网站架构

名词解释:pv是什么?

PV(Page View,页面浏览量)即点击量,通常意义上说PV的多少是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。pv的解释是这样的:一个访问者在24小时(0点-23点)内到底看了网站的几个页面。需要注意的是:同一个人浏览网站的同一个页面,不重复计算pv量,点击100次页只算1次。

查询网站的pv量可以通过访问→网站pv查询

百万pv网站架构

  • 实验简述

本次实验设计采用四层模式实现,主要分为前端反向代理层、web层、数据库缓存层和数据库层。前端反向代理层采用主备模式,web层采用集群模式,数据库缓存层采用主备模式,数据库层采用主从模式。

这里小编为了节约资源,减少资源占用,采用如下模式:将前端反向代理层、数据库缓存层、数据库层部署在两台虚拟机上(一主一备),将web层分别部署在两台虚拟机上(一主一备)。

实验拓扑图如下

大型网站架构之百万pv网站架构

  • 实验环境
主机名 IP地址 主要用途
CentOS7-1(master) 172.16.10.138 nginx反向代理(主)、redis缓存处理器(主)、mysql数据库(主)
CentOS7-2(backup) 172.16.10.147 nginx反向代理(备)、redis缓存处理器(备)、mysql数据库(从)
CentOS7-3(tomcat1) 172.16.10.133 tomcat(主)
CentOS7-4(tomcat2) 172.16.10.136 tomcat(备)

安装部署nginx、keepalived服务(主从服务器都要安装)

  • 关闭防火墙及SELinux

systemctl stop firewalld.service
setenforce 0

  • 安装带有nginx的rpm软件包的源

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

  • 使用yum仓库安装nginx、keepalived服务

yum install -y keepalived nginx

  • 修改keepalived配置文件

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
    route_id NGINX_HA         #route_id主从修改为不同名称
}

vrrp_script nginx {                    #定义函数库脚本
    script "/opt/shell/nginx.sh"      #添加创建脚本
    interval 2                                #每2s自动执行上面的脚本
}

vrrp_instance VI_1 {
    state MASTER                  #角色为master,从服务器为backup
    interface ens33                  #网卡接口为ens33
    virtual_router_id 51
    priority 100                  #优先级,从服务器低于主服务器
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
}

track_script {                 #调用上面的函数脚本
    nginx
}

virtual_ipaddress {
    172.16.10.188              #定义VIP(虚拟IP)
    }
}

#删除下面多余的配置文件

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

  • 修改nginx配置文件

vim /etc/nginx/nginx.sh

#在include 上面一行新增
upstream tomcat_pool {
                server 172.16.10.133:8080;
                server 172.16.10.136:8080;                #两台tomcat服务器的IP地址
                ip_hash;           #会话稳固功能,否则无法通过vip地址登陆
        }
        server {
                listen 80;
                server_name 172.16.10.188; #虚拟出的IP  
                location / {
                        proxy_pass http://tomcat_pool;
                        proxy_set_header X-Real-IP $remote_addr;
                }
    }

nginx -t -c /etc/nginx/nginx.conf #测试配置文件语法

  • 开启keepalived服务

systemctl start keepalived.service #nginx启动会等待一会

大型网站架构之百万pv网站架构

大型网站架构之百万pv网站架构

在keepalived服务开启状态下,关闭nginx做测试,发现每隔2秒nginx又会自动启用

部署tomcat服务(两台web服务器都要安装部署)

这里因为tomcat是基于java编写的,所以要搭建java环境

  • 解压安装tomcat

tar xf apache-tomcat-8.5.23.tar.gz -C /opt
tar xf jdk-8u144-linux-x64.tar.gz -C /opt

  • 复制jdk的环境包至/usr/local目录下,并重命名为java

cp -rv jdk1.8.0_144/ /usr/local/java

  • 添加环境变量

vim /etc/profile

G到行尾,添加
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 #刷新使环境变量生效

  • 检查java环境是否安装成功

这里可以使用java -version检查java环境是否安装成功

大型网站架构之百万pv网站架构

  • apached的优化与软链接的创建

cp -r apache-tomcat-8.5.23 /usr/local/tomcat8 #复制apached软件至系统目录下

ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup #创建开启tomcat命令的软链接
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown #创建关闭tomcat命令的软链接

  • 开启tomcat服务

tomcatup
netstat -anpt | grep 8080

大型网站架构之百万pv网站架构

大型网站架构之百万pv网站架构

  • 修改tomcat首页站点内容,测试

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

<h1>this is server 133!!!</h1>          #web服务器1 的tomcat首页内容
<h1>this is server 136!!!</h1>          #web服务器2 的tomcat首页内容

大型网站架构之百万pv网站架构

大型网站架构之百万pv网站架构

大型网站架构之百万pv网站架构

  • 修改server.xml配置文件

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

#跳到行尾,在Host name下新增 148行

<Context path="" docBase="SLSaleSystem" reloadable="true" debug="0"></Context>
日志调试信息debug为0表示信息越少,docBase指定访问目录

mysql数据库的安装部署(主从服务器都要部署)

  • 使用yum仓库安装mariadb数据库
    这里解释下,mariadb和mysql功能相同,但是安装更轻便,所以这里使用mariadb代替MySQL数据库

yum install -y mariadb-server mariadb

  • 开启mariadb服务,并且加入开启自启动

systemctl start mariadb.service
systemctl enable mariadb.service

大型网站架构之百万pv网站架构

大型网站架构之百万pv网站架构

  • mariadb的常规安全设置

大型网站架构之百万pv网站架构

  • 导入会员商城数据库至mariadb数据库

mysql -u root -p < slsaledb-2014-4-10.sql #导入会员商城数据库
Enter password: #输入密码:abc123

  • 登录mysql数据库查看,授权

大型网站架构之百万pv网站架构

  • 在web服务器上解压会员商城的软件包至tomcat首页站点目录下,并修改配置文件

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

vim /usr/local/tomcat8/webapps/SLSaleSystem/WEB-INF/classes/jdbc.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc\:mysql\://172.16.10.188\:3306/slsaledb?useUnicode\=true&characterEncoding\=UTF-8     #修改地址为VIP(虚拟IP)
uname=root                 #mysql链接的用户
password=abc123      #MySQL链接用户的密码
minIdle=10
maxIdle=50
initialSize=5
maxActive=100
maxWait=100
removeAbandonedTimeout=180
removeAbandoned=true
  • 重启tomcat服务,然后登录网页测试查看会员商城的登陆页面

大型网站架构之百万pv网站架构

大型网站架构之百万pv网站架构

大型网站架构之百万pv网站架构

##安装部署redis数据库缓存服务(主从服务器都要安装)

  • 使用yum仓库安装redis服务

yum -y install redis

  • 修改redis配置文件

vim /etc/redis.conf

查找bind,命令在命令模式下:/bind

bind 0.0.0.0        #原来的127.0.0.1修改为0.0.0.0   监听所有地址

#从服务器要多修改一条
266行,添加
slaveof 172.16.10.138 6379
  • 开启redis服务,进行主从同步测试

systemctl start redis.service

redis-cli -h 172.16.10.138 -p 6379            #登录主redis服务
set name test      #设置name的值为test
getname           #获取name值

redis-cli -h 172.16.10.147 -p 6379      #登录从redis服务
get name      #获取name值

大型网站架构之百万pv网站架构

大型网站架构之百万pv网站架构

  • 配置商城项目中连接redis的参数(在web服务器上配置(主从都要配置))

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

38         <!--redis 配置 开始-->

47                 <constructor-arg value="172.16.10.188"/>        #修改为VIP(虚拟IP)
48                 <constructor-arg value="6379"/>
  • 测试缓存效果

redis-cli -h 172.16.10.188 -p 6379 #虚拟IP登录redis
172.16.10.188:6379> info

大型网站架构之百万pv网站架构

登录会员商城,刷新数据库参与的页面

大型网站架构之百万pv网站架构

大型网站架构之百万pv网站架构

  • redis主备测试(只在主redis服务器配置)

vim /etc/redis-sentinel.conf

17行 protected-mode no
68行 sentinel monitor mymaster 172.16.10.138 6379 1 //1表示1台从 注意:修改
98行 sentinel down-after-milliseconds mymaster 3000 //故障切换时间单位是毫秒

systemctl start redis-sentinel.service #开启集群服务

redis-cli -h 172.16.10.138 -p 26379 info Sentinel #查看集群信息

大型网站架构之百万pv网站架构

关闭主redis服务,再次查看集群信息

systemctl stop redis.service #关闭主redis服务

大型网站架构之百万pv网站架构

mysql主从同步部署

  • 修改配置文件(主服务器修改配置)

vim /etc/my.cnf

在[mysqld]下添加
binlog-ignore-db=mysql,information_schema
character_set_server=utf8
log_bin=mysql_bin
server_id=1                   #从服务器修改为2,主从不一样
log_slave_updates=true
sync_binlog=1

重启服务 : systemctl restart mariadb.service

  • 查看主服务器的日志记录文件和偏移量
mysql -u root -p
输入密码:abc123
show master status; //记录日志文件名称和 位置值
grant replication slave on *.* to 'rep'@'172.16.10.%' identified by '123456';      #授予权限
flush privileges;     #刷新生效
  • 从服务器配置

vim /etc/my.cnf

在[mysqld]下添加
binlog-ignore-db=mysql,information_schema
character_set_server=utf8
log_bin=mysql_bin
server_id=2                   #从服务器修改为2,主从不一样
log_slave_updates=true
sync_binlog=1

重启服务 : systemctl restart mariadb.service

  • 设置日志记录文件及偏移量,开启同步
mysql -u root -p
输入密码:abc123

change master to master_host='172.16.10.138',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: Yes     #需确定这两项为yes

大型网站架构之百万pv网站架构

实验验证

在主mysql上创建一个数据库,从服务器会自动获取

大型网站架构之百万pv网站架构

大型网站架构之百万pv网站架构

关闭主服务器使用VIP登录tomcat首页

systemctl stop keepalived.service

大型网站架构之百万pv网站架构

至此百万pv网站架构成功!!!希望各位看官多多点评,不点评点个赞也行哦!!(ps:看在小编这么认真码字的态度上,点个赞再走哦!!!)

猜你喜欢

转载自blog.51cto.com/13659301/2155580