day81_淘淘商城項目_14_項目發佈 + Linux下安裝mysql + tomcat熱部署 + 反向代理的配置 + 數據庫分庫分表 + Mycat學習_匠心筆記

第十四天:css

  • 一、Linux上mysql的安裝
  • 二、系統的部署
  • 三、mycat的介紹
  • 四、項目總結
  • 五、面試中的問題

一、開發流程淺解

二、項目發佈前的準備

一、測試
  a) 本地單元測試
  b) 測試環境測試(1,2,3,4,5)
  c) 用戶測試(仿真環境:UAT環境)
二、確認服務器的資源
  a) 硬件資源(CPU、內存、硬盤)
  b) 軟件資源(Linux、Windows)
  c) 網絡資源(寬帶、機房、雲服務器)
三、相關參與的人員確認
  a) 測試人員
  b) 開發人員
四、數據庫腳本的準備
  a) 初始化數據的sql腳本(DBA、運維)
  b) 權限的sql腳本等
五、編寫發佈的文檔
  a) 開發人員編寫各自負責的功能模塊的發佈文檔信息
  b) 測試的文檔(測試用例)
  c) 全員參與
六、打包
  a) 專門負責的人員進行打包處理(運維)
七、準備回滾方案html

三、項目部署

3.一、Linux下安裝mysql

第一步:查看mysql是否安裝。java

rpm -qa | grep mysql

第二步:若是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的官方網站下載。linux

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包位置:nginx


第四步:啓動mysql。
service mysqld start

第五步:須要給root用戶設置密碼。git

/usr/bin/mysqladmin -u root password 'new-password'  #爲root帳號設置密碼

第六步:登陸mysql。github

[root@localhost temp]# mysql -uroot -pitcast

第七步:須要先登陸到mysql,遠程鏈接受權。web

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.二、項目架構講解

3.三、系統功能介紹

3.四、網絡拓撲圖

3.五、系統部署

3.5.一、部署分析

工程共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.二、服務器規劃

以下圖所示,搭建服務原來須要24臺服務器,如今只須要7臺便可。


搭建工程規劃使用5臺服務器即可,以下圖所示:

  這樣規劃的話,咱們只須要7+5=12臺服務器便可。
  固然了,12臺服務器在通常的公司來講,也是達不到的,那麼咱們即可以進一步壓縮:
  把更多的服務合併到一臺服務器上,咱們 將全部服務精簡成一臺服務器192.168.25.133內存至少給2G以上。下圖是全部服務端口的規劃表:

  把更多的工程合併到一臺服務器上。咱們 將全部工程精簡成一臺服務器192.168.25.133內存至少給2G以上。下圖是全部工程端口的規劃表:

3.5.三、工程規劃

工程規劃表:


tomcat端口更新映射表:

3.5.四、域名規劃

域名規劃表:

3.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目錄:

[root@localhost webapps]# mkdir ROOT

第二步:從新啓動對應的tomcat9002。

[root@localhost ~]# pwd
/usr/local/taotao-projects/tomcat9002/bin
[root@localhost bin]# ./startup.sh

第三步:查看tomcat9002的啓動日誌。

