CentOS 7 部署百萬pv項目(高可用架構)

PV簡介

PV(Page View,頁面瀏覽量)即點擊量,通常意義上說PV的多少是衡量一個網絡新聞頻道或網站甚至一條網絡新聞的主要指標。pv的解釋是這樣的:一個訪問者在24小時(0點-23點)內到底看了網站的幾個頁面。需要注意的是:同一個人瀏覽網站的同一個頁面,不重複計算pv量,點擊100次頁只算1次。

百萬pv網站架構

本次實驗設計採用四層模式實現,主要分爲前端反向代理層、web層、數據庫緩存層和數據庫層。前端反向代理層採用主備模式,web層採用集羣模式,數據庫緩存層採用主備模式,數據庫層採用主從模式。

CentOS 7 部署百萬pv項目(高可用架構)

部署環境

主機名 ip地址 角色
master 192.168.0.106 nginx+keepalived主、redis主、mysql數據主庫
backup 192.168.0.115 nginx+keepalived備、redis備、mysql數據從庫
web1 192.168.0.104 後端tomcat服務
web2 192.168.0.105 後端tomcat服務
VIP 192.168.0.188 虛擬IP地址

所有軟件包點擊下載

安裝服務

在主、從服務器(master, backup)都安裝

一、安裝keepalived+nginx

1.關閉防火牆、增強性

systemctl stop firewalld.service
setenforce 0

2.安裝帶有nginx rpm軟件包的源

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

3.安裝keepalived+nginx

yum install -y keepalived nginx

二、安裝mysql

1.檢查系統中是否已安裝 MySQL

rpm -qa | grep mysql

2.查看已安裝的 Mariadb 數據庫版本

rpm -qa|grep -i mariadb

3.卸載已安裝的 Mariadb 數據庫。

rpm -qa|grep mariadb|xargs rpm -e --nodeps

4.下載安裝包文件。

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

5.安裝mysql-community-release-el7-5.noarch.rpm包

rpm -ivh mysql-community-release-el7-5.noarch.rpm

6.安裝mysql。

yum install mysql-server -y

三、安裝redis

yum install -y epel-release #更新epel源
yum install redis -y #安裝redis

在節點服務器(web1,web2)都安裝

四、安裝tomcat

1.安裝java環境

systemctl stop firewalld.service #關閉防火牆
setenforce 0
tar xf jdk-8u101-linux-x64.tar.gz -C /usr/local
cd /usr/local/
mv jdk1.8.0_101 java

2.設置環境變量

sed -i '$aJAVA_HOME=/usr/local/java\nCLASSPATH=$JAVA_HOME/lib\nPATH=$PATH:$JAVA_HOME/bin\nexport PATH JAVA_HOME CLASSPATH' /etc/profile
source /etc/profile
java -version

3.安裝tomcat

