ICE系列 - Docker方式部署


分布式高端架构系列 Leader-us@Mycat Zeroc ICE ——微服务架构之王 一:Docker方式部署 虚机准备 如下命令获取到虚机的IP地址,并且root/11111用SSH客户端连接 百度盘共享的Centos7虚机,导入Vmware Player或者Workstation 百度盘 链接:http://pan.baidu.com/s/1kVvY79H 密码:sovu 虚机所在文件夹:leader-ice-vm,直接在Vmware workstation/player打开即可,网络为NAT方式,自动获取IP地址 1:Docker方式部署的好处 • 快速安装 • 易于Demo • 运维方便 2:Ice环境说明(一) 假设在主机上(docker安装所在的主机或者虚机),主机的名字为myvmserver ,我们规划如下的Ice目录 /opt/myapp/ icegridreg.conf icenode1.conf icenode2.conf dist(存放程序的Jar包与gridxml文件) regdata(存放Register数据的目录以及日志) node1( 存放node1的数据文件以及日志) IceGrid.InstanceName=IceGrid IceGrid.Registry.Client.Endpoints=tcp -p 4061 -h 0.0.0.0 IceGrid.Registry.Server.Endpoints=tcp -h 0.0.0.0 IceGrid.Registry.Internal.Endpoints=tcp -h 0.0.0.0 IceGrid.Registry.PermissionsVerifier=IceGrid/NullPermissionsVerifier IceGrid.Registry.AdminPermissionsVerifier=IceGrid/NullPermissionsVerifier Ice.ProgramName=IceGrid Master IceGrid.Registry.DynamicRegistration=1 IceGrid.Registry.Trace.Node=1 IceGrid.Registry.Trace.Replica=1 #Ice.UseSyslog=1 Ice.LogFile=/var/lib/ice/icegrid/ice-reg.log icegridreg.conf Ice.Default.Locator=IceGrid/Locator:tcp -h myvmserver -p 4061 IceGrid.Node.Name=node1 IceGrid.Node.Endpoints=tcp -h 0.0.0.0 IceGrid.Node.Output=/var/lib/ice/icegrid/out.log IceGrid.Node.RedirectErrToOut=1 IceGrid.Node.Trace.Replica=2 Ice.StdErr=/var/lib/ice/icegrid/node.stderr.log Ice.StdOut=/var/lib/ice/icegrid/node.stdout.log icenode1.conf 2:Ice环境说明(二) CLASSPATH=/dist/jars/* 打包的程序 3:官方的镜像和用法(一) icegridregistry Data volumeConf file 4:官方的镜像和用法(二) icegridregistry docker run -d --name myicereg -net=host -v /opt/myapp/icegridreg.conf:/etc/icegridregistry.conf:ro -v /opt/myapp/regdata:/var/lib/ice/icegrid zeroc/icegridregistry docker rm myicereg more /opt/myapp/regdata/ice-reg.log 5:官方的镜像和用法(三) C:\ZeroC\Ice-3.6.2\bin\icegridadmin -u test -p test --Ice.Default.Locator="IceGrid/Locator:tcp -h 192.168.18.129 -p 4061" icenode1启动(采用Leader us打包的镜像,包括JDK) docker run -d --name myicenode1 --net=host -v /opt/myapp/icenode1.conf:/etc/icegridnode.conf -v /opt/myapp/node1:/var/lib/ice/icegrid mycat/leader-icenode 验证Node已经注册到Grid里了 6:发布我们的程序 C:\ZeroC\Ice-3.6.2\bin\icegridadmin -u test -p test --Ice.Default.Locator="IceGrid/Locator:tcp -h 192.168.18.129 -p 4061" right (c) 2003-2016 ZeroC, Inc. >>> application add C:\project\Ice_Hellow\grid-docker.xml >>>server list >>> server start MyHelloServer1 root@127:~# tail -f /var/lib/ice/icegrid/node.stderr.log !! 7/4/16 06:35:37:704 MyHelloServer1: error: main: ServiceManager: class com.my.demo.MyHelloBoxService not found IceBox.FailureException reason = "ServiceManager: class com.my.demo.MyHelloBoxService not found" at IceBox.ServiceManagerI.start(ServiceManagerI.java:575) at IceBox.ServiceManagerI.run(ServiceManagerI.java:405) at IceBox.Server.run(Server.java:77) at Ice.Application.doMain(Application.java:214) at Ice.Application.main(Application.java:194) at IceBox.Server.main(Server.java:32) tail -f /var/lib/ice/icegrid/node.stderr.log tail -f /var/lib/ice/icegrid/node.stdout.log String reg = "--Ice.Default.Locator=IceGrid/Locator:tcp -h 192.168.18.129 -p 4061"; 7:发布应用 >>> application add C:\project\Ice_Hellow\grid.xml >>> server list MyHelloServer1 MyHelloServer2 >>> service list MyHelloServer1 MyService >>> adapter list MyService1 MyService2 MyServiceRep >>> adapter endpoints MyServiceRep MyService1: MyService2: >>> adapter endpoints MyService1 >>> server state MyHelloServer1 inactive (enabled) >>> server start MyHelloServer1 error: the server didn't start successfully: The server activation timed out. >>> server state MyHelloServer1 active (pid = 10184, enabled) 8:Leader提供的Ice虚机(一) 虚机为mini-centos-7 查看IP地址:ip a 用ssh客户端连接虚机,用户名root,密码111111 8:Leader提供的Ice虚机(二) /opt/myapp目录下的Ice Demo程序的相关部署文件 • Ice Registry的目录是/opt/myapp/regdata下 • Ice Node1的目录是在/opt/myapp/node1下 /root/ice-tools目录下包括如下命令启动Ice容器: ./start-node1.sh 启动IceNode1 ,容器名为myicenod1 ./start-reg.sh 启动Registry,容器名为myicereg 如果修改上述容器的定义,则需要先删除相应的docker 容器,并且修改上述启动命令,然后重启 重启容器为 docker restart 容器名 8:Leader提供的Ice虚机(三) • Ice进程的容器全部是-net=host方式启动,意味着采用了虚机本身的 IP地址,性能方面与非容器的没什么差距, • Ice进程本地存储的文件都通过Volume映射到主机上了,对应的目 录在/opt/myapp的相关目录下 • 可以在一个虚机上启动多个Node容器,只要在/opt/myapp下增加 此Node的配置文件,数据存储目录即可 • 此虚机中Ice容器的用法,可以用于生产环境 二:IcePatch+Grid 1:Server Patch的运行流程 将要部署的文件上传到icepatch2server 服务所在的程序发布目录里里 通过icepatch2calc在patch2/server生成文件校验码 启动IcePatch2Server服务 在每个节点上启动IcePatch2Client服务, 当IcePatch2Client停止后,程序文件被同步到客户端节点上 2:IcePatch的容器环境 icepatch2server /myapp-respository /myapp-respository Node1 icepatch2client /dist Node2 TCP传输 Node3 Node4 …… /dist 3:IcePatch Server端 docker stop myicenode1 docker run -d --name testnode1 --net=host -v /myapp-respository:/myapp-respository -v /opt/myapp/icenode1.conf:/etc/icegridnode.conf -v /opt/myapp/node1:/var/lib/ice/icegrid mycat/leader-icenode:1.0 root@127:~# cd /myapp-respository/ root@127:/myapp-respository# mkdir myjars root@127:/myapp-respository# cd myjars root@127:/myapp-respository/myjars# cat 1.txt root@127:/myapp-respository/myjars# ls 1.txt >>> application remove MyApp >>> application add C:\project\Ice_Hellow\grid-patch.xml >>> server list MyApp.IcePatch2.node1 MyApp.IcePatch2.node2 MyApp.IcePatch2.server >>> server start MyApp.IcePatch2.server error: the server didn't start successfully: The server terminated unexpectedly with exit code 1. 4:IcePatch Client端 root@127:/myapp-respository/myjars# icepatch2calc /myapp-respository root@127:/myapp-respository/myjars# ls /myapp-respository/ IcePatch2.sum myjars docker exec -it testnode1 bash 进入到node1容器中执行icepatch2calc命令 server start MyApp.IcePatch2.server 控制台重新启动IcePatch2.server docker run -d --name testnode2 --net=host -v /dist:/dist -v /opt/myapp/icenode2.conf:/etc/icegridnode.conf -v /opt/myapp/node2:/var/lib/ice/icegrid mycat/leader-icenode:1.0 启动客户机节点,模拟客户端Node 5:IcePatch结果 >>> server list MyApp.IcePatch2.node1 MyApp.IcePatch2.node2 MyApp.IcePatch2.server >>> server start MyApp.IcePatch2.node2 >>>server start MyApp.IcePatch2.node2 目前做法,在node2节点上容器里执行下面命令 chown -hR ice /dist ll /dist docker exec -it testnode2 bash 6:IcePatch存在的问题 每个客户机节点需要去拉文件 文件同步以后需要手动重启服务 HTTP ServerURLClassLoader Java的建议方案 • 定时检测文件变化 •(开发模式下)自动重新装载Servant • 图形界面通知哪些节点自动更新 谢谢观看 Leader us高端Java培训报名群:434568702
还剩21页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 2 人已下载

下载pdf

pdf贡献者

100200

贡献于2016-07-17

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!