1. 程式人生 > >大型網站架構

大型網站架構

-m follow 商城項目 live lob prot 網卡名 獲取 webapps

大型網站架構

實驗目的

  • 理解百萬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/
技術分享圖片
http://192.168.175.131:8080/
技術分享圖片

vi /usr/local/tomcat8/webapps/ROOT/index.jsp //修改默認網頁內容

<h1>Server 129!!</h1>

http://192.168.175.188/  輸入調度器地址,也就是虛擬地址,測試兩臺節點的調度情況。

cd /usr/local/tomcat8/conf/

vi server.xml //跳到行尾,在Host name下新增 148

<Context path="" docBase="SLSaleSystem" reloadable="true" debug="0"></Context>
日誌調試信息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/
技術分享圖片
http://192.168.240.130:8080/
技術分享圖片
//輸入虛擬地址測試登錄,並且關閉主再測試登錄
http://192.168.240.188
技術分享圖片

---------解決虛擬地址不能訪問的問題------

cd /usr/local/tomcat8/webapps/SLSaleSystem/WEB-INF
vi web.xml 
<welcome-file>index.jsp</welcome-file> //使用相對路徑

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         <!--redis 配置 開始-->

  47                 <constructor-arg value="192.168.175.188"/>
  48                 <constructor-arg value="6379"/>
------------以下測試緩存效果-----
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"

大型網站架構