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:\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的存在。
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:\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": ,
"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 -data-dir C:\consul -node=n1 -bind=10.8.101.6 -ui-dir C:\consul\dist -dc=dc1 -client=0.0.0.0 &
2、本机启动consul,执行命令:
consul agent -server -bootstrap-expect -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
windows下搭建Consul分布式系统和集群的更多相关文章
- 基于 Docker 搭建 Consul 多数据中心集群
本文介绍了在 Windows 10 上基于 Docker 搭建 Consul 多数据中心集群的步骤,包括 Consul 镜像的拉取和容器的创建,每个数据中心对应服务端节点和客户节点的创建,节点之间相互 ...
- windows下apache httpd2.4.26集群完整搭建例子:下载、启动、tomcat集群例子
第一部分——下载 1.1: 百度搜索apache httpd关键字,第一个链接既是官方下载地址.如果这一步不会,此篇文章不适合你阅读,请自行停止. 1.2:进入官网http://httpd.apach ...
- 【MongoDB】在windows平台下搭建mongodb的分片集群(二)
在上一片博客中我们讲了Mongodb数据库中分片集群的主要原理. 在本篇博客中我们主要讲描写叙述分片集群的搭建过程.配置分片集群主要有两个步骤.第一启动全部须要的mongod和mongos进程. 第二 ...
- centos7 下搭建hadoop2.9 分布式集群
首先说明,本文记录的是博主搭建的3节点的完全分布式hadoop集群的过程,环境是centos 7,1个nameNode,2个dataNode,如下: 1.首先,创建好3个Centos7的虚拟机,具体的 ...
- windows下eclipse远程连接hadoop集群开发mapreduce
转载请注明出处,谢谢 2017-10-22 17:14:09 之前都是用python开发maprduce程序的,今天试了在windows下通过eclipse java开发,在开发前先搭建开发环境.在 ...
- kubernetes实战之consul篇及consul在windows下搭建consul简单测试环境
consul是一款服务发现中间件,1.12版本后增加servicemesh功能.consul是分布式的,可扩展的,高可用的根据官方文档介绍,目前已知最大的consul集群有5000个节点,consul ...
- 在CentOS7下搭建Hadoop2.9.0集群
系统环境:CentOS 7 JDK版本:jdk-8u191-linux-x64 MYSQL版本:5.7.26 Hadoop版本:2.9.0 Hive版本:2.3.4 Host Name Ip User ...
- windows下使用nginx配置tomcat集群
转自:https://blog.csdn.net/csdn15698845876/article/details/80658599
- Windows下 搭建redis集群
Windows下搭建redis集群教程 一,redis集群介绍 Redis cluster(redis集群)是在版本3.0后才支持的架构,和其他集群一样,都是为了解决单台服务器不够用的情况,也防止了主 ...
随机推荐
- discuz 数据库文件密码修改
网站系统需要修改的位置有两处 Discuz 和 UC-center ①路径:/wwwroot/config/config_global.php 这个根据你网站安装的路径而定. 打开 config_gl ...
- Spring mvc 4系列教程(三)—— Spring4.X的新特性
1.Spring4.0的新特性 从2004年Spring的1.0发布后,后面又发布了很多重要的版本:Spring2.0提供了XML命令空间和AspectJ的支持:Spring2.5提出了注解驱动(an ...
- tensorflow 根据节点名称获取节点
ckpt_file = os.path.join(self.args.bert_dir, 'model.ckpt-6123') # 获取图的reader reader = self.tf_instan ...
- linux解决病毒系列之一,删除十字符libudev.so病毒文件
前两天被服务器商通知服务器带宽流量增加,我想了想我们服务走的内网,没有什么大的带宽占用,于是我马上登录服务器. 用top命令查看运行情况,我擦,有一个进程吃了很高的cup,于是我赶紧用kill -9 ...
- 基数估算HyperLogLog
HyperLogLog HyperLogLog 可以接受多个元素作为输入,并给出输入元素的基数估算值: • 基数:集合中不同元素的数量.比如 {'apple', 'banana', 'cherry', ...
- Python 工匠:编写条件分支代码的技巧
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂优文发表于云+社区专栏 作者:朱雷 | 腾讯IEG高级工程师 『Python 工匠』是什么? 我一直觉得编程某种意义是一门『手艺』 ...
- MySQL中临时表的基本创建与使用教程(create temporary table )
当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后在这些表运行查询. ...
- 软件架构设计学习总结(15):远程通信(RPC,Webservice,RMI,JMS、EJB、JNDI的区别)对比
总结这些概念都是易混淆,最基本概念定义复习和深入理解,同时也是架构师必备课程 RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请 ...
- windows环境下搭建Java开发环境(三)——Maven环境配置使用 (转)
1. 安装配置Maven: 1.1 从Apache网站 http://maven.apache.org/ 下载并且解压缩安装Apache Maven. Maven下载地址: http://maven. ...
- (转)注解用法详解—@@SuppressWarnings
一.前言 编码时我们总会发现如下变量未被使用的警告提示: 上述代码编译通过且可以运行,但每行前面的“感叹号”就严重阻碍了我们判断该行是否设置的断点了.这时我们可以在方法前添加 @SuppressWar ...