zheng 框架解析 (二):从环境搭建到部署实战
zheng 框架解析 (二):从环境搭建到部署实战
dong4j看到群里有朋友出现了下面的错误,我也出现了
1 | com.alibaba.dubbo.rpc.RpcException: Forbid consumer 192.168.1.89 access service com.alibaba.dubbo.monitor.MonitorService from registry zkserver:2181 use dubbo version 2.5.3, Please check registry access list (whitelist/blacklist). |
在出现上面的错误时,都会打印下面一段信息
1 | INFO [com.alibaba.dubbo.monitor.dubbo.DubboMonitor] - [DUBBO] Send statistics to monitor zookeeper://zkserver:2181/com.alibaba.dubbo.monitor.MonitorService?dubbo=2.5.3&interface=com.alibaba.dubbo.monitor.MonitorService&pid=43821×tamp=1504769453531, dubbo version: 2.5.3, current host: 192.168.1.89 |
消费者向提供者发送统计数据时,由于注册中心里面找不到那个提供者的信息,抛出了最上面的错误.
MonitorService
, 一看就知道是跟 dubbo monitor 有关.
查看 dubb-admin
, 也可以看到,MonitorService
没有提供者
最后查看 readme.md, 看见 zheng 使用了 Dubbo-monitor
dubbo-monitor
跟 dubbo-admin
一样,需要我们自己部属
dubbo-monitor 部属
这里使用 韩都衣舍 的 Dubbo Monitor for Relational Database
不为别的,就因为 dubbo-monitor-simple
太丑了 😂
官方的 readme.md 说得已经很清楚了,照着来就是了
部属成功后 访问 http://127.0.0.1:9527/dubbo-monitor/
最后的效果如下:
然后就不会报错了
红色部分不未部署之前,后面可以看到,发送统计数据后没有报错了
另一种解决方案
在 dubbo.xml 中配置了 monitor 才会发送统计数据
所以删除所有 <dubbo:monitor protocol="registry"/>
不使用 monitor 即可
dubbo-admin 部署
和 dubbo-monitor 一样 😄
项目部署
本人工作中使用的 Maven 环境跟 zheng 不一样,为了方便,这里写了个脚本,可以切换不同的 Maven 配置
1 | change(){ |
环境搭建
这里使用 Vagrant 来搭建环境,一是不想把自己本地的环境搞乱,二是方便,环境搭建好之后,打包一个 package, 到哪儿都能用.
Vagrant 里面的依赖都已经安装好了,配置一下就 ok 了.
Vagrant 的 ip 地址为 2.2.2.2
zheng 是需要修改 hosts 的,很多朋友没有看完文档就开始搞,导致项目运行不起来.
Redis
允许远程访问
这里为了方便查看 redis , 这里设置为允许远程访问plaintext1
2
3# 修改以下配置:
# 1. 注释 bind 127.0.0.1
# 2. protected-mode 由 yes --> no修改密码
我这里修改了 Redis 的密码,默认是为空的plaintext1
requirepass 123456
Redis 远程连接成功
Nginx
来一份简单实用的 nginx.conf 配置
1 | worker_processes 1; |
1 | # 修改了 nginx.conf 后, 重新加载配置文件 |
IDEA 配置服务器,直接上传文件
让你体会一下什么是 沉浸式 IDE
配置 Deployment
配置服务器
配置本地目录与服务器目录映射关系
完成配置
上传本地文件到服务器
- 哦了
修改了 html, upload, 刷新,so easy
Zookeeper
Zookeeper 使用默认配置就可以了,三种配置方式
- 单机
- 伪集群
- 真集群
这里就不说了,我使用单机配置,简单
1 | # 心跳检测毫秒数 |
下个插件 zookeeper, 能看到 zookeeper 的节点信息
ActiveMQ
默认配置
略… 😂😂
Tomcat
这里只要一台服务器,所有就搞个单机多实例的配置,这里要修改 Tomcat 配置,
让一台服务器上跑 2 个 Tomcat, 不为别的,以为我就一台虚拟机,意思一下就可以了 😂😂
将解压后的 Tomcat 复制一份
修改 每个 tomcat 实例中 server.xml 中的端口
1 | <?xml version="1.0" encoding="UTF-8"?> |
2 个 server.xml 只要不一样就行了,只要确保修改的端口没有被其他程序占用就可以了.
然后一个一个启动吧,如果嫌麻烦,也可以写脚本一键启动
一个 1111, 另一个 2222
一般都是先把 war 上传到临时目录下,然后再移动到 webapp 下,不要在 tomcat 正在运行的时候把 war 直接上传到 webapp 下,因为一旦上传开始,webapp
下就会有出现 war, 然后 tomcat 就开始解压了,但是这个 war 并不完整,会出错的
也可以使用上面的方式,同步本地文件到服务器,只限于开发,生产环境你不一定有账号,二是谁让你没事一直连着生产服务器的?
启动依赖软件
写一个简单的脚本,一键启动所有依赖
1 |
|
tomcat 就手动启动吧,敲敲命名也是好的
😂😂
打包
先修改配置文件
由于 Vagrant 里面没有安装 MySQL, 我就连接本地的了,一般数据库都是单独的服务器,正好模拟一下
2017-09-14 11:59 dong4j 更新
这里吐槽一下,很多配置是写死的,比如说 dubbo 里面的 zookeeper 注册地址,没有写到配置文件中去,
所以这里还是改回使用 hosts 的方式.
只修改了 mysql 的地址,其他的按照原文档修改 hosts
使用 Maven 打包
1 | mvn clean package -Pprod |
上传
将 4 个包上传到服务器
1 | scp zheng-cms-rpc-service-assembly.tar.gz root@2.2.2.2:/zheng/upload/ |
1 | # 内容管理系统, 通过 ZhengUpmsRpcServiceApplication.main 方法启动服务提供者 |
启动
提供者
先解压 2 个包
1 | zheng-cms-rpc-service-assembly.tar.gz |
1 | tar -zxvf *.tar.gz |
分别启动 zheng-upms-rpc-service
和 zheng-cms-rpc-service
使用对应目录下的 bin/start.sh
脚本
消费者
删除 tomcat1 [2]/webapps/ROOT 里的所有文件,将 war 包分别拷入到 tomcat1 和 tomcat2 下的 webapps/ROOT,
然后使用 unzip 解压
1 | unzip *war |
如果直接放入 webapps 下,启动 tomcat 后会自动解压 war 包,但是请求应用时,就必须通过 http://ip:port/ 应用名 / 资源路径
的方式访问
这里直接解压到 ROOT 目录下,就不需要知道应用名.
完成
由于是虚拟机,地址为 2.2.2.2, 所以需要修改我 本地 的 hosts, 把 域名指向 2.2.2.2
1 | 2.2.2.2 ui.zhangshuzheng.cn |
系统管理
组织管理
权限管理
Redis
Zookeeper
ActiveMQ
遇到的问题
hosts
本来是想不修改 hosts 来部署 zheng 的,但是大概看了下代码,发现很多域名和配置都是写死的,还需要修改数据库,改动会很大,就没有心情修改了.
但是 hosts 还是需要修改一下才能在服务器上使用.
修改 hosts , 将域名指向服务器 ip
这部分是在本地修改plaintext1
2
3
4
5
6
7
8
9
102.2.2.2 ui.zhangshuzheng.cn
2.2.2.2 upms.zhangshuzheng.cn
2.2.2.2 cms.zhangshuzheng.cn
2.2.2.2 pay.zhangshuzheng.cn
2.2.2.2 ucenter.zhangshuzheng.cn
2.2.2.2 wechat.zhangshuzheng.cn
2.2.2.2 api.zhangshuzheng.cn
2.2.2.2 oss.zhangshuzheng.cn
2.2.2.2 config.zhangshuzheng.cn将服务器依赖软件的 ip 指向服务器
这部份是修改服务器的 hosts
zookeeper, redis, activemq 都安装在 2.2.2.2 这台服务器上的
plaintext1
2
3
4
127.0.0.1 zkserver
127.0.0.1 rdserver
# 127.0.0.1 dbserver mysql 的 地址修改为了我本地的 mysql 局域网地址是 192.168.31.28
127.0.0.1 mqserver
dubbo-monitor
韩都衣舍 的 dubbo-monitor 编译后不能直接用于 dubbo 2.5.3
需要修改 pom.xml
1 | # 由 2.8.4 修改为 2.5.3 |