[root@localhost 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的日誌

[root@localhost 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目錄:

[root@localhost webapps]# mkdir ROOT

第二步:從新啓動對應的tomcat9003。

[root@localhost ~]# pwd
/usr/local/taotao-projects/tomcat9003/bin
[root@localhost bin]# ./startup.sh

第三步:查看tomcat9003的啓動日誌。

[root@localhost 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的日誌

[root@localhost tomcat9003]# tail -f logs/catalina.out

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

3.5.六、其餘工程部署

  同上 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.六、反向代理的配置所示:
第六步:測試,須要先將本地hosts切換爲以下圖所示配置:

3.六、反向代理的配置

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

[root@localhost conf]# pwd
/usr/local/nginx/conf
[root@localhost 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.七、數據庫的讀寫分離與分庫分表

  項目中:執行查詢的命令要比修改、刪除、這些命令要多的多。因此爲了保證數據庫的讀寫性能和數據庫的完整性。須要作讀寫分離
什麼是讀寫分離?
  通俗的講就是讀取的命令在一個數據庫中,而寫入的命令在另一個庫中。兩個庫中的數據必須同步
Mysql提供的解決方案:使用binlog進行數據庫同步。須要配置mysql。
代碼中實現讀寫分類:
  一、可使用aop實現一個切面。動態切換數據源。須要編程實現。
  二、使用數據庫中間件實現讀寫分離分庫分表。(學習這個)


什麼是分庫分表?
  當數據庫的表中數據很是大的時候例如上千萬條數據。查詢性能很是低。能夠把一張表數據保存到不一樣的數據庫中的不一樣表中。根據經驗 mysql 2000萬以上oracle11G 1億以上時須要分庫分表。
  可使用一個 數據庫中間件Mycat。國產開源項目,前身是 cobar項目
分庫分表的方式:
  垂直拆分:把不一樣的表放在不一樣的數據庫中。(能夠解決對某一個表頻繁操做的數據庫壓力問題)
  水平拆分:把同一張表放在不一樣的數據庫中。(能夠解決數據量大的問題)

 

四、Mycat的學習

4.一、Mycat的介紹

4.二、什麼是Mycat

簡單的說,Mycat就是:

  • 一個完全開源的,面向企業應用開發的「大數據庫集羣」
  • 支持事務、ACID(4種特新)、能夠替代Mysql的增強版數據庫
  • 一個能夠視爲「Mysql」集羣的企業級數據庫,用來替代昂貴的Oracle集羣
  • 一個融合內存緩存技術、Nosql技術、HDFS大數據的新型SQL Server
  • 結合傳統數據庫和新型分佈式數據倉庫的新一代企業級數據庫產品
  • 一個新穎的數據庫中間件產品

Mycat的目標是:低成本的將現有的單機數據庫和應用平滑遷移到「雲」端,解決數據存儲和業務規模迅速增加狀況下的數據瓶頸問題。

4.三、Mycat的關鍵特性

  • 支持 SQL 92標準
  • 支持Mysql集羣,能夠做爲Proxy使用
  • 支持JDBC鏈接ORACLE、DB二、SQL Server,將其模擬爲MySQL Server使用
  • 支持galera for mysql集羣,percona-cluster 或者 mariadb cluster,提供高可用性數據分片集羣
  • 自動故障切換,高可用性
  • 支持讀寫分離,支持Mysql雙主多從,以及一主多從的模式
  • 支持全局表,數據自動分片到多個節點,用於高效表關聯查詢
  • 支持獨有的基於E-R 關係的分片策略,實現了高效的表關聯查詢
  • 多平臺支持,部署和實施簡單

4.四、Mycat對多數據庫的支持

五、Mycat的下載及安裝

5.一、下載Mycat

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

5.二、環境準備

數據庫準備,準備三個MySQL數據庫實例。
在Linux上安裝一個MySQL數據庫進行模擬,再設置三個數據庫,做爲集羣中的庫進行使用。
分片規則:


實現這個效果:須要在mycat中作一個配置。

5.三、Mycat安裝

5.3.一、第一步:上傳mycat的文件到linux中

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

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

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

建立3個數據庫實例


查看mycat的conf目錄:
[root@localhost local]# cd /usr/local/mycat/conf
[root@localhost conf]# ll

文件內容詳解以下圖:


配置server.xml,配置的是邏輯庫的名稱和鏈接該庫的用戶名和密碼
[root@localhost conf]# vim server.xml

配置內容以下:


配置邏輯庫的時候注意:
  注意:如果LINUX版本的MYSQL,則須要 設置爲MySQL對大小寫不敏感,不然可能會發生表找不到的問題。
在MySQL的配置文件中/etc/my.cnf 中增長一行代碼:
lower_case_table_names = 1

配置schema.xml,配置的是物理數據庫的節點信息,包括:ip地址、端口、數據庫名稱、分片規則

[root@localhost conf]# vim schema.xml

配置內容以下:


配置rule.xml,配置的是具體的分片規則
[root@localhost conf]# vim rule.xml

配置內容以下:


查找分片算法
配置的分片規則算法,能夠參考如下源碼:

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

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

添加並編輯auto-id.txt文件,能夠參考autopartition-long.txt文件
[root@localhost conf]# vim auto-id.txt

文件內容以下:

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

5.四、Mycat測試

5.4.一、第一步:鏈接mysql數據庫

5.4.二、第二步:建立3個數據庫實例

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

5.4.3.第三步:啓動mycat

啓動命令:./mycat start
中止命令:./mycat stop
重啓命令:./mycat restart
具體操做:

[root@localhost ~]# cd /usr/local/mycat/bin
[root@localhost bin]# ./mycat start

內容以下:


查看啓動日誌
[root@localhost logs]# vim wrapper.log

5.4.四、第四步:鏈接mycat server

注意:可使用mysql的客戶端直接鏈接mycat服務。默認服務端口爲8066

5.4.五、測試

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

六、參考文章

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

相關文章
相關標籤/搜索