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、准备回滚方案
第一步:查看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
工程共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台服务器。但我们都知道,一般的小公司是绝不可能弄这么多服务器的,太昂贵了,比较可行的是采用伪分布式
。
如下图所示,搭建服务原来需要24台服务器,现在只需要7台即可。
搭建工程规划使用5台服务器便可,如下图所示:
这样规划的话,我们只需要7+5=12台服务器即可。
当然了,12台服务器在一般的公司来说,也是达不到的,那么我们便可以进一步压缩:
把更多的服务合并到一台服务器上,我们将所有服务精简成一台服务器
:192.168.25.133
内存至少给2G以上。下图是所有服务端口的规划表:
把更多的工程合并到一台服务器上。我们将所有工程精简成一台服务器
:192.168.25.133
内存至少给2G以上。下图是所有工程端口的规划表:
工程规划表:
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配置文件。添加用户名、密码、权限。
我们要将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>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<configuration>
<port>8083port>
<path>/path>
<url>http://192.168.25.133:9002/manager/texturl>
<username>tomcatusername>
<password>tomcatpassword>
configuration>
plugin>
plugins>
build>
注意:添加了三行配置,
里面的tomcat热部署地址的端口号有所变化,现在是9002。大家可能会有疑问,
配置上面的那个
有什么用?会不会对部署产生坏的影响。这个其实不用担心,这个port
对热部署来说,没有用,这里之所以没有把它删掉是因为我们在Windows系统下开发
的时候给这个工程规划的端口是8083
,如果需要在Windows系统下启动该工程的
话,这个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配置文件。添加用户名、密码、权限。
我们要将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>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<configuration>
<port>8082port>
<path>/path>
<url>http://192.168.25.133:9003/manager/texturl>
<username>tomcatusername>
<password>tomcatpassword>
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工程部署成功。
同上 a) 部署taotao-content
和 b) 部署taotao-portal-web
步骤。
注意1:在工程部署之前需要启动所有的服务:zookeeper、redis、solr、mysql、activemq
注意2:每个工程运行在不同的tomcat上,需要修改tomcat的端口号。
注意3:先部署服务层工程,再部署表现层工程。
注意4:当部署使用到activemq的工程时,需要将原来的pom.xml文件的activemq的依赖配置项修改为新的,如下:
原来的:
org.apache.activemq
activemq-all
新的:
org.apache.activemq
activemq-core
如果不修改成新的在部署的时候会报错,但是在开发使用原来的没有问题。(这是一个坑
)
部署大致步骤如下:
第一步:修改工程中的服务器的地址都改为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切换为如下图所示配置:
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软件:
以上都配置好后,我们就可以进行测试访问。
项目中:执行查询的命令要比修改、删除、这些命令要多的多。所以为了保证数据库的读写性能
和数据库的完整性
。需要做读写分离
。
什么是读写分离?
通俗的讲就是读取的命令在一个数据库中,而写入的命令在另外一个库中。两个库中的数据必须同步
。
Mysql提供的解决方案:使用binlog进行数据库同步
。需要配置mysql。
代码中实现读写分类:
1、可以使用aop实现一个切面。动态切换数据源。需要编程实现。
2、使用数据库中间件实现读写分离
,分库分表
。(学习这个)
什么是分库分表?
当数据库的表中数据非常大的时候例如上千万条数据。查询性能非常低。可以把一张表数据保存到不同的数据库中的不同表中。根据经验mysql 2000万以上
和 oracle11G 1亿以上
时需要分库分表。
可以使用一个数据库中间件Mycat
。国产开源项目,前身是cobar项目
。
分库分表的方式:
垂直拆分:把不同的表放在不同的数据库中。(可以解决对某一个表频繁操作的数据库压力问题)
水平拆分:把同一张表放在不同的数据库中。(可以解决数据量大的问题)
简单的说,Mycat就是:
Mycat的目标是:低成本的将现有的单机数据库和应用平滑迁移
到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈
问题。
官方网站:
http://www.mycat.org.cn/
github地址:
https://github.com/MyCATApache
数据库准备,准备三个MySQL数据库实例。
在Linux上安装一个MySQL数据库进行模拟,再设置三个数据库,作为集群中的库进行使用。
分片规则:
实现这个效果:需要在mycat中做一个配置。
[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
创建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
创建3个数据库实例,要求和mycat配置的schema.xml中的3个实例名称一致。
启动命令:./mycat start
停止命令:./mycat stop
重启命令:./mycat restart
具体操作:
[root@localhost ~]# cd /usr/local/mycat/bin
[root@localhost bin]# ./mycat start
内容如下:
查看启动日志
[root@localhost logs]# vim wrapper.log
注意:可以使用mysql的客户端直接连接mycat服务。默认服务端口为8066
在mycat中创建数据库表,发现使用的三个库都创建了表。
在mycat中插入数据,发现按照规则给三个数据库分别插入了数据。
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 黑泽君
【转载文章务必保留出处和署名,谢谢!】