基于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_driver"/>
    <dubbo:registry address="zookeeper://139.159.250.7:2181"/>
    <dubbo:protocol name="dubbo" port="-1"/>
    <dubbo:provider timeout="60000" retries="0"/>
    <dubbo:consumer check="false"/>
    <dubbo:annotation package="com.summer.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/export

写入:/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/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维小白

1.6/1.7 配置ip

1.2 约定 使用的系统软件 系统centos7.3系统 虚拟软件VMware workstation 10 终端puTTY+Xshell puTTY下载地址...

2396
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用ProxySQL作为MySQL的负载均衡器

ProxySQL是一个开源的MySQL代理服务器,这意味着它充当MySQL服务器和访问其数据库的应用程序之间的中介。ProxySQL可以通过在多个数据库服务器池...

1332
来自专栏Hadoop实操

如何使用HBase快照实现跨集群全量与增量数据迁移

我们常常会碰到需要迁移HBase数据的场景,当一个HBase集群运行较长时间后,往往数据量都会很大,HBase集群往往支撑的都是线上的业务,不像跑批的Hive/...

4596
来自专栏老安的博客

用zabbix和openwrt构建低成本的分布式公网监控

1071
来自专栏野路子程序员

记录一次乌云漏洞裤搭建过程

3756
来自专栏Seebug漏洞平台

D-Link系列路由器漏洞挖掘入门

作者:Sebao@知道创宇404实验室 前 言 前几天去上海参加了geekpwn,看着大神们一个个破解成功各种硬件,我只能在下面喊 6666,特别羡慕那些...

3678
来自专栏上善若水

024android初级篇之Android常用调试命令

会有从开机之后详细的dumpsys,dumpstate和logcat信息,是一份完整的日志记录。对分析用户行为,异常信息,系统状态有很大的参考作用

643
来自专栏会跳舞的机器人

Nginx+Keepalived实现高可用Web负载均衡

通过之前的一篇文章Nginx+Tomcat实现负载均衡我们已经能通过Nginx来实现Tomcat应用的负载均衡,但是单个的Nginx会存在单点隐患,如果Ngin...

941
来自专栏乐沙弥的世界

基于catalog 创建RMAN存储脚本

简言之,将rman的备份恢复命令写成脚本并保存在恢复目录内,恢复目录内的脚本可用性及通用性高于基于文件系统的脚本。

603
来自专栏Hadoop实操

如何在CDH中使用HPLSQL实现存储过程

目前版本的Hive中没有提供类似存储过程的功能,使用Hive做数据应用开发时候,一般有以下两种方法:

8067

扫码关注云+社区