zoukankan      html  css  js  c++  java
  • windows下搭建Consul分布式系统和集群

    随着大数据时代的到来,分布式是解决大数据问题的一个主要手段,随着越来越多的分布式的服务,如何在分布式的系统中对这些服务做协调变成了一个很棘手的问题。我们在一个项目上注册了很多服务,在进行运维时,需要时刻关注服务的运行状态,统一管理。统一配置。今天我们就来看看如何使用C# ,利用开源对分布式服务做协调。

    在对分布式的应用做协调的时候,主要会碰到以下的应用场景:

    • 业务发现(service discovery)

    找到分布式系统中存在那些可用的服务和节点

    • 名字服务 (name service)

    通过给定的名字知道到对应的资源

    • 配置管理 (configuration management)

    如何在分布式的节点中共享配置文件,保证一致性。

    • 故障发现和故障转移 (failure detection and failover)

    当某一个节点出故障的时候,如何检测到并通知其它节点, 或者把想用的服务转移到其它的可用节点

    • 领导选举(leader election)

    如何在众多的节点中选举一个领导者,来协调所有的节点

    • 分布式的锁 (distributed exclusive lock)

    如何通过锁在分布式的服务中进行同步

    • 消息和通知服务 (message queue and notification)

    如何在分布式的服务中传递消息,以通知的形式对事件作出主动的响应

    Consul

    Consul是用Go开发的分布式服务协调管理的工具,它提供了服务发现,健康检查,Key/Value存储等功能,并且支持跨数据中心的功能。consul提供的一些关键特性:

    • service discovery:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。
    • health checking:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。
    • key/value storage:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。
    • multi-datacenter:无需复杂的配置,即可支持任意数量的区域。

    Consul基于HTTP的API可以方便的和各种语言进行绑定,C# 语言绑定https://github.com/PlayFab/consuldotnet

    Consul在Cluster上的每一个节点都运行一个Agent,这个Agent可以使用Server或者Client模式。Client负责到Server的高效通信,相对为无状态的。 Server负责包括选举领导节点,维护cluster的状态,对所有的查询做出响应,跨数据中心的通信等等。

    consul官网已经有编译好的二进制包,支持各种平台:win、linux等等,下载符合你平台的软件包:https://www.consul.io/,下载包:0.5.2_windows_386.zip。解压完毕后只有一个consul文件。

    我解压到桌面,然后用命令行进行安装,执行命令:C:UsersAdministratorDesktopconsul>consul.exe

    安装完成后,agent就可以启动了。agent可以运行在server或者client模式,每个数据中心至少有一个agent运行在server模式,一般建议是3或者5个server。部署单个server是非常不好的,因为在失败场景中出现数据丢失是不可避免的。本文涵盖的是创建一个新的数据中心,所有其他的agents都运行在client模式,这是一个非常轻量级的服务注册进程,它会运行健康监测,并将查询结果转发到服务。agent必须运行在集群中的每一个节点上。

    我们在consul目录下输入:consul agent -server -bootstrap-expect 2 -data-dir C:UsersAdministratorDesktopconsul -node=n1 -bind=10.7.19.148

    其中:-bootstrap-expect 2(表示在两个集群中选择一个leader,改为1的话,那就是默认自己为leader);

              -server (表示agent是以服务器的方式进行启动)

              -bind=10.7.19.148(绑定的是本机的地址)

              -node=n1(表示启动时设置的节点名称,这里节点名为n1)

              -data-dir C:UsersAdministratorDesktopconsul(表示consul的文件路径)

    如果去掉-server,也就是启动命令改为:consul agent  -data-dir C:UsersAdministratorDesktopconsul -node=n3 -bind=10.7.19.148  -dc=dc1  便是也client的方式进行启动。

    在日志中我们会发现它会提示没有发现 Consul servers的存在。

    WEB UI

    consul同样也支持web界面,这个UI可以用来查看所有的服务和节点,所有的健康检测和它们当前的状态,读取设置K/V系统的值。UI默认自动支持多datacenter。这些UI是静态html你不需要单独运行一个web服务器,consul agent本身可以配置一个web服务。

    下载UI组件:WEB UI

            下载完成后是一个0.5.2_WEB_UI.zip压缩文件,解压后是一个dist目录。然后添加-ui-dir参数和以-server方式进行启动agent。

    ui加载到配置命令:
    C:UsersAdministratorDesktopconsul>consul agent -server -data-dir C:UsersAdministratorDesktopconsul -node=n3 -bind=10.7.19.148 -dc=dc1 -config-file=web.json -ui-dir C:UsersAdministratorDesktopconsuldist

    其中-config-file对应的配置文件是web.json,(是以配置文件的方式注册服务)内容格式如下:

    复制代码
    {
      "log_level": "TRACE",
      "encrypt": "7TnJPB4lKtjEcCWWjN6jSA==",
      "service": {
        "name": "web4",
        "tags": ["master"],
        "address": "127.0.0.1",
        "port": 8500,
        "checks": [
          {
            "http": "http://127.0.0.1:8500/healthcheck",
            "interval": "10s"
          }
        ]
      }
    }
    复制代码

    在浏览器中输入http://127.0.0.1:8500,即可访问UI了,其中consul服务,是他自带的服务。

    搭建Consul集群:搭建集群最好使用三台以上搭建集群。但现在为了测试集群,我们只使用了两台机器搭建集群。一台是本机,另一台则是服务器。 

    1、首先远程登陆服务器:以Server模式并指定自己为leader进行启动服务器。我将consul文件拷贝到服务器的c:consul根目录下。执行命令:

    consul agent -server -bootstrap-expect 1 -data-dir C:consul -node=n1 -bind=10.8.101.6 -ui-dir C:consuldist -dc=dc1 -client=0.0.0.0 &

    2、本机启动consul,执行命令:

    consul agent -server -bootstrap-expect 2 -data-dir C:UsersAdministratorDesktopconsul -node=n4 -bind=10.7.19.148 -ui-dir C:UsersAdministratorDesktopconsuldist -dc=dc1 -client=0.0.0.0 &

    在服务器上再开启一个命令窗口,切换到consul文件路径下。执行命令:

    consul join 10.7.19.148

    成功后,再执行命令:

    consul members

    会显示两个成员,如下:

     本来是打算用两台服务器搭建集群的,但是他们join会失败,显示远程机器拒绝它,入站规则添加了也没有用。因为这是云服务器。所以可能是一些设置问题。

    集群搭建起来以后,通过http://127.0.0.1:8500/ui/,我们可以看到两个node节点,分别代表本机和服务器。

    从nuget上下载consul包,里面包含consul的所有操作。下载下来进行调试测试。里面的服务注册,服务发现,健康检查,key-value 等所有操作都有对应的方法。

    源码地址:https://github.com/PlayFab/consuldotnet/

    参考文献:http://www.cnblogs.com/ruanyifeng/p/5550102.html

                     http://www.cnblogs.com/ylsforever/p/6110481.html

    Consul中文翻译计划:http://consul.la/intro/getting-started/checks

     

  • 相关阅读:
    windows查看端口命令
    lombok
    Linux之文档与目录结构 目录的相关操作 Linux的文件系统
    VMware与Centos系统安装 和重置root密码
    shell 基本命令
    centos 安装教程 服务器配置教程 服务器中安装python 服务器中安装Django 安装MySQL 配置MySQL
    {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm
    {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证
    {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session
    老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分
  • 原文地址:https://www.cnblogs.com/jpfss/p/9925933.html
Copyright © 2011-2022 走看看