day81_淘淘商城项目_14_项目发布 + Linux下安装mysql + tomcat热部署 + 反向代理的配置 + 数据库分库分表 + Mycat学习_匠心笔记

隐身守侯 提交于 2020-05-01 19:31:22

第十四天:

  • 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。

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

[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.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时不要有空格。

[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.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目录下

[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.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.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
具体操作:

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

内容如下:


查看启动日志
[root@localhost 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!