大型网站架构

实验目的

  • 理解百万pv的概念
  • 实验百万pv网站架构

网站架构概述

网站架构一般认为是根据客户需求分析的结果,准却定位网站目标群体,设定网站的整体架构,规划、设计网站栏目及其内容,指定网站开发的流程的顺序,最大限度进行高效资源分配与管理设计

PV

PV(Page View,页面浏览量)即点击量。
对PV的解释是一个访问者在24小时内浏览了多少个页面,同一个访问者重复浏览同哟个页面不重复计PV量

百万PV网站架构实例

实施步骤

(1)前端nginx作为调度,做双机热备

[root@localhost ~]# yum install keepalived -y
[root@localhost ~]# vim /etc/keepalived/keepalived.conf cd
  router_id LVS_A        #//从改为LVS_B
   state MASTER          #//从改为BACKUP  
    interface ens33      #//改为本机网卡名称
    priority 100         #//主为100从就要小于100
   virtual_ipaddress {
        192.168.175.188  #//主和从共同协商出来的IVP
    }
[root@localhost ~]# systemctl start keepalived.service    #//启动keepalived
[root@localhost ~]# ip addr #//查看虚拟ip240.188有没有生效主删改你有这么一段
    inet 192.168.175.188/32 scope global ens33
#从没有那就表明keepalived开启成功

(2)安装nginx代理服务器

[root@localhost nginx-1.12.0]# yum install gcc gcc-c++ zlib-devel pcre-devel -y #//安装编译工具
[root@localhost nginx-1.12.0]# useradd -M -s /sbin/nologin nginx #//创建用户
[root@localhost nginx-1.12.0]#  ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module 
[root@localhost nginx-1.12.0]# make && make install #//让系统能够识别

配置nginx前端调度功能

[root@localhost nginx-1.12.0]# vi /etc/nginx/nginx.conf //在include 上面一行新增
 upstream tomcat_pool {
                server 192.168.240.132:8080;
                server 192.168.240.130:8080;
                ip_hash;           #会话稳固功能,否则无法通过vip地址登陆
        }
        server {
                listen 80;
                server_name 192.168.240.188; #虚拟出的IP  
                location / {
                        proxy_pass http://tomcat_pool;
                        proxy_set_header X-Real-IP $remote_addr;
                }
    }

-----------以上主从都要做--------------------
在keepalived服务开启状态下,关闭nginx做测试,发现每隔2秒nginx又会自动启用
测试主从漂移地址切换。

(3)安装tomcat

Centos 7.4----OK

---------两台都要做---------

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

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

java -version
java version "1.8.0_144"
……
……

cp -r apache-tomcat-8.5.23 /usr/local/tomcat8

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.240.188:8080/
大型网站架构效果展示_第1张图片
http://192.168.175.131:8080/
大型网站架构效果展示_第2张图片

vi /usr/local/tomcat8/webapps/ROOT/index.jsp //修改默认网页内容

Server 129!!

http://192.168.175.188/ 输入调度器地址,也就是虚拟地址,测试两台节点的调度情况。 cd /usr/local/tomcat8/conf/ vi server.xml //跳到行尾,在Host name下新增 148 日志调试信息debug为0表示信息越少,docBase指定访问目录

(4)做MySQL主从

----使用7.4光盘自带仓库--在主从服务器做------

yum install -y mariadb-server mariadb

systemctl start mariadb.service
systemctl enable mariadb.service

netstat -anpt | grep 3306

mysql_secure_installation    //常规安全设置

mysql -uroot -p
----------导入数据库-----------

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

GRANT all ON slsaledb.* TO 'root'@'%' IDENTIFIED BY 'abc123';  
flush privileges; 
----------------以下在两台tomcat节点做----------------

tar xf SLSaleSystem.tar.gz -C /usr/local/tomcat8/webapps/
cd /usr/local/tomcat8/webapps/SLSaleSystem/WEB-INF/classes

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

-----------网站测试----------

//默认的用户名admin 密码:123456

http://192.168.240.132:8080/
大型网站架构效果展示_第3张图片
http://192.168.240.130:8080/
大型网站架构效果展示_第4张图片
//输入虚拟地址测试登录,并且关闭主再测试登录
http://192.168.240.188
大型网站架构效果展示_第5张图片

---------解决虚拟地址不能访问的问题------

cd /usr/local/tomcat8/webapps/SLSaleSystem/WEB-INF
vi web.xml 
index.jsp //使用相对路径

cp pages/index.jsp /usr/local/tomcat8/webapps/SLSaleSystem/

http://192.168.175.188/index.jsp  //输入虚拟地址测试,并且关闭主再测试

(5)----------在主服务器和从服务器上做-----

(1)使用centos7.4 默认源安装

yum install -y epel-release

yum install redis -y

cat /etc/redis.conf | grep -v "^#" | grep -v "^$"

vi /etc/redis.conf

bind 0.0.0.0

systemctl start redis.service
netstat -anpt | grep 6379

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

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

192.168.175.128:6379> get name //获取name值
 ------------从服务器上多如下一行配置------
 266 slaveof 192.168.240.128  6379 //主服务器的IP不是虚拟IP

redis-cli -h 192.168.240.129 -p 6379 //登录从,获取值,成功说明主从同步成功
192.168.175.130:6379> get name
"test"
-------------配置商城项目中连接redis的参数---

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

38         

  47                 
  48                 
------------以下测试缓存效果-----
redis-cli -h 192.168.240.188 -p 6379

192.168.175.188:6379> info

keyspace_hits:1  或者 keyspace_misses:2//关注这个值,命中数和未命中数

登录商城,然后反复点击需要数据库参与的操作页面,再回来检查keyspace_hits或者keyspace_misses: 值变化。
---------以下配置redis集群主从切换---只在主服务器是操作--------

redis-cli -h  192.168.240.128 info Replication //获取当前服务器的角色

vi /etc/redis-sentinel.conf

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

service redis-sentinel start //启动集群
netstat -anpt | grep 26379

redis-cli -h 192.168.175.128 -p 26379 info Sentinel //查看集群信息
-----------验证主从切换----
在主上

 service redis stop

redis-cli -h 192.168.240.128 -p 26379 info Sentinel //发现主变成了130

------验证数据同步情况---
redis-cli -h 192.168.240.129 -p 6379 

192.168.175.130:6379> set name2 test2
OK
192.168.175.130:6379> get name2
"test2"

service redis start //把主启动

redis-cli -h 192.168.240.128 -p 6379
192.168.240.128:6379> get name2
"test2"