百萬PV網站大體架構

大體簡介

PV(page view)即頁面瀏覽量,或點擊量,通常是衡量一個網絡網站的主要指標採用四層模式實現,主要分爲前端反向代理層、Web層、數據庫緩存層和數據庫層。前端反向代理層採用主備模式,Web層採用集羣模式,數據庫緩存層採用主備模式,數據庫層採用主從模式。

百萬PV網站大體架構
軟件 版本 簡介
Keepa 1.3.5-6.el7 Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepalived自動將服務器加入到服務器羣中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的服務器。
nginx 1:1.14.0-1.el7_4.ngx Nginx 是一個很強大的高性能Web和反向代理服務器,它具有很多非常優越的特性:在連接高併發的情況下,Nginx是Apache服務器不錯的替代品
jdk 8u144-linux-x64 JDK是 Java 語言的軟件開發工具包,主要用於移動設備、嵌入式設備上的java應用程序。JDK是整個java開發的核心,它包含了JAVA的運行環境(JVM+Java系統類庫)和JAVA工具。
tomcat apache-tomcat-8.5.23 是一款免費開源的jsp服務器。tomcat6.0具有tomcat管理和控制平臺、安全域管理和tomcat閥等功能,其本身就包含了一個http服務器,也可以當作單獨的web服務器看待。該軟件有着性能穩定和監督易用性的特點,是它成爲了使用最爲廣泛的jsp服務器。
MySQLDB 1:5.5.56-2.el7 由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點
redis 3.2.10-2.el7 redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。
主機名稱 IP 安裝軟件
master 192.168.100.188內網 192.168.200.188外網 前端反向代理,redis緩存主機 MySQL數據主
backup 192.168.10015 前端反響代理備機,redis 緩存備機 MySQL從庫
tomcat-nodel 192.168.100.9 web 服務tomcat jdk
toncat-node2 192.168.100.10 web 服務tomcat jdk
  • 先實現前端的反向代理並且進行測試
    1. 搭建keepalived nginx
      Nginx反向代理和keepalived
      -------安裝帶有nginx rpm軟件包的源-----------主從都要做-----
      rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/\
      nginx-release-centos-7-0.el7.ngx.noarch.rpm
      ------使用centos 默認倉庫完成下面的安裝----
      yum install -y keepalived nginx
    2. 修改主配置文件參數
vi /etc/keepalived/keepalived.conf  //從上修改三個參數  BACKUP 從

! 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  #MASTER 爲主 BACKUP 爲從
    interface ens33  # 網卡名稱
    virtual_router_id 51   # 組號
    priority 100   # 優先級 在從上面要注意
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
}

track_script {
    nginx   #調用前面定義的腳本
}

virtual_ipaddress {  # 虛擬IP
    192.168.100.188
    192.168.200.188
    }
}
mkdir /opt/shell
vi /opt/shell/nginx.sh
#!/bin/bash
k=`ps -ef | grep keepalived | grep -v grep | wc -l` #當keepalived 服務開啓的時候會自動檢測nginx 若keepalived 開啓則開啓nginx
if [ $k -gt 0 ];then
    /bin/systemctl start nginx.service
else
/bin/systemctl stop nginx.service
fi

chmod +x /opt/shell/nginx.sh

百萬PV網站大體架構
百萬PV網站大體架構

  1. 配置nginx前端調度功能
vi /etc/nginx/nginx.conf //在include 上面一行新增

 upstream tomcat_pool {
                server 192.168.100.9:8080;  # 定義web 服務主機
                server 192.168.100.10:8080;
                ip_hash;           #hash算法會話穩固功能,否則無法通過vip地址登陸
        }
        server {
                listen 80;
                server_name 192.168.100.188; #虛擬出的IP  
                location / {
                        proxy_pass http://tomcat_pool;
                        proxy_set_header X-Real-IP $remote_addr;
                }
    }

nginx -t -c /etc/nginx/nginx.conf  //測試配置文件語法
systemctl start keepalived.service    //nginx啓動會等待一會

