一、系统架构
本系统的环境部署和配置主要分为三大块:前端,后端,数据库,图一所示
图一. 系统架构图
1. 负载均衡
开发和测试环境中,负载均衡由两台代理服务器,采用nginx+keepalived实现双机热备份和Web服务器的负载均衡。在生产环境中由医院提供的F5服务器做负载均衡。
2. Web服务器
两台Web服务器互为备份,同时实现负载均衡,用于部署系统的后端程序,采用Redis解决前端访问的session共享问题,安装Tomcat作为Web服务软件,采用Mycat作为数据库服务器读写分离的中间件。
3. 数据库服务器
数据库服务器采用双主从结构,从服务器的数据与主服务器同步,数据的写操作(增删改)均在主服务器上进行,两台主数据库服务器互为备份,数据库的读操作(查询)均在从数据库服务器上进行,系统数据读写业务量增大时,可扩展住、从服务器数量实现扩容,前端Web服务器同过Mycat的配置实现读写操作的负载均衡。
二、项目环境搭建
1. 前端
1.1负载均衡
生产环境系统中负载均衡由医院方提供F5服务器做负载均衡
1.2 前端技术框架----Vue.js(开发环境搭建)
1.进入Node.js官网:https://nodejs.org/en/,选择下载并安装Node.js(需较新版本)
2.验证Node.js是否安装好,在windows下,win+r召唤出运行窗口,输入cmd打开命令行窗口。输入node -v即可得到对应的Node.js版本。
3.安装cnpm
执行命令
npm install -g cnpm --registry=https://registry.npm.taobao.or
使用npm的国内镜像(npm 国内镜像 https://npm.taobao.org/)cnpm 命令代替默认的npm命令,增加依赖包加载速度且避免资源限制
在命令行中运行如下命令,安装脚手架。图4所示
在命令行中键入vue create demo (demo是项目名) 即可完成创建
cd到demo(项目)目录,先执行cnpm install 安装依赖,然后执行npm run serve,即可启动项目,浏览器中输入localhost:8080出现以下页面说明启动成功。
2. 后台
2.1 tomcat服务器
1.cd到/usr/local目录 执行 如下命令下载tomcat压缩包(如图6所示)
wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.39/bin/apache-tomcat-8.5.39.tar.gz
2.执行如下命令,命令解压tomcat压缩包,完成安装。
<span style="color:#000000"><span style="color:#000000">tar -zxvf apache-tomcat-8.5.39.tar.gz</span></span>
1. 创建systemctl管理tomcat的配置文件 vim /lib/systemd/system/tomcat.service
2. 配置文件样例, 图8所示。
图8. 配置文件样例
3. 启动服务
systemctl start tomcat.service
4. 查看服务状态
<span style="color:#000000"><span style="color:#000000">systemctl status tomcat.service </span></span>
5. 开机启动
systemctl enable tomcat.service
重启之后再查看服务状态已经启动
(注意:由于系统架构采用两台服务器并实现负载均衡,所以两台服务器tomcat安装配置完全一致)
2.2 Redis安装与配置
提出问题:在分布式系统中需要使用多台服务器,用户在客户端第一次发送登录请求(假定一次登陆成功),nginx负载均衡分配到服务器1,服务器1中生成session,并且响应客户端,客户端中存储了此session。接下来用户再次发送请求,就会产生以下两种情况:
① nginx将请求分配给服务器1,服务器检测到有此用户的session,响应客户端;
② nginx将请求分配给服务器2,服务器检测不到此用户的session,无法响应客户端,此时就会报错。
即:一个请求,有时可以得到响应,有时得不到响应。
解决问题:采用redis实现session共享。实现原理如下图所示,用户登录之后会将session写入redis中,再次发送请求时,服务器2就会从客户端发送过来的session中获取sessionId,再用sessionId从redis中获取session。
1. 官网下载压缩包
wget http://download.redis.io/releases/redis-4.0.6.tar.gz
2. 解压
tar -zxvf redis-4.0.6.tar.gz
3. cd到redis-4.0.6目录 执行
make
redis-4.0.6目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下。
cd 到src目录下执行如下命令
make install
3. 下面启动redis服务-----以后台进程方式启dong
修改redis.conf文件 daemonize no 改为 daemonize yes
然后执行
1. 开机自启动
执行
vim /etc/systemd/system/redis-server.service
添加如下内容
[Unit]
Description=Redis Server Manager
After=syslog.target
After=network.target
[Service]
Type=simple
User=redis
Group=redis
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/local/redis/redis-server /usr/local/redis/redis.conf
ExecStop=/usr/local/redis/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target
保存退出执行如下指令,完成开机自启配置
systemctl daemon-reload
systemctl start redis-server.service
systemctl enable redis-server.service
3.数据库
3.1安装Mysql5.7
执行
下载命令
curl -LO http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
下载后执行
1. 执行 命令完成安装
vim /etc/rc.local
添加service mysqld start即可
图12所示
图12 mysql自启动
1.修改密码
查到密码
grep 'temporary password' /var/log/mysqld.log
修改密码
ALTER USER test@'%' IDENTIFIED BY '123456';
2. 开启远程连接端口
执行 firewall-cmd --zone=public --add-port=3306/tcp --permanent 开放3306端口
执行 firewall-cmd --reload 重启防火墙
执行 firewall-cmd --list-port 查看已开放的端口
3.2 Mysql主从服务器配置
主从关系说明:mysql服务器由两台主服务器(master1--71,master2--76)和两台从服务器(slave1--72,slave2--77)组成,master1与master2互为主从,slave1为master 1的从服务器, slave2为master 2的从服务器。
1. Master1 配置my.cnf文件 (/etc/my.cnf 下同),图14所示
图14 Master1 配置my.cnf
2. Master2的my.cnf配置,图15所示
图15. Master2 配置my.cnf
3. Slave1配置my.cnf文件,图16所示
图16. Slave1配置my.cnf文件
4. Slave2配置my.cnf文件,图17所示
图17 Slave2配置my.cnf文件
1. master1配置
A. 查看master2状态 执行命令 show master status,图18所示。
图18. 查看master2状态
B. 执行配置命令,图19所示
<span style="color:#000000"><span style="color:#000000">change master to master_host='192.168.1.222', master_user='master2',master_password='123456',master_log_file='mysql_bin.000018',master_log_pos=154;
master_host是master1的主服务器ip
master2是master1的主服务器</span></span>
图19. master1配置
2. master2配置
A. 查看master1状态 执行命令 show master status,图20所示。
图20. maste1状态
B. 执行配置命令
change master to master_host=
'192.168.1.221', #master2的主服务器ip
master_user='master1', # master1是master2的主服务器
master_password='123456',
master_log_file='mysql_bin.000028',
master_log_pos=154;
图21. master2配置
1. slave1配置(slave1和master2都是master1的从服务器,所以两者配置一样)图22. 所示
change master to master_host=
'192.168.1.221',
master_user='master1',
master_password='123456',
master_log_file='mysql_bin.000028',master_log_pos=154;
图22. slave1配置
2. slave2配置(slave2和master1都是master2的从服务器,所以两者配置一样)
执行配置命令(图23所示)
change master to master_host=
'192.168.1.222', #slave2的主服务器ip
master_user='master2',
master_password='123456',
master_log_file='mysql_bin.000018',
master_log_pos=154;
图23. slave2配置
3.3 Mycat安装与配置
1.首先进入/usr/local目录 cd /usr/local
2.从官网下载mycat(图24所示)
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
3、解压mycat压缩包
1. mycat文件夹授权
chmod -R 777 mycat
2.环境变量添加
vi /etc/profile
添加
export MYCAT_HOME=/usr/local/mycat
3. 使环境变量生效
source /etc/profile
4. 启动mycat
1. 配置server.xml (Path: /usr/local/mycat/conf/server.xml) 图25所示
图25. 配置server.xml
2. 配置 schema.xml (path: /usr/local/mycat/conf/schema.xml),图26所示
图26. 配置 schema.xml
1. 创建systemctl管理mycat的配置文件 vim /lib/systemd/system/mycat.service
2. 配置文件样例,图27所示
图27. 配置文件样例
3. 启动服务 s
ystemctl start mycat.service
4. 查看服务状态
systemctl status mycat.service
5. 开机启动
systemctl enable mycat.service
重启之后再查看服务状态已经启动
三、项目部署
1. 前端打包
在VSCode中打开终端,执行如下命令,编译完成之后根目录下会生成dist文件夹(图31所示),将dist更名为FlupPlatformWebpage,并在vue.config.js中配置生产环境目录,使其与包名相同,配置如下。
npm run build
module.exports = {
publicPath: process.env.NODE_ENV === 'production'
? '/FlupPlatformWebpage/'
: '/'
}
图31. 前端打包
2. 后台打包
首先在application.yml配置启动文件
spring:
profiles:
active: prod
然后在application-prod.yml配置文件中配置数据库连接及redis连接,详细配置如下
spring:
datasource:
url: jdbc:mysql://localhost:8066/yaxin?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
username: root
password: Yaxin123456
driver-class-name: com.mysql.jdbc.Driver
redis:
host: 133.0.5.65
password: yaxin123456
port: 6379
database: 0
timeout: 2400s
打开终端(terminal)cd到项目yaxin(module)目录,输入
mvn clean install -Dmaven.test.skip=true
编译完成之后会在yaxin目录下生成target目录,此目录下的FlupPlatformServer.war文件就是即将部署的war包,相关操作及配置如下图32所示。
图32. 后台打包
3. 项目部署
两个服务器都要部署