1. 程式人生 > >day81_淘淘商城專案_14_專案釋出 + Linux下安裝mysql + tomcat熱部署 + 反向代理的配置 + 資料庫分庫分表 + Mycat學習_匠心筆記

day81_淘淘商城專案_14_專案釋出 + Linux下安裝mysql + tomcat熱部署 + 反向代理的配置 + 資料庫分庫分表 + Mycat學習_匠心筆記

淘淘商城專案_14


第十四天:

  • 1、Linux上mysql的安裝
  • 2、系統的部署
  • 3、mycat的介紹
  • 4、專案總結
  • 5、面試中的問題

1、開發流程淺解

2、專案釋出前的準備

1、測試
  a) 本地單元測試
  b) 測試環境測試(1,2,3,4,5)
  c) 使用者測試(模擬環境:UAT環境)
2、確認伺服器的資源
  a) 硬體資源(CPU、記憶體、硬碟)
  b) 軟體資源(Linux、Windows)
  c) 網路資源(寬頻、機房、雲伺服器)
3、相關參與的人員確認
  a) 測試人員
  b) 開發人員
4、資料庫指令碼的準備
  a) 初始化資料的sql指令碼(DBA、運維)
  b) 許可權的sql指令碼等
5、編寫釋出的文件
  a) 開發人員編寫各自負責的功能模組的釋出文件

資訊
  b) 測試的文件(測試用例)
  c) 全員參與
6、打包
  a) 專門負責的人員進行打包處理(運維)
7、準備回滾方案

3、專案部署

3.1、Linux下安裝mysql

第一步:檢視mysql是否安裝。

rpm -qa | grep mysql

第二步:如果mysql的版本不是想要的版本。需要把原來的mysql解除安裝。

yum remove mysql mysql-server mysql-libs mysql-common
rm -rf /var/lib/mysql
rm -f /etc/my.cnf

  注意:使用yum命令解除安裝,因為yum命令可以自動刪除與mysql相關的依賴;如果使用rpm命令解除安裝,則還需要手動去刪除和mysql相關的檔案。
第三步:安裝mysql。需要使用yum命令安裝。在安裝mysql之前需要安裝mysql的下載源。需要從oracle的官方網站下載。

1)下載mysql的源包:
	我們是centos6.4對應的rpm包為:mysql-community-release-el6-5.noarch.rpm
	命令:wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
2)安裝mysql下載源:
	yum localinstall mysql-community-release-el6-5.noarch.rpm
3)線上安裝社群版的mysql:
	yum install mysql-community-server
	或者線上安裝收費版本的mysql:
	yum install mysql-server
	兩種方式均可,建議安裝社群版。

  rpm包位置:

第四步:啟動mysql。

service mysqld start

第五步:需要給root使用者設定密碼。

/usr/bin/mysqladmin -u root password 'new-password'  #為root賬號設定密碼

第六步:登入mysql。

[[email protected] temp]# mysql -uroot -pitcast

第七步:需要先登入到mysql,遠端連線授權。

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

注意:'myuser''mypassword' 需要替換成實際的使用者名稱和密碼。
mysql安裝好了之後,啟動服務,建立連線,匯入taotao資料庫檔案。
詳細連結文章:https://www.cnblogs.com/chenmingjun/p/10192987.html

3.2、專案架構講解

3.3、系統功能介紹

3.4、網路拓撲圖

3.5、系統部署

3.5.1、部署分析

工程共13個,如下所示,本著高可用的原則,每個工程至少有兩臺伺服器。13個工程至少需要26臺伺服器。

taotao-manager			8080
taotao-manager-web		8081

taotao-portal-web		8082
taotao-content			8083

taotao-search			8084
taotao-search-web		8085

taotao-item-web			8086

taotao-sso				8087
taotao-sso-web			8088

taotao-cart				8089
taotao-cart-web			8090

taotao-order			8091
taotao-order-web		8092

  即淘淘商城在真實環境中要部署的話需要26臺伺服器。

服務 伺服器個數
Mysql(主備) 2
Solr(叢集3+4兩片) 7
Redis(叢集3個節點) 6
圖片伺服器(T/S) 2
Nginx(主備) 2
zookeeper註冊中心(叢集) 3
Activemq(叢集) 2

  總共需要26+24=50臺伺服器。但我們都知道,一般的小公司是絕不可能弄這麼多伺服器的,太昂貴了,比較可行的是採用偽分散式

3.5.2、伺服器規劃

如下圖所示,搭建服務原來需要24臺伺服器,現在只需要7臺即可。