-----------以上主從都要做--------------------
在keepalived服務開啓狀態下,關閉nginx做測試,發現每隔2秒nginx又會自動啓用
測試主從漂移地址切換。

百萬PV網站大體架構

  • 搭tomcat jdk 在web服務器上搭建
---------兩臺都要做---------

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.100.9:8080/  //測試默認測試頁是否正常顯示
http://192.168.100.10:8080/
cd /use.local/tomcat8/webapps/ROOT/ # 到tomcat 站點目錄
mv index.jsp index.jsp.dk
vi index.jsp //修改默認網頁內容
<h1>Server 9!!</h1> 
http://192.168.100.188/  輸入調度器地址,也就是虛擬地址,測試兩臺節點的調度情況。
cd /usr/local/tomcat8/conf/
vim server.xml //跳到行尾,在Host name下新增 148 150
<Context path="" docBase="SLSaleSystem" reloadable="true" debug="0"></Context>
日誌調試信息debug爲0表示信息越少,docBase指定訪問目錄

百萬PV網站大體架構
在主服務器上搭建MySQL主

yum install -y mariadb-server mariadb  #安裝MySQL
systemctl start mariadb.service
systemctl enable mariadb.service
netstat -anpt | grep 3306
cd /usr/bin
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;   #給與權限

百萬PV網站大體架構


----------------以下在兩臺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。

------------網站測試------

http://192.168.100.9:8080/   //默認的用戶名admin 密碼:123456
http://192.168.100.10:8080/

http://192.168.175.188  //輸入虛擬地址測試登錄,並且關閉主再測試登錄

搭建redis集羣

----------在主服務器和從服務器上做-----

使用centos7.4 默認源安裝
yum install -y epel-release
yum install redis -y
vi /etc/redis.conf 
bind 0.0.0.0   #修改
systemctl start redis.service
netstat -anpt | grep 6379
redis-cli -h 192.168.175.128 -p 6379 //測試連接
192.168.100.9:6379> set name test  //設置name 值是test
192.168.100.10:6379> get name //獲取name值
從服務器上多如下一行配置------
266 slaveof 192.168.100.188  6379 //主服務器的IP不是虛擬IP
redis-cli -h 192.168.100.188 -p 6379 //登錄從,獲取值,成功說明主從同步成功
192.168.100.188: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.100.188"/> #虛擬IP
  48                 <constructor-arg value="6379"/>

------------以下測試緩存效果-----
redis-cli -h 192.168.100.188 -p 6379

192.168.100.188:6379> info

keyspace_hits:1  或者 keyspace_misses:2//關注這個值,命中數和未命中數

登錄商城,然後反覆點擊需要數據庫參與的操作頁面,再回來檢查keyspace_hits或者keyspace_misses: 值變化。

---------以下配置redis集羣主從切換---只在主服務器是操作--------

redis-cli -h  192.168.175.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.100.1 -p 26379 info Sentinel //發現主變成了1

------驗證數據同步情況---
redis-cli -h 192.168.175.130 -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.175.128 -p 6379
192.168.175.128:6379> get name2
"test2"

百萬PV網站大體架構

MySQL主從配置


--------mysql主服務器配置-------
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

systemctl restart mariadb

netstat -anpt | grep 3306

mysql -u root
show master status; //記錄日誌文件名稱和 位置值

grant replication slave on *.* to 'rep'@'192.168.175.%' identified by '123456';
flush privileges;

----------mysql從服務器配置-------
vi /etc/my.cnf //[mysqld]下

server_id=2

systemctl restart mariadb

netstat -anpt | grep 3306

mysql -u root

change master to master_host='192.168.175.128',master_user='rep',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=245;

start slave;

show slave status\G;  #檢測是否同步

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

-----------以下可以測試主上操作,從同步情況-------

百萬PV網站大體架構
百萬PV網站大體架構
百萬PV網站大體架構

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章