第十四天:
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
2)安装 MySQL 下载源:
yum localinstall MySQL-community-release-el6-5.noarch.rpm
3)在线安装社区版的 MySQL:
yum install MySQL-community-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 数据库文件.
Linux 上安装 mysq 链接: xxxxxxxxxxxxxxxxxxx 后续补上
3.2, 项目架构讲解
3.3, 系统功能介绍
3.4, 网络拓扑图
3.5, 系统部署
3.5.1, 部署分析
工程共 13 个, 如下所示, 本着高可用的原则, 每个工程至少有两台服务器. 13 个工程至少需要 26 台服务器.
- taotao-manager
- taotao-manager-web
- taotao-content
- taotao-portal-Web
- taotao-search
- taotao-search-Web
- taotao-item-Web
- taotao-sso
- taotao-sso-Web
- taotao-order
- taotao-order-Web
- taotao-cart
- taotao-cart-Web
即淘淘商城在真实环境中要部署的话需要 26 台服务器.
服务 | 服务器个数 |
---|---|
Mysql | 2 |
Solr | 7 |
Redis | 6 |
图片服务器 | 2 |
Nginx | 2 |
注册中心 | 3 |
Activemq | 2 |
总共需要 26+24=50 台服务器. 但我们都知道, 一般的小公司是绝不可能弄这么多服务器的, 太昂贵了, 比较可行的是采用伪分布式.
3.5.2, 服务器规划
如下图所示, 搭建服务原来需要 24 台服务器, 现在只需要 7 台即可.
搭建工程规划使用 5 台服务器便可, 如下图所示:
这样规划的话, 我们只需要 7+5=12 台服务器即可. 当然了, 12 台服务器在一般的公司来说, 也是达不到的, 那么我们便可以进一步压缩, 把更多的服务合并到一台服务器上, 把更多的工程合并到一台服务器上.
我们
将服务精简成一台服务器
:192.168.25.133
内存至少给 2G 以上.
3.5.3, 工程规划
工程规划表:
tomcat 端口更新映射表:
3.5.4, 域名规划
域名规划表:
3.5.5,tomcat 热部署
可以使用 maven 实现 tomcat 热部署. 即 tomcat 启动时部署工程.
tomcat 有个后台管理功能, 可以实现工程热部署. 部署完成后, 我们不需要启动 tomcat 了, tomcat 会自动把 war 包解压到 ROOT 目录下.
这里以 taotao-content 及 taotao-portal-Web 为例子演示:
在 Linux 下, 我们新建有 13 个 tomcat 放置 12 工程:
先启动服务: 启动 Redis, 启动 zookeeper, 启动 activemq, 启动 Solr, 启动 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 地址, 端口, 实例名, 用户名, 密码. 修改 applicationContenxt-Redis.xml 中的 ip 地址, 端口.(即: 将原来的 localhost 修改为 MySQL 所在的服务器的 IP 地址.)修改 taotao-content 工程中的发布服务的配置文件 applicationContenxt-service.xml 中注册中心的地址, 改成 Linux 系统中的 zookeeper 的地址 192.168.25.133 以及暴露服务的端口.
第二步: 配置 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...
- tomcat7:deploy #部署
- 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.
第二步: 配置 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-content 和 b) 部署 taotao-portal-Web 步骤.
注意 1: 在工程部署之前需要启动所有的服务: zookeeper,Solr,Redis,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/taotao 为 192.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 项目.
来源: https://www.cnblogs.com/chenmingjun/p/10094085.html