搭建工程規劃使用5臺伺服器便可,如下圖所示:

  這樣規劃的話,我們只需要7+5=12臺伺服器即可。
  當然了,12臺伺服器在一般的公司來說,也是達不到的,那麼我們便可以進一步壓縮:
  把更多的服務合併到一臺伺服器上,我們將所有服務精簡成一臺伺服器192.168.25.133記憶體至少給2G以上。下圖是所有服務埠的規劃表:

  把更多的工程合併到一臺伺服器上。我們將所有工程精簡成一臺伺服器192.168.25.133記憶體至少給2G以上。下圖是所有工程埠的規劃表:

3.5.3、工程規劃

工程規劃表:

tomcat埠更新對映表:

3.5.4、域名規劃

域名規劃表:

3.5.5、tomcat熱部署

  可以使用maven的tomcat外掛實現tomcat熱部署。即在tomcat啟動時部署工程
  tomcat有個後臺管理功能,可以實現工程熱部署。部署完成後,我們不需要啟動tomcat了,tomcat會自動把war包解壓到ROOT目錄下。tomcat後臺管理功能有兩種方式可以訪問,第一種是通過圖形化介面的方式,第二種是通過命令列的方式,這兩種方式需要配置相應的許可權。
  第一種方式需要將工程打成war包,再手動上傳,稍微有一些麻煩,第二種方式相對簡單些。我們下面演示的是第二種方式。


這裡僅以taotao-content及taotao-portal-web為例子演示:
  演示使用的Linux的ip地址為:192.168.25.133
  在Linux下,我們新建有13個tomcat放置13工程:

  先啟動服務:啟動zookeeper,啟動redis,啟動solr,啟動activemq,啟動mysql。
部署方法:
  先部署服務層工程,再部署表現層工程。


a) 部署taotao-content
linux系統上的配置:
第一步:需要修改linux系統中對應的tomcat9002的conf/tomcat-users.xml配置檔案。新增使用者名稱、密碼、許可權。

<role rolename="manager-gui" />
<role rolename="manager-script" />
<user username="tomcat" password="tomcat" roles="manager-gui, manager-script"/>

  我們要將war包放在對應的tomcat9002中的webapps目錄下的ROOT目錄下,所以我們先在webapps目錄下建立ROOT目錄:

[[email protected] webapps]# mkdir ROOT

第二步:重新啟動對應的tomcat9002。

[[email protected] ~]# pwd
/usr/local/taotao-projects/tomcat9002/bin
[[email protected] bin]# ./startup.sh

第三步:檢視tomcat9002的啟動日誌。

[[email protected] tomcat9002]# tail -f logs/catalina.out

開發機器上(windows系統)的配置:
第一步:修改配置檔案。
  修改taotao-content工程中的相應的配置檔案db.properties中資料庫的ip地址、埠、例項名、使用者名稱、密碼。如下:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.165.25.133:3306/taotao?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

  修改applicationContenxt-redis.xml中的ip地址、埠。(即:將原來的localhost修改為mysql所在的伺服器的IP地址。)
  修改taotao-content工程中的釋出服務的配置檔案applicationContenxt-service.xml中註冊中心的地址,改成linux系統中的zookeeper的地址192.168.25.167以及暴露服務的埠。
第二步:配置maven的tomcat外掛,需要修改taotao-content工程的pom.xml檔案。

    <build>
		<plugins>
			<!-- 配置Tomcat外掛 -->
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<configuration>
					<port>8083</port>
					<path>/</path>
					<url>http://192.168.25.133:9002/manager/text</url>
					<username>tomcat</username>
					<password>tomcat</password>
				</configuration>		
			</plugin>
		</plugins>
	</build>

  注意:添加了三行配置,<url>裡面的tomcat熱部署地址的埠號有所變化,現在是9002。大家可能會有疑問,<url>配置上面的那個<port>8083</port>有什麼用?會不會對部署產生壞的影響。這個其實不用擔心,這個port對熱部署來說,沒有用,這裡之所以沒有把它刪掉是因為我們在Windows系統下開發的時候給這個工程規劃的埠是8083,如果需要在Windows系統下啟動該工程的話,這個port就是有用的,因此這個<port>8083</port>配置我們不必理會,擱那兒就行。
第三步:使用maven命令進行部署。
  選中taotao-content工程,右鍵 --> Run As --> Maven build…

clean tomcat7:deploy      #部署
clean tomcat7:redeploy    #重新部署

  部署的路徑是“/”會把系統部署到webapps/ROOT目錄下
  部署工程跳過測試

clean tomcat7:redeploy -DskipTests