tar xvf apache-tomcat-8.5.43.tar.gz -C /usr/local #解壓
cd /usr/local
mv apache-tomcat-8.5.43 tomcat #重命名
chmod +x tomcat/bin/* #給腳本授權
ln -s /usr/local/tomcat/bin/startup.sh /usr/bin/tomcatup #建立軟連接
ln -s /usr/local/tomcat/bin/shutdown.sh /usr/bin/tomcatdown

更改配置和驗證

一、keepalived+nginx改配置

1.更改keepalived配置

vim /etc/keepalived/keepalived.conf #修改三個參數

! Configuration File for keepalived

global_defs {
    route_id NGINX_HA   #備機要改 NGINX_HB
}

vrrp_script nginx {   #nginx監控腳本,後面會創建
    script "/opt/shell/nginx.sh"   
    interval 2
}

vrrp_instance VI_1 {
    state MASTER    #備機改爲BACKUP
    interface ens33
    virtual_router_id 53   #2臺必須一樣
    priority 100   #優先級,備機要比這個小,如90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
}

track_script {
    nginx
}

virtual_ipaddress {
    192.168.0.188   #虛擬ip地址
    }
}

2.更改nginx配置

vim /etc/nginx/nginx.conf

 user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
upstream tomcatpool {
                                server 192.168.0.105:8080;  #節點服務器1的ip地址,端口號
                                server 192.168.0.104:8080; #節點服務器2的ip地址,端口號
                                ip_hash;   #會話穩固功能,否則無法通過vip地址登陸
                }
                server {
                                listen 80;
                                server_name 192.168.0.188;  #虛擬ip地址
                                location / {
                                                proxy_pass http://tomcatpool;
                                                proxy_set_header X-Real-IP $remote_addr;
                                }
    }
    include /etc/nginx/conf.d/*.conf;
}

3.創建nginx啓動腳本

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 #腳本授權
備註:2.臺nginx服務配置,nginx腳本都一樣!

驗證keepalived+nginx功能

1.查看主備各自的ip消息

CentOS 7 部署百萬pv項目(高可用架構)
CentOS 7 部署百萬pv項目(高可用架構)

2.停止主機keeepalived

CentOS 7 部署百萬pv項目(高可用架構)

CentOS 7 部署百萬pv項目(高可用架構)

排坑過程

坑一:

配置都沒有報錯,vip也實現漂移了,但網頁打開就是報錯,查看nginx日誌,也看到不到啥問題

CentOS 7 部署百萬pv項目(高可用架構)

解決辦法:仔細看圖信息,給出了提示,某個命名錯誤

CentOS 7 部署百萬pv項目(高可用架構)

修改Nginx配置文件,把tomcat_pool改爲tomcatpool,記得2臺都要去修改,重啓nginx服務

CentOS 7 部署百萬pv項目(高可用架構)

錯誤原因分析:這是由於新版本的Nginx在命名時不支持 _ 這種符號了,儘量避免使用

坑二:

配置完成後,2臺都沒有出現VIP(虛擬ip)

解決辦法:仔細查看所有配置文件,確定都沒有問題後,應該就是防火牆問題了,2臺服務器的防火牆必須都要關閉或做防火牆策略,否則不會出現VIP

坑三:配置完成後,2臺都出現VIP(虛擬ip)

原因分析:

1.keepalived配置文件不對,2臺state必須一主一備,不能都爲master
2.2臺virtual_router_id必須相同
3.以上2點需要都滿足才行

解決辦法:對照原因,修改配置文件

CentOS 7 部署百萬pv項目(高可用架構)

坑四:

配置沒有報錯,也看到vip漂移了,在後面使用web服務連接數據庫,使用vip地址連接,不能登錄網站,只能看到網頁。但是,使用數據庫真實ip地址就可以登錄網頁。

原因分析:還是keepliaved配置文件出問題了

解決辦法:對照上面的配置文件,仔細對比修改,才能解決問題。一定是配置文件裏細節部分出現問題了!

數據庫主從同步

1.在主數據庫上改配置

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

2.數據庫授權

systemctl start mysqld #啓動服務
mysql < slsaledb-2014-4-10.sql #導入商城數據
mysql
show databases; #查看數據是否導入
GRANT all ON slsaledb.* TO 'root'@'%' IDENTIFIED BY '123456'; #slsaledb數據庫授權
grant replication slave on *.* to 'rep'@'192.168.0.%' identified by '123456'; #從庫授權
flush privileges;
show master status;

CentOS 7 部署百萬pv項目(高可用架構)

3.在從數據庫上改配置

vim /etc/my.cnf
在[mysqld]下加入

server_id=2
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index

4.從數據庫同步設置

systemctl start mysqld #啓動服務
mysql < slsaledb-2014-4-10.sql #導入商城數據
mysql
show databases; #查看數據是否導入
GRANT all ON slsaledb.* TO 'root'@'%' IDENTIFIED BY '123456'; #slsaledb數據庫授權
mysql
change master to master_host='192.168.0.106',master_user='rep',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=406;
start slave;
show slave status \G

CentOS 7 部署百萬pv項目(高可用架構)

商城項目部署

1.解壓項目軟件包

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

2.修改tomcat配置

vim /usr/local/tomcat/conf/server.xml
在Host name下新增 在149行

#作用是讓用戶訪問時不使用項目名可以直接訪問
<Context path="" docBase="SLSaleSystem" reloadable="true" debug="0"></Context>

3.修改數據鏈接

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

driverClassName=com.mysql.jdbc.Driver
#填寫虛擬ip地址
url=jdbc\:mysql\://192.168.0.188\:3306/slsaledb?useUnicode\=true&characterEncoding\=UTF-8
#填寫授權時的用戶名密碼
uname=root
password=123456
minIdle=10
maxIdle=50
initialSize=5
maxActive=100
maxWait=100
removeAbandonedTimeout=180
removeAbandoned=true

4.啓動tomcat服務

tomcatup
netstat -ntap |grep 8080

備註:2臺節點服務器操作一樣

5.網站驗證

1.先訪問2臺節點服務器網址
http://192.168.0.104:8080
http://192.168.0.105:8080

CentOS 7 部署百萬pv項目(高可用架構)

CentOS 7 部署百萬pv項目(高可用架構)
CentOS 7 部署百萬pv項目(高可用架構)
CentOS 7 部署百萬pv項目(高可用架構)

2.在訪問虛擬IP地址
http://192.168.0.188

CentOS 7 部署百萬pv項目(高可用架構)
CentOS 7 部署百萬pv項目(高可用架構)

Redis主從和羣集配置

在主機上:

vim /etc/redis.conf
在61行修改爲

bind 0.0.0.0

systemctl start redis.service #啓動服務
netstat -anpt | grep 6379
redis-cli -h 192.168.0.106 -p 6379 #測試連接
192.168.0.106:6379> set name test
OK
192.168.0.106:6379> get name
"test"
192.168.0.106:6379> exit

在備機上:

vi /etc/redis.conf

 bind 0.0.0.0  #61行
 slaveof 192.168.0.106  6379  #266行,主服務器的IP

systemctl start redis.service #啓動服務
redis-cli -h 192.168.0.115 -p 6379 #查看
192.168.0.115:6379> get name
"test" #同步成功
192.168.0.115:6379> exit

redis在節點服務器上配置

配置商城項目中連接redis的參數
vi /usr/local/tomcat/webapps/SLSaleSystem/WEB-INF/classes/applicationContext-mybatis.xml

#填寫虛擬IP地址,47行
<constructor-arg value="192.168.0.188"/>
 <constructor-arg value="6379"/>

CentOS 7 部署百萬pv項目(高可用架構)

tomcatdown
tomcatup

redis 緩存測試

redis-cli -h 192.168.0.188 -p 6379
192.168.0.188:6379> info

CentOS 7 部署百萬pv項目(高可用架構)
CentOS 7 部署百萬pv項目(高可用架構)

配置redis集羣及主從切換

只在主服務器是操作
redis-cli -h 192.168.0.106 info Replication #獲取當前服務器的角色

CentOS 7 部署百萬pv項目(高可用架構)

vim /etc/redis-sentinel.conf

protected-mode no  #17 行
sentinel monitor mymaster 192.168.200.128 6379 1 #69行,1表示1臺備機
sentinel down-after-milliseconds mymaster 3000 #98行,故障切換時間單位是毫秒

service redis-sentinel start #啓動集羣
netstat -anpt | grep 26379

CentOS 7 部署百萬pv項目(高可用架構)

redis-cli -h 192.168.0.106 -p 26379 info Sentinel #查看集羣信息

CentOS 7 部署百萬pv項目(高可用架構)

驗證主從切換

在主服務器上(master)
systemctl stop redis.service
redis-cli -h 192.168.0.106 -p 26379 info Sentinel #查看集羣信息

CentOS 7 部署百萬pv項目(高可用架構)

檢驗高可用架構

關掉所有主服務器(master)和一臺tomcat服務(we1)
查看網頁: http://192.168.0.188

CentOS 7 部署百萬pv項目(高可用架構)

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