Docker环境下的前后端分离项目部署与运维(九)后端项目部署与负载均衡
数据库准备
建立数据库 renren_fast ,然后运行renrenfast项目中的db文件夹内的脚本
-- 菜单
CREATE TABLE `sys_menu` (
`menu_id` bigint NOT NULL AUTO_INCREMENT,
`parent_id` bigint COMMENT '父菜单ID,一级菜单为0',
`name` varchar() COMMENT '菜单名称',
`url` varchar() COMMENT '菜单URL',
`perms` varchar() COMMENT '授权(多个用逗号分隔,如:user:list,user:create)',
`type` int COMMENT '类型 0:目录 1:菜单 2:按钮',
`icon` varchar() COMMENT '菜单图标',
`order_num` int COMMENT '排序',
PRIMARY KEY (`menu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='菜单管理'; -- 系统用户
CREATE TABLE `sys_user` (
`user_id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar() NOT NULL COMMENT '用户名',
`password` varchar() COMMENT '密码',
`salt` varchar() COMMENT '盐',
`email` varchar() COMMENT '邮箱',
`mobile` varchar() COMMENT '手机号',
`status` tinyint COMMENT '状态 0:禁用 1:正常',
`create_user_id` bigint() COMMENT '创建者ID',
`create_time` datetime COMMENT '创建时间',
PRIMARY KEY (`user_id`),
UNIQUE INDEX (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统用户'; -- 系统用户Token
CREATE TABLE `sys_user_token` (
`user_id` bigint() NOT NULL,
`token` varchar() NOT NULL COMMENT 'token',
`expire_time` datetime DEFAULT NULL COMMENT '过期时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`user_id`),
UNIQUE KEY `token` (`token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统用户Token'; -- 系统验证码
CREATE TABLE `sys_captcha` (
`uuid` char() NOT NULL COMMENT 'uuid',
`code` varchar() NOT NULL COMMENT '验证码',
`expire_time` datetime DEFAULT NULL COMMENT '过期时间',
PRIMARY KEY (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统验证码'; -- 角色
CREATE TABLE `sys_role` (
`role_id` bigint NOT NULL AUTO_INCREMENT,
`role_name` varchar() COMMENT '角色名称',
`remark` varchar() COMMENT '备注',
`create_user_id` bigint() COMMENT '创建者ID',
`create_time` datetime COMMENT '创建时间',
PRIMARY KEY (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色'; -- 用户与角色对应关系
CREATE TABLE `sys_user_role` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint COMMENT '用户ID',
`role_id` bigint COMMENT '角色ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户与角色对应关系'; -- 角色与菜单对应关系
CREATE TABLE `sys_role_menu` (
`id` bigint NOT NULL AUTO_INCREMENT,
`role_id` bigint COMMENT '角色ID',
`menu_id` bigint COMMENT '菜单ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色与菜单对应关系'; -- 系统配置信息
CREATE TABLE `sys_config` (
`id` bigint NOT NULL AUTO_INCREMENT,
`key` varchar() COMMENT 'key',
`value` varchar() COMMENT 'value',
`status` tinyint DEFAULT COMMENT '状态 0:隐藏 1:显示',
`remark` varchar() COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE INDEX (`key`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8 COMMENT='系统配置信息表'; -- 系统日志
CREATE TABLE `sys_log` (
`id` bigint() NOT NULL AUTO_INCREMENT,
`username` varchar() COMMENT '用户名',
`operation` varchar() COMMENT '用户操作',
`method` varchar() COMMENT '请求方法',
`params` varchar() COMMENT '请求参数',
`time` bigint NOT NULL COMMENT '执行时长(毫秒)',
`ip` varchar() COMMENT 'IP地址',
`create_date` datetime COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8 COMMENT='系统日志'; -- 初始数据
INSERT INTO `sys_user` (`user_id`, `username`, `password`, `salt`, `email`, `mobile`, `status`, `create_user_id`, `create_time`) VALUES ('', 'admin', '9ec9750e709431dad22365cabc5c625482e574c74adaebba7dd02f1129e4ce1d', 'YzcmCZNvbXocrsz9dm8e', 'root@renren.io', '', '', '', '2016-11-11 11:11:11');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '系统管理', NULL, NULL, '', 'fa fa-cog', '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '管理员列表', 'modules/sys/user.html', NULL, '', 'fa fa-user', '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '角色管理', 'modules/sys/role.html', NULL, '', 'fa fa-user-secret', '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '菜单管理', 'modules/sys/menu.html', NULL, '', 'fa fa-th-list', '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', 'SQL监控', 'druid/sql.html', NULL, '', 'fa fa-bug', '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '查看', NULL, 'sys:user:list,sys:user:info', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '新增', NULL, 'sys:user:save,sys:role:select', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '修改', NULL, 'sys:user:update,sys:role:select', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '删除', NULL, 'sys:user:delete', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '查看', NULL, 'sys:role:list,sys:role:info', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '新增', NULL, 'sys:role:save,sys:menu:list', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '修改', NULL, 'sys:role:update,sys:menu:list', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '删除', NULL, 'sys:role:delete', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '查看', NULL, 'sys:menu:list,sys:menu:info', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '新增', NULL, 'sys:menu:save,sys:menu:select', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '修改', NULL, 'sys:menu:update,sys:menu:select', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '删除', NULL, 'sys:menu:delete', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '参数管理', 'modules/sys/config.html', 'sys:config:list,sys:config:info,sys:config:save,sys:config:update,sys:config:delete', '', 'fa fa-sun-o', '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '系统日志', 'modules/sys/log.html', 'sys:log:list', '', 'fa fa-file-text-o', ''); -- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 云存储服务相关SQL,如果不使用该功能,则不用执行下面SQL -------------------------------------------------------------------------------------------------------------
-- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- 文件上传
CREATE TABLE `sys_oss` (
`id` bigint() NOT NULL AUTO_INCREMENT,
`url` varchar() COMMENT 'URL地址',
`create_date` datetime COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8 COMMENT='文件上传'; INSERT INTO `sys_config` (`key`, `value`, `status`, `remark`) VALUES ('CLOUD_STORAGE_CONFIG_KEY', '{\"aliyunAccessKeyId\":\"\",\"aliyunAccessKeySecret\":\"\",\"aliyunBucketName\":\"\",\"aliyunDomain\":\"\",\"aliyunEndPoint\":\"\",\"aliyunPrefix\":\"\",\"qcloudBucketName\":\"\",\"qcloudDomain\":\"\",\"qcloudPrefix\":\"\",\"qcloudSecretId\":\"\",\"qcloudSecretKey\":\"\",\"qiniuAccessKey\":\"NrgMfABZxWLo5B-YYSjoE8-AZ1EISdi1Z3ubLOeZ\",\"qiniuBucketName\":\"ios-app\",\"qiniuDomain\":\"http://7xqbwh.dl1.z0.glb.clouddn.com\",\"qiniuPrefix\":\"upload\",\"qiniuSecretKey\":\"uIwJHevMRWU0VLxFvgy0tAcOdGqasdtVlJkdy6vV\",\"type\":1}', '', '云存储配置信息');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '文件上传', 'modules/oss/oss.html', 'sys:oss:all', '', 'fa fa-file-image-o', ''); -- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- APP接口相关SQL,如果不使用该功能,则不用执行下面SQL -------------------------------------------------------------------------------------------------------------
-- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- 用户表
CREATE TABLE `tb_user` (
`user_id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar() NOT NULL COMMENT '用户名',
`mobile` varchar() NOT NULL COMMENT '手机号',
`password` varchar() COMMENT '密码',
`create_time` datetime COMMENT '创建时间',
PRIMARY KEY (`user_id`),
UNIQUE INDEX (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户'; -- 账号: 密码:admin
INSERT INTO `tb_user` (`username`, `mobile`, `password`, `create_time`) VALUES ('mark', '', '8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918', '2017-03-23 22:37:41'); -- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 定时任务相关表结构,如果不使用该功能,则不用执行下面SQL -------------------------------------------------------------------------------------------------------------
-- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- 初始化菜单数据
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '定时任务', 'modules/job/schedule.html', NULL, '', 'fa fa-tasks', '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '查看', NULL, 'sys:schedule:list,sys:schedule:info', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '新增', NULL, 'sys:schedule:save', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '修改', NULL, 'sys:schedule:update', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '删除', NULL, 'sys:schedule:delete', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '暂停', NULL, 'sys:schedule:pause', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '恢复', NULL, 'sys:schedule:resume', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '立即执行', NULL, 'sys:schedule:run', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '日志列表', NULL, 'sys:schedule:log', '', NULL, ''); -- 定时任务
CREATE TABLE `schedule_job` (
`job_id` bigint() NOT NULL AUTO_INCREMENT COMMENT '任务id',
`bean_name` varchar() DEFAULT NULL COMMENT 'spring bean名称',
`method_name` varchar() DEFAULT NULL COMMENT '方法名',
`params` varchar() DEFAULT NULL COMMENT '参数',
`cron_expression` varchar() DEFAULT NULL COMMENT 'cron表达式',
`status` tinyint() DEFAULT NULL COMMENT '任务状态 0:正常 1:暂停',
`remark` varchar() DEFAULT NULL COMMENT '备注',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`job_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='定时任务'; -- 定时任务日志
CREATE TABLE `schedule_job_log` (
`log_id` bigint() NOT NULL AUTO_INCREMENT COMMENT '任务日志id',
`job_id` bigint() NOT NULL COMMENT '任务id',
`bean_name` varchar() DEFAULT NULL COMMENT 'spring bean名称',
`method_name` varchar() DEFAULT NULL COMMENT '方法名',
`params` varchar() DEFAULT NULL COMMENT '参数',
`status` tinyint() NOT NULL COMMENT '任务状态 0:成功 1:失败',
`error` varchar() DEFAULT NULL COMMENT '失败信息',
`times` int() NOT NULL COMMENT '耗时(单位:毫秒)',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`log_id`),
KEY `job_id` (`job_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='定时任务日志'; INSERT INTO `schedule_job` (`bean_name`, `method_name`, `params`, `cron_expression`, `status`, `remark`, `create_time`) VALUES ('testTask', 'test', 'renren', '0 0/30 * * * ?', '', '有参数测试', '2016-12-01 23:16:46');
INSERT INTO `schedule_job` (`bean_name`, `method_name`, `params`, `cron_expression`, `status`, `remark`, `create_time`) VALUES ('testTask', 'test2', NULL, '0 0/30 * * * ?', '', '无参数测试', '2016-12-03 14:55:56'); -- quartz自带表结构
CREATE TABLE QRTZ_JOB_DETAILS(
SCHED_NAME VARCHAR() NOT NULL,
JOB_NAME VARCHAR() NOT NULL,
JOB_GROUP VARCHAR() NOT NULL,
DESCRIPTION VARCHAR() NULL,
JOB_CLASS_NAME VARCHAR() NOT NULL,
IS_DURABLE VARCHAR() NOT NULL,
IS_NONCONCURRENT VARCHAR() NOT NULL,
IS_UPDATE_DATA VARCHAR() NOT NULL,
REQUESTS_RECOVERY VARCHAR() NOT NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_TRIGGERS (
SCHED_NAME VARCHAR() NOT NULL,
TRIGGER_NAME VARCHAR() NOT NULL,
TRIGGER_GROUP VARCHAR() NOT NULL,
JOB_NAME VARCHAR() NOT NULL,
JOB_GROUP VARCHAR() NOT NULL,
DESCRIPTION VARCHAR() NULL,
NEXT_FIRE_TIME BIGINT() NULL,
PREV_FIRE_TIME BIGINT() NULL,
PRIORITY INTEGER NULL,
TRIGGER_STATE VARCHAR() NOT NULL,
TRIGGER_TYPE VARCHAR() NOT NULL,
START_TIME BIGINT() NOT NULL,
END_TIME BIGINT() NULL,
CALENDAR_NAME VARCHAR() NULL,
MISFIRE_INSTR SMALLINT() NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
SCHED_NAME VARCHAR() NOT NULL,
TRIGGER_NAME VARCHAR() NOT NULL,
TRIGGER_GROUP VARCHAR() NOT NULL,
REPEAT_COUNT BIGINT() NOT NULL,
REPEAT_INTERVAL BIGINT() NOT NULL,
TIMES_TRIGGERED BIGINT() NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_CRON_TRIGGERS (
SCHED_NAME VARCHAR() NOT NULL,
TRIGGER_NAME VARCHAR() NOT NULL,
TRIGGER_GROUP VARCHAR() NOT NULL,
CRON_EXPRESSION VARCHAR() NOT NULL,
TIME_ZONE_ID VARCHAR(),
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_SIMPROP_TRIGGERS
(
SCHED_NAME VARCHAR() NOT NULL,
TRIGGER_NAME VARCHAR() NOT NULL,
TRIGGER_GROUP VARCHAR() NOT NULL,
STR_PROP_1 VARCHAR() NULL,
STR_PROP_2 VARCHAR() NULL,
STR_PROP_3 VARCHAR() NULL,
INT_PROP_1 INT NULL,
INT_PROP_2 INT NULL,
LONG_PROP_1 BIGINT NULL,
LONG_PROP_2 BIGINT NULL,
DEC_PROP_1 NUMERIC(,) NULL,
DEC_PROP_2 NUMERIC(,) NULL,
BOOL_PROP_1 VARCHAR() NULL,
BOOL_PROP_2 VARCHAR() NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_BLOB_TRIGGERS (
SCHED_NAME VARCHAR() NOT NULL,
TRIGGER_NAME VARCHAR() NOT NULL,
TRIGGER_GROUP VARCHAR() NOT NULL,
BLOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_CALENDARS (
SCHED_NAME VARCHAR() NOT NULL,
CALENDAR_NAME VARCHAR() NOT NULL,
CALENDAR BLOB NOT NULL,
PRIMARY KEY (SCHED_NAME,CALENDAR_NAME))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
SCHED_NAME VARCHAR() NOT NULL,
TRIGGER_GROUP VARCHAR() NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_FIRED_TRIGGERS (
SCHED_NAME VARCHAR() NOT NULL,
ENTRY_ID VARCHAR() NOT NULL,
TRIGGER_NAME VARCHAR() NOT NULL,
TRIGGER_GROUP VARCHAR() NOT NULL,
INSTANCE_NAME VARCHAR() NOT NULL,
FIRED_TIME BIGINT() NOT NULL,
SCHED_TIME BIGINT() NOT NULL,
PRIORITY INTEGER NOT NULL,
STATE VARCHAR() NOT NULL,
JOB_NAME VARCHAR() NULL,
JOB_GROUP VARCHAR() NULL,
IS_NONCONCURRENT VARCHAR() NULL,
REQUESTS_RECOVERY VARCHAR() NULL,
PRIMARY KEY (SCHED_NAME,ENTRY_ID))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_SCHEDULER_STATE (
SCHED_NAME VARCHAR() NOT NULL,
INSTANCE_NAME VARCHAR() NOT NULL,
LAST_CHECKIN_TIME BIGINT() NOT NULL,
CHECKIN_INTERVAL BIGINT() NOT NULL,
PRIMARY KEY (SCHED_NAME,INSTANCE_NAME))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_LOCKS (
SCHED_NAME VARCHAR() NOT NULL,
LOCK_NAME VARCHAR() NOT NULL,
PRIMARY KEY (SCHED_NAME,LOCK_NAME))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY);
CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP); CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME);
CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);
CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME);
CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);
CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);
后端项目
后端项目为开源项目renren-fast
使用到的技术有:SpringBoot,Shiro,Redis,SSM,Swagger,JWT
单点登录:只需登录微服务的任一节点,访问其它微服务节点时便无需再重复登录。
JWT:不在session里面保存认证与授权信息,而是保存在客户端浏览器上,访问某个节点时发送认证信息,后端认证令牌信息成功后就认为登录成功了。
后端项目部署
- 从后端项目网址下载项目,并导入到Eclipse当中,具体流程参加官方文档
注意后端项目是SpringBoot项目,需要在Eclipse中安装Spring Tools插件
修改 application-dev.yml 的数据库配置,连接之前配好的数据库集群的虚拟IP:
first: #数据源1
url: jdbc:mysql://192.168.63.160:3306/renren_fast?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: abc
second: #数据源2
url: jdbc:mysql://192.168.63.160:3306/renren_fast?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: abc修改 application.yml 文件中的redis配置,连接之前配好的Redis集群:
redis:
open: false # 是否开启redis缓存 true开启 false关闭
database:
# host: localhost
# port:
# password: Nannan2017JK # 密码(默认为空)
timeout: # 连接超时时长(毫秒) cluster:
nodes:
- 192.168.63.144:
- 192.168.63.144:
- 192.168.63.144:
- 192.168.63.144:
- 192.168.63.144:
- 192.168.63.144:修改 application.yml 中的项目端口号为6001:
将来项目要部署到Docker容器中,而Docker内部的网络是不允许跨网段访问的,所以后端项目容器要连接到Docker的host网络,使用宿主机IP。为了避免端口冲突,需要修改端口号。
# Tomcat
server:
tomcat:
uri-encoding: UTF-
max-threads:
min-spare-threads:
port:
connection-timeout:
servlet:
context-path: /renren-fast- 后端项目使用Maven管理项目,在项目根目录使用如下命令打包:
renren-fast包含了tomcat.jar文件,所以工程打包成JAR文件就能独立运行进入renren-fast目录,执行mvn命令
mvn clean install -Dmaven.test.skep=true # 跳过测试代码
# clean :表示清除之前的JAR文件;
# install :意味着打包到本地;
# -Dmaven.test.skip=true :代表跳过测试代码打包成功后,会在项目根目录的 target 文件夹下生成 renren-fast.jar
- 创建Docker卷 j1 ,并将 renren-fast.jar 复制到该目录下,用来在容器中启动该Jar包
docker volume create j1
ls /var/lib/docker/volumes/j1/_data
renren-fast.jar 后端Jar包运行需要Java环境,从Docker仓库拉下
java
镜像,然后执行如下指令创建容器:docker run -it -d -v j1:/home/soft --net=host --name j1 java
进入
j1
容器Jar包所在目录,执行如下命令使后端项目在关闭终端时不挂断(nohup)并且在后台运行(&):docker exec -it j1 bash
cd /home/soft
nohup java -jar renren-fast.jar &项目启动成功后便可以通过 http://192.168.63.144:6001/renren-fast/swagger/index.html 来测试后端接口
我的Jar包启动时报如下错误:Couldn't get host name! [See nested exception: java.net.UnknownHostException: wayne: wayne:]
解决办法是进入容器,在/etc/hosts文件中添加一行127.0.0. wayne创建负载站点
按照上述方法再在Docker中部署j2(端口6002),j3(端口6003)两个后台项目容器
注意:要修改tomcat配置端口,打包
docker volume create j2
ls /var/lib/docker/volumes/j2/_data
renren-fast.jar
docker run -it -d -v j2:/home/soft --net=host --name j2 java
docker exec -it j2 bash
cd /home/soft
nohup java -jar renren-fast.jar & docker volume create j3
ls /var/lib/docker/volumes/j3/_data
renren-fast.jar
docker run -it -d -v j3:/home/soft --net=host --name j3 java
docker exec -it j3 bash
cd /home/soft
nohup java -jar renren-fast.jar &
Nginx负载均衡
Nginx是性能非常出色的反向代理服务器,最大可以支持8万/秒的并发访问
- 拉取Nginx镜像
docker pull nginx
创建n1目录
mkdir /home/n1
上传Nginx配置文件 nginx.conf 相关参数
user nginx;
worker_processes ; error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid; events {
worker_connections ;
} http {
include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on;
#tcp_nopush on; keepalive_timeout ; #gzip on; proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 5s;
proxy_send_timeout 5s;
proxy_read_timeout 5s;
proxy_buffer_size 4k;
proxy_buffers 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k; upstream tomcat {
server 192.168.63.144:6001;
server 192.168.63.144:6002;
server 192.168.63.144:6003;
}
server {
listen 6101;
server_name 192.168.63.144;
location / {
proxy_pass http://tomcat;
index index.html index.htm;
} }
}启动Nginx容器:
# 需要加上--privileged参数,使keepalived能在宿主机网卡注册虚拟IP
docker run -it -d -v /home/n1/nginx.conf:/etc/nginx/nginx.conf --net=host --name n1 --privileged nginx- 按照上述操作再创建一个nginx节点6102端口
mkdir /home/n2
# 拷贝配置文件
# 需要加上--privileged参数,使keepalived能在宿主机网卡注册虚拟IP
docker run -it -d -v /home/n2/nginx.conf:/etc/nginx/nginx.conf --net=host --name n2 --privileged nginx
Nginx双机热备
参考之前Haproxy双机热备的方案,仍然采用Keepalived和虚拟IP技术。建立两个Nginx容器并各自安装Keepalived,映射到同一宿主机虚拟IP上
下面是keepalived配置文件示例:
docker exec -it n1 bash
apt-get update
apt-get install keepalived
apt-get install vim
vim /etc/keepalived/keepalived.conf
# 配置keepalived.conf文件
service keepalived start
exit
ping 192.168.63.151 docker exec -it n2 bash
apt-get update
apt-get install keepalived
apt-get install vim
vim /etc/keepalived/keepalived.conf
# 配置keepalived.conf文件
service keepalived start
exit
ping 192.168.63.151
n1的keepalived.conf文件:
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.63.151
}
}
virtual_server 192.168.63.151 {
delay_loop
lb_algo rr
lb_kind NAT
persistence_timeout
protocol TCP
real_server 192.168.63.144 6101 {
weight
}
}
n2的keepalived.conf文件:
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.63.151
}
}
virtual_server 192.168.63.151 {
delay_loop
lb_algo rr
lb_kind NAT
persistence_timeout
protocol TCP
real_server 192.168.63.144 {
weight
}
}
然后能成功访问http://192.168.63.151:6201/renren-fast/swagger/index.html即代表成功
Docker环境下的前后端分离项目部署与运维(九)后端项目部署与负载均衡的更多相关文章
- Docker环境下的前后端分离项目部署与运维
本教程将从零开始部署一个前后端分离的开源项目,利用docker虚拟机的容器技术,采用分布式集群部署,将项目转换成为高性能.高负载.高可用的部署方案.包括了MySQL集群.Redis集群.负载均衡.双机 ...
- Docker环境下的前后端分离项目部署与运维(七)Redis高速缓存
Redis高速缓存 利用内存保存数据,读写速度远超硬盘:可以减少I/O操作,降低I/O压力. 发红包.抢红包的数据可以存在高速缓存中,加快处理速度,不需要经过数据库 淘宝首页一些优惠活动商品等热数据可 ...
- Docker环境下的前后端分离项目部署与运维(六)搭建MySQL集群
单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...
- Docker环境下的前后端分离项目部署与运维(十一)Docker Swarm技术
Docker Swarm技术 docker swarm技术(之前的docker集群都是在 一个虚拟主机上的,但是如果这个主机挂掉了over了,docker技术就是多个虚拟主机形成一个集群) Swarm ...
- Docker环境下的前后端分离项目部署与运维(十二)使用Portainer管理Docker
安装 docker hub地址:https://hub.docker.com/r/portainer/portainer/ # 每台服务器都要安装 docker pull portainer/port ...
- Docker环境下的前后端分离项目部署与运维(八)使用Docker部署RabbitMQ集群
下载RabbitMQ镜像 镜像地址RabbitMQ Docker官方认证镜像地址:https://hub.docker.com/_/rabbitmq 安装命令安装之前,切记把Docker Hub设置为 ...
- docker环境下solrcloud+zookeeper集群部署教程
前言:两个月前的16年11月份完成的配置,使用的solr6.1和zookeeper3.4,刚刚写成blog,目前版本可能有小版本的变化. 本例完成结果为:在docker环境下部署solrcloud集群 ...
- Mac+Docker环境下xdebug的配置
由于容器化的需要,前几天我本地也换成了docker环境.就研究了一下docker环境下phpstorm和xdebug的配置. http://www.mmfei.com/?p=453 这个博客给出了一个 ...
- Docker环境下的Mysql8 实现主从数据库数据同步方案
本文记录下通过MySQL Replication在Docker环境下,通过多个容器 实现数据库主从配置. MySQL Replication就不多解释了,简单说就是MySQL非常出色的一个功能,该功能 ...
随机推荐
- SFTP 定时任务下载
1.上传 winscp.exe /console /command "option batch continue" "option confirm off" & ...
- golang学习笔记 --go test
Go语言拥有一套单元测试和性能测试系统,仅需要添加很少的代码就可以快速测试一段需求代码. go test 命令,会自动读取源码目录下面名为 *_test.go 的文件,生成并运行测试用的可执行文件.输 ...
- Python关于多继承
大部分面向对象的编程语言(除了C++)都只支持单继承,而不支持多继承,为什么呢?因为多继承不仅增加编程复杂度,而且容易导致莫名其妙的错误. Python虽然语法上支持多继承,但是却不推荐使用多继承,而 ...
- msgTips 顶部弹窗
最近发现好多网站都采用顶部弹窗,并且不用用户手动去点击确定.感觉这样很方便用户,所以也找了好多大神的代码,整理一下方便以后查找 前端: @{ Layout = null; } <!DOCTYPE ...
- 看一下“Dubbo 2.7”的三大新特性
Dubbo 2.7.x 作为 Apache 的孵化版本,除了代码优化之外,还新增了许多重磅的新特性,本文将会介绍其中最典型的三个新特性: 一.异步化改造 二.三大中心改造 三.服务治理增强 一.异步支 ...
- java request.getInputStream中文乱码解决方案
请求时要指定为UTF-8,中文码码完美解决 /** * * 得到请求body字符串,一般用于content-type:application/json * */ public static Strin ...
- echarts 更改tooltip提示框CSS样式
最近 做项目,用过echarts,发现tooltip提示z-index级别很高,想更改下,看了下文档:https://www.echartsjs.com/zh/option.html#tooltip. ...
- Kubernetes概念之RC
感觉自己浪费了一年的时间,种一棵树最好的时间是十年前,还有就是现在,虽然这颗树种了又种,种了又种,这次真的要种了...... 本文通过<Kubernetes权威指南>的概念部分学习总结 ...
- SPring boot jpa 封装查询条件
最近使用spring data jpa做了两个项目,对于动态查询的不友好做了个类似hibernate的封装,记录也分享下 首先定义一个所有条件的容器,继承Specification /** * 定义一 ...
- MySQL 重要参数 innodb_flush_log_at_trx_commit 和 sync_binlog
innodb_flush_log_at_trx_commit 主要控制了innodb将log buffer中的数据写入日志文件并flush磁盘的时间点,取值分别为0.1.2三个.该参数控制重做日志写入 ...