第四步:在Linux下檢視toamcat9002的日誌

[[email protected] tomcat9002]# tail -f logs/catalina.out

日誌輸出內容如下圖所示:

  注意:每次部署完服務後,都會停在如上圖所示的位置上,需要我們重新啟動tomcat9002。暫時不知道為什麼。
第五步:重新啟動tomcat9002。
第六步:檢視dubbo監控中心。
  部署完服務層工程taotao-content後,我們到dubbo服務治理–>服務頁面,發現多了兩個服務,分別是com.taotao.content.service.ContentCategoryService和com.taotao.content.service.ContentService。說明我們的taotao-content工程部署成功。


b) 部署taotao-portal-web
  注意:首先要確保新的伺服器192.168.25.133上安裝的jdk是否與Eclipse開發時所用的jdk版本一致,我Eclipse開發時用的jdk1.7,因此伺服器上的安裝的jdk版本也要是1.7才行。不然會出現問題!!!(是個坑)
  Linux上安裝jdk過程連結:https://www.cnblogs.com/chenmingjun/p/9931593.html
linux系統上的配置:
第一步:需要修改linux系統中對應的tomcat9003的conf/tomcat-users.xml配置檔案。新增使用者名稱、密碼、許可權。

<role rolename="manager-gui" />
<role rolename="manager-script" />
<user username="tomcat" password="tomcat" roles="manager-gui, manager-script"/>

  我們要將war包放在對應的tomcat9003中的webapps目錄下的ROOT目錄下,所以我們先在webapps目錄下建立ROOT目錄:

[[email protected] webapps]# mkdir ROOT

第二步:重新啟動對應的tomcat9003。

[[email protected] ~]# pwd
/usr/local/taotao-projects/tomcat9003/bin
[[email protected] bin]# ./startup.sh

第三步:檢視tomcat9003的啟動日誌。

[[email protected] tomcat9003]# tail -f logs/catalina.out

開發機器上(windows系統)的配置:
第一步:修改配置檔案。
  修改taotao-portal-web工程中的引用服務的配置檔案springmvc.xml中註冊中心的地址,改成linux系統中的zookeeper的ip地址192.168.25.133
第二步:配置maven的tomcat外掛,需要修改taotao-portal-web工程的pom.xml檔案。

    <build>
		<plugins>
			<!-- 配置Tomcat外掛 -->
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<configuration>
					<port>8082</port>
					<path>/</path>
					<url>http://192.168.25.133:9003/manager/text</url>
					<username>tomcat</username>
					<password>tomcat</password>
				</configuration>		
			</plugin>
		</plugins>
	</build>

第三步:使用maven命令進行部署。
  選中taotao-portal-web工程,右鍵 --> Run As --> Maven build…

tomcat7:deploy      #部署
tomcat7:redeploy    #重新部署

  部署的路徑是“/”會把系統部署到webapps/ROOT目錄下。
  部署工程跳過測試

clean tomcat7:redeploy -DskipTests

第四步:在Linux下檢視toamcat9003的日誌

[[email protected] tomcat9003]# tail -f logs/catalina.out

第五步:重新啟動tomcat9003。
第六步:檢視dubbo監控中心。
  部署完服務層工程taotao-portal-web後,我們到dubbo服務治理 --> 應用頁面,發現多了兩個應用,分別是taotao-content和taotao-portal-web。說明我們的taotao-portal-web工程部署成功。

3.5.6、其他工程部署

  同上 a) 部署taotao-contentb) 部署taotao-portal-web 步驟。
  注意1:在工程部署之前需要啟動所有的服務:zookeeper、redis、solr、mysql、activemq
  注意2:每個工程執行在不同的tomcat上,需要修改tomcat的埠號。
  注意3:先部署服務層工程,再部署表現層工程。
  注意4:當部署使用到activemq的工程時,需要將原來的pom.xml檔案的activemq的依賴配置項修改為新的,如下:
原來的:

    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-all</artifactId>
    </dependency>

新的:

    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-core</artifactId>
    </dependency>

