基于Nginx和Zookeeper实现Dubbo的分布式服务
一、前言
公司的项目基于阿里的Dubbo微服务框架开发。为了符合相关监管部门的安全要求,公司购买了华东1、华东2两套异地服务器,一套是业务服务器,一套是灾备服务器。准备在这两套服务器上实现Dubbo的分布式服务,如下图:
这里只罗列了部分服务器作为参考说明。其中 api 是消费者服务,driver 和 order 是 提供者服务。华东1 和 华东 2 分别是两个局域网,局域网内可用内网通信。两个局域网只能通过外网通信。
二、消费者分布式服务
消费者的分布式是通过 Nginx 配置负载均衡和反向代理实现的。我们把 Nginx 部署在华东1的 api 服务器上,Nginx的配置如下:
1、负载均衡
#gzip on; upstream tomcatServer { #华东1服务器走内网 server 192.168.27.101:8680 weight=10; #华东2服务器走外网 server 139.159.257.207:8680 weight=10; }
2、反向代理
# HTTPS server # server { listen 443 ssl; server_name api.gogo.cn; ssl_certificate /usr/local/certapi/api.pem; ssl_certificate_key /usr/local/certapi/api.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; proxy_connect_timeout 500; proxy_send_timeout 500; proxy_read_timeout 500; client_max_body_size 200m; location / { # root html; # index index.html index.htm; proxy_pass http://tomcatServer/; } }
三、提供者分布式服务
Dubbo 将 zookeeper 当作注册表来实现微服务框架。zookeeper 其实已经帮我们做好了负载均衡,如上图:我们把不同服务器上 driver、order 同时注册到同一个zookeeper 中,当我们调用 driver、order 服务时,zookeeper 会在两台服务器之间权衡分配,做负载均衡。在 applicationContext.xml 做如下配置...
服务提供者:
<!-- dubbo 配置 --> <dubbo:application name="ts_provider_order"/> <dubbo:registry address="${zookeeper.host}"/> <dubbo:protocol name="dubbo" port="-1"/> <dubbo:provider timeout="60000" retries="0" threadpool="cached" threads="1000" accepts="1000"/> <dubbo:consumer check="false"/> <dubbo:annotation package="com.soft.ts"/>
服务消费者:
<!-- dubbo 配置 --> <dubbo:application name="ts_admin"/> <dubbo:registry address="${zookeeper.host}" /> <dubbo:protocol name="dubbo" port="-1" /> <dubbo:consumer check="false" timeout="60000" retries="0"/> <dubbo:annotation package="com.soft.ts"/>
开始,由于 zookeeper 安装在华东1, 我们把华东1的所有提供者服务都以内网的形式注册到 zookeeper 中,整个华东1的服务是正常运行起来了!但是在部署华东2的服务时,发现华东2在调用华东1相关服务的时候,走的竟然是华东1的内网(自然走不通,报错了)。查了相关资料,说要配置 /etc/hosts。好吧,那就配置吧:
1、服务器的主机名
2、配置 /etc/hosts
vim /etc/hosts
如上,在每台服务器配置上本机外网地址和主机名。
配置完 /etc/hosts 后,试着部署了华东2的服务,发现还是不行,调用华东1相关服务的时候走的竟然还是内网。咋办嘞?
最后,没办法,把华东1的相关服务都以外网的形式注册到 zookeeper 中。成功解决问题!
四、Linux 文件共享
实现分布式服务有个问题就是文件共享。比如我们系统中,将 api 所在的服务器作为图片服务器,那么,华东1 和 华东 2 的图片文件夹就要实现共享,只有这样,访问任意一个api服务才不会出现图片路径不存在的问题。
第一台服务器
1、安装 rpcbind 与 nfs
yum install nfs-utils.x86_64 yum install rpcbind
2、编辑export写入共享方的ip与目录
vim /etc/exports
写入:/home/wwwroot/upload 139.159.257.207(rw,sync,no_root_squash)
tips:rw 表示读写;sync 表示随时写入同步;no_root_squash 表示如果用户是root,则对该目录具有root权限。
3、启动rpcbind与nfs
service rpcbind start service nfs start
第二台服务器
1、安装nfs
yum install nfs-utils
2、执行挂载命令
mount -t nfs -o rw 139.159.250.7:/home/wwwroot/upload/ /home/wwwroot/upload/
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
工控主板物联网领域的最新应用
物联网是一个基于互联网、传统电信网等信息承载体,让所有能够被独立寻址的普通物理对象实现互联互通的网络,是新一代信息技术的重要组成部分,近年来发展迅速,具有广阔的应用前景。 物联网的应用领域非常广阔,从日常的家庭个人应用,到工业自动化应用,以至军事、城建交通。目前,物联网已经在智能交通、智能安防、智能物流、公共安全等领域初步得到实际应用。比较典型的应用包括水电行业无线远程自动抄表系统、数字城市系统、智能交通系统、危险源和家居监控系统、产品质量监管系统等。 近期,朗锐智科(www.lrist.com)为客户定制了一款miniPCIe尺寸的嵌入式工控主板模块,结构紧凑,采用miniPCIe全长卡尺寸(40mm×50mm)。基于NXP公司ARM Cortex-A7架构i.MX6UltraLite低功耗处理器设计的核心板,运行主频528MHz,核心板采用两组优质80PIN板对板连接器设计,独特的电源管理架构相比ARM9系列核心板功耗更低。核心板功能接口资源丰富,最大支持8路UART、2路以太网、2路CAN等工业总线接口。严酷的温度等级测试确保核心板在-40℃~+85℃环境中稳定运行。 5292....
- 下一篇
思科2.93亿美元收购云计算安全公司CloudLock
北京时间6月29日早间消息,思科周二表示,将收购创业公司CloudLock。该公司帮助企业客户监控及控制员工使用云计算服务的情况。 这笔交易价格为2.93亿美元现金加股票。思科同意向加入思科的CloudLock员工提供额外的激励计划。 思科目前是全球最大的网络硬件厂商。该公司将通过这笔收购去协助发展信息安全软件和服务。2013年,思科以27亿美元的价格收购了信息安全硬件和软件厂商Sourcefire,而2015年又以6.35亿美元的价格收购了OpenDNS。后者利用互联网域名服务器去拦截信息安全攻击。 CloudLock来自马萨诸塞州Waltham。近期,企业员工对Salesforce和Dropbox等云计算服务的使用正越来越频繁,而这些服务中可能存有公司的敏感信息。CloudLock开发的技术能追踪员工如何使用这些服务,并部署安全策略,例如限制员工获得及转移这些文件的方式。 CloudLock拥有130名员工,未来将成为思科信息安全集团的一部分。该业务由思科高级副总裁大卫·葛科勒(David Goeckeler)负责。他表示,思科希望独立推广每一款信息安全产品,并逐渐打造一个架构,使...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7