随着大数据时代的到来,分布式是解决大数据问题的一个主要手段,随着愈来愈多的分布式的服务,如何在分布式的系统中对这些服务作协调变成了一个很棘手的问题。咱们在一个项目上注册了不少服务,在进行运维时,须要时刻关注服务的运行状态,统一管理。统一配置。今天咱们就来看看如何使用C# ,利用开源对分布式服务作协调。html
在对分布式的应用作协调的时候,主要会碰到如下的应用场景:node
找到分布式系统中存在那些可用的服务和节点linux
经过给定的名字知道到对应的资源git
如何在分布式的节点中共享配置文件,保证一致性。github
当某一个节点出故障的时候,如何检测到并通知其它节点, 或者把想用的服务转移到其它的可用节点web
如何在众多的节点中选举一个领导者,来协调全部的节点json
如何经过锁在分布式的服务中进行同步bootstrap
如何在分布式的服务中传递消息,以通知的形式对事件做出主动的响应windows
Consul浏览器
Consul是用Go开发的分布式服务协调管理的工具,它提供了服务发现,健康检查,Key/Value存储等功能,而且支持跨数据中心的功能。consul提供的一些关键特性:
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:\Users\Administrator\Desktop\consul>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:\Users\Administrator\Desktop\consul -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:\Users\Administrator\Desktop\consul(表示consul的文件路径)
若是去掉-server,也就是启动命令改成:consul agent -data-dir C:\Users\Administrator\Desktop\consul -node=n3 -bind=10.7.19.148 -dc=dc1 即是也client的方式进行启动。
在日志中咱们会发现它会提示没有发现 Consul servers的存在。
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:\Users\Administrator\Desktop\consul>consul agent -server -data-dir C:\Users\Administrator\Desktop\consul -node=n3 -bind=10.7.19.148 -dc=dc1 -config-file=web.json -ui-dir C:\Users\Administrator\Desktop\consul\dist
其中-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集群:搭建集群最好使用三台以上搭建集群。但如今为了测试集群,咱们只使用了两台机器搭建集群。一台是本机,另外一台则是服务器。
一、首先远程登录服务器:以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:\consul\dist -dc=dc1 -client=0.0.0.0 &
二、本机启动consul,执行命令:
consul agent -server -bootstrap-expect 2 -data-dir C:\Users\Administrator\Desktop\consul -node=n4 -bind=10.7.19.148 -ui-dir C:\Users\Administrator\Desktop\consul\dist -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