如果不修改成新的在部署的時候會報錯,但是在開發使用原來的沒有問題。(這是一個坑


部署大致步驟如下:
第一步:修改工程中的伺服器的地址都改為192.168.25.133(在所有的jsp和xml中)
第二步:修改所有localhost對應正確的域名
  例如:http://localhost:8088 --> http://sso.taotao.com
第三步:修改所有db.properties中的localhost:3306/taotao192.168.25.133:3306/taotao,以及使用者名稱和密碼。
第四步:如果在資料庫中沒有建立taotao,需要建立一個,再匯入資料。
第五步:反向代理配置如下3.6、反向代理的配置所示:
第六步:測試,需要先將本地hosts切換為如下圖所示配置:

3.6、反向代理的配置

linux系統上的配置:
Linux系統上nginx配置反向代理,反向代理配置的是表現層工程對應的埠,注意:配置upstream時不要有空格。

[[email protected] conf]# pwd
/usr/local/nginx/conf
[[email protected] conf]# vim nginx.conf

nginx.conf

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    upstream manager.taotao.com {
		server 192.168.25.133:9001;
    }
    upstream www.taotao.com {
		server 192.168.25.133:9003;
    }
    upstream search.taotao.com {
		server 192.168.25.133:9005;
    }
    upstream item.taotao.com {
		server 192.168.25.133:9006;
    }
    upstream sso.taotao.com {
		server 192.168.25.133:9008;
    }
	upstream order.taotao.com {
		server 192.168.25.133:9010;
    }
    upstream cart.taotao.com {
		server 192.168.25.133:9012;
    }
    
   server {
        listen       80;
        server_name  manager.taotao.com;

        location / {
            proxy_pass   http://manager.taotao.com;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  www.taotao.com;

        location / {
            proxy_pass   http://www.taotao.com;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  search.taotao.com;

        location / {
            proxy_pass   http://search.taotao.com;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  item.taotao.com;

        location / {
            proxy_pass   http://item.taotao.com;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  sso.taotao.com;

        location / {
            proxy_pass   http://sso.taotao.com;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  order.taotao.com;

        location / {
            proxy_pass   http://order.taotao.com;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  cart.taotao.com;

        location / {
            proxy_pass   http://cart.taotao.com;
            index  index.html index.htm;
        }
    }
}

注意:修改好之後,需要重新載入(reload)nginx的配置檔案


開發機器上(windows系統)的配置:
測試時使用域名訪問網站,需要修改本地電腦(windows)hosts檔案。
所有的域名應該指向反向代理伺服器nginx
配置hosts檔案,內容如下:

192.168.25.133 manager.taotao.com
192.168.25.133 www.taotao.com
192.168.25.133 search.taotao.com
192.168.25.133 item.taotao.com
192.168.25.133 sso.taotao.com
192.168.25.133 cart.taotao.com
192.168.25.133 order.taotao.com

我們可以使用一個軟體來配置本地電腦(windows)hosts檔案,以管理員身份執行SwitchHosts軟體:

以上都配置好後,我們就可以進行測試訪問。

3.7、資料庫的讀寫分離與分庫分表

  專案中:執行查詢的命令要比修改、刪除、這些命令要多的多。所以為了保證資料庫的讀寫效能和資料庫的完整性。需要做讀寫分離
什麼是讀寫分離?
  通俗的講就是讀取的命令在一個數據庫中,而寫入的命令在另外一個庫中。兩個庫中的資料必須同步
Mysql提供的解決方案:使用binlog進行資料庫同步。需要配置mysql。
程式碼中實現讀寫分類:
  1、可以使用aop實現一個切面。動態切換資料來源。需要程式設計實現。
  2、使用資料庫中介軟體實現讀寫分離分庫分表。(學習這個)

什麼是分庫分表?
  當資料庫的表中資料非常大的時候例如上千萬條資料。查詢效能非常低。可以把一張表資料儲存到不同的資料庫中的不同表中。根據經驗mysql 2000萬以上oracle11G 1億以上時需要分庫分表。
  可以使用一個資料庫中介軟體Mycat。國產開源專案,前身是cobar專案
分庫分表的方式:
  垂直拆分:把不同的表放在不同的資料庫中。(可以解決對某一個表頻繁操作的資料庫壓力問題)
  水平拆分:把同一張表放在不同的資料庫中。(可以解決資料量大的問題)

4、Mycat的學習

4.1、Mycat的介紹

4.2、什麼是Mycat

簡單的說,Mycat就是:

  • 一個徹底開源的,面向企業應用開發的“大資料庫叢集”
  • 支援事務、ACID(4種特新)、可以替代Mysql的加強版資料庫
  • 一個可以視為“Mysql”叢集的企業級資料庫,用來替代昂貴的Oracle叢集
  • 一個融合記憶體快取技術、Nosql技術、HDFS大資料的新型SQL Server
  • 結合傳統資料庫和新型分散式資料倉庫的新一代企業級資料庫產品
  • 一個新穎的資料庫中介軟體產品

Mycat的目標是:低成本的將現有的單機資料庫和應用平滑遷移到“雲”端,解決資料儲存和業務規模迅速增長情況下的資料瓶頸問題。

4.3、Mycat的關鍵特性

  • 支援 SQL 92標準
  • 支援Mysql叢集,可以作為Proxy使用
  • 支援JDBC連線ORACLE、DB2、SQL Server,將其模擬為MySQL Server使用
  • 支援galera for mysql叢集,percona-cluster 或者 mariadb cluster,提供高可用性資料分片叢集
  • 自動故障切換,高可用性
  • 支援讀寫分離,支援Mysql雙主多從,以及一主多從的模式
  • 支援全域性表,資料自動分片到多個節點,用於高效表關聯查詢
  • 支援獨有的基於E-R 關係的分片策略,實現了高效的表關聯查詢
  • 多平臺支援,部署和實施簡單

4.4、Mycat對多資料庫的支援

5、Mycat的下載及安裝

5.1、下載Mycat

官方網站:
  http://www.mycat.org.cn/
github地址:
  https://github.com/MyCATApache

5.2、環境準備

資料庫準備,準備三個MySQL資料庫例項。
在Linux上安裝一個MySQL資料庫進行模擬,再設定三個資料庫,作為叢集中的庫進行使用。
分片規則:

實現這個效果:需要在mycat中做一個配置。

5.3、Mycat安裝

5.3.1、第一步:上傳mycat的檔案到linux中

5.3.2、第二步:移動並解壓縮到/usr/local目錄下

[[email protected] ~]# mv Mycat-server-1.4-release-20151019230038-linux.tar.gz /usr/local
[[email protected] ~]# cd /usr/local
[[email protected] local]# tar -zxf Mycat-server-1.4-release-20151019230038-linux.tar.gz

5.3.3、第三步:配置Mycat實現分片

建立3個數據庫例項

檢視mycat的conf目錄:

[[email protected] local]# cd /usr/local/mycat/conf
[[email protected] conf]# ll

檔案內容詳解如下圖:

配置server.xml,配置的是邏輯庫的名稱和連線該庫的使用者名稱和密碼

[[email protected] conf]# vim server.xml

配置內容如下:

配置邏輯庫的時候注意:
  注意:若是LINUX版本的MYSQL,則需要設定為MySQL對大小寫不敏感,否則可能會發生表找不到的問題。
在MySQL的配置檔案中/etc/my.cnf 中增加一行程式碼:

lower_case_table_names = 1

配置schema.xml,配置的是物理資料庫的節點資訊,包括:ip地址、埠、資料庫名稱、分片規則

[[email protected] conf]# vim schema.xml

配置內容如下:

配置rule.xml,配置的是具體的分片規則

[[email protected] conf]# vim rule.xml

配置內容如下:

查詢分片演算法
配置的分片規則演算法,可以參考以下原始碼:

原始碼位置:Mycat-server-1.4-RELEASE-sources.jar\org\opencloudb\route\function

配置分片演算法
根據分片的java程式碼,繼續在rule.xml配置分片演算法
按下圖方式配置分片規則演算法:

新增並編輯auto-id.txt檔案,可以參考autopartition-long.txt檔案

[[email protected] conf]# vim auto-id.txt

檔案內容如下:

# K=1000,M=10000
0-127=0
128-255=1
256-511=2

5.4、Mycat測試

5.4.1、第一步:連線mysql資料庫

5.4.2、第二步:建立3個數據庫例項

建立3個數據庫例項,要求和mycat配置的schema.xml中的3個例項名稱一致。

5.4.3.第三步:啟動mycat

啟動命令:./mycat start
停止命令:./mycat stop
重啟命令:./mycat restart
具體操作:

[[email protected] ~]# cd /usr/local/mycat/bin
[[email protected] bin]# ./mycat start

內容如下:

檢視啟動日誌

[[email protected] logs]# vim wrapper.log

5.4.4、第四步:連線mycat server

注意:可以使用mysql的客戶端直接連線mycat服務。預設服務埠為8066

5.4.5、測試

  在mycat中建立資料庫表,發現使用的三個庫都建立了表。
  在mycat中插入資料,發現按照規則給三個資料庫分別插入了資料。

6、參考文章

  https://blog.csdn.net/u012453843/article/details/73694543
  https://blog.csdn.net/u012453843/article/details/73656590

我的GitHub地址:https://github.com/heizemingjun
我的部落格園地址:https://www.cnblogs.com/chenmingjun
我的螞蟻筆記部落格地址:https://blog.leanote.com/chenmingjun
Copyright ©2018~2019 黑澤君
【轉載文章務必保留出處和署名,謝謝!】