Orleans的集群构建

Orleans的集群构建

这是Orleans系列文章中的一篇.首篇文章在此

  听闻一周前,微软公布了.net core2.0,以及各种各样的其他core2.0.大家都很兴奋.微妈的诚意真是满满的.这次开源势头让我感觉到了微妈的技术实力之雄厚.我在这里祝福C#越来越好.细心的人似乎发现Orleans在github中是和net core分在一起的.Orleans的2.0何时发布呀…

现在我们面对的Orleans1.5(github上是1.6)已经是一个成熟的框架了.涉及到分布式的方方面面,我突然觉得我原来暂定的8篇文章都介绍不完全.我尽量介绍完整,至少让大家能入门,后边的修行就看大家自己的努力了.如果读者中有人能够和我分享,与我共同讨论我也是非常欢迎的.我的联系方式在第一篇文章中这里就不再复述了.

我现在利用<Orleans简单配置>文章中介绍的内容,配置一个可以分布式的silo,观察它们的行为.这里只介绍2种,其余的配置方式往读者自己研究.

我先说利用sql server数据库作为"服务自我发现"的服务

还是跟以前一样,我一步一步来.

基于SQL server的集群步骤

  1. 回顾之前的文章中在集群中客户端配置应该是这个模样:
<ClientConfiguration xmlns="urn:orleans">
  <SystemStore SystemStoreType="SqlServer"
               DeploymentId="target deployment ID"
               DataConnectionString="SQL connection string"/>
</ClientConfiguration>

这里解释一下,还记得持久化中配置文件的主体是什么吗?对了是<StorageProviders>节.这个节的内容定义了Orleans在持久化时,要利用的存储中间件的各种参数.

而我们这里要利用的是<SystemStore>,它定义了与"系统"相关的变量应该存储在哪里.我只要定义好<SystemStore>后Orleans就会自动使用服务发现.

由于Orleans使用MembershipTable 来控制silo与silo的关系变化(谁加入了集群,谁离开了集群等等)如果配置好了<SystemStore>,这个MembershipTable就会存储在数据库中.所有的silo都要以数据库中的成员关系表为标准.这个表长成这个样子

其中有一个字段就是silo的地址.因此silo可以发现其他的silo,它们可以构成一个集群,而client可以发现集群内所有的silo.从而与集群互动.

  1. 按照以上讨论,我修改了一下配置文件.如下.

此处client也需要配置,因为client也需要读取成员关系表,以便知道所有silo的地址和状态.为了使client可以利用<SystemStore>必须在client里引用OrleansSQLUtils以及System.Data.SqlClient的包,

  1. 运行一下,就会有如下截图

  2. 再运行一个.找到host.exe,我们双击后再运行一个,会看到错误,这是因为silo配置文件中指明了一些端口,这些端口已经被第一个silo占用了,所以我修改一些host的配置文件,再次运行,会得到如下截图

    我们看到先启动的silo发现了新加入的silo.读者可以再次实验silo离开后的情况.

  3. 此时我让client运行,就会得到如下截图

    可以看到client发送的消息均衡负载地再两个silo内执行.

至此一个基于sql server的简单silo集群就搭建完毕…这个集群虽然简单,但是满足所有高级的特性,扩展性和稳定性双优.是居家旅行的良好解决方案.只要有一个silo存活,这个集群就不会倒..

基于consul的集群

下文将介绍一下,另一个轻量级的集群实现.这个实现的步骤来自于官方教程.我再刚开始学习Orleans的时候,曾经使用这个步骤构建过集群.因为这个步骤是官方教程里一个最为详细的步骤,所以我就照做了.

1.    创建一个文件夹用来放置consul 比如 c:\consul.

2.    创建一个子文件夹放置数据 比如 c:\consul\data(consul不会自己创建.)

3.    下载并解压consul到c:\consul

4.    打开cmd,转至 c:\consul

5.    运行 Consul.exe agent -server -bootstrap -data-dir "C:\Consul\Data" -client=0.0.0.0

agent 指示consul新运行承载服务的代理进程,如果缺少这个参数 consul进程就尝试使用RPC来配置一个正在运行的代理进程

-server 指明这个代理进程是服务而不是client(一个consul client承载着所有的服务和数据,但是它没有权利投票,也没有可能成为consul集群领导)

-bootstrap consul集群中的第一个节点必须是有这个参数,它同时也是consul集群的领导.(单实例consule,,无所谓了)

-data-dir [path] 指明数据存储地址

-client=0.0.0.0 指明consule的服务地址

还有很多其他的consule参数.它们可以用json文件来配置,阅读consul文章来详细了解

确保consul已经运行了,请在浏览器里输入以下网址http://localhost:8500/v1/catalog/services 看看

6. 配置服务器

    
<OrleansConfiguration xmlns="urn:orleans">
    <Globals>
        <SystemStore SystemStoreType="None" DataConnectionString="http://localhost:8500" DeploymentId="MyOrleansDeployment" />
    </Globals>
    <Defaults>
        <Networking Address="localhost" Port="22222" />
        <ProxyingGateway Address="localhost" Port="30000" />
</Defaults>
</OrleansConfiguration> 

并在host项目中的program.cs中,手动增加以下内容

   
 silohost.Config.Globals.LivenessType = GlobalConfiguration.LivenessProviderType.Custom;
    silohost.Config.Globals.MembershipTableAssembly = "OrleansConsulUtils";
    silohost.Config.Globals.ReminderServiceType = GlobalConfiguration.ReminderServiceProviderType.Disabled;
    silohost.InitializeOrleansSilo();

官方解释说:    Consul的xml配置文件,Orleans在解析的时候有点小bug所以要在代码中控制一下.我在搭配的时候就采用了这个,但是我并没有验证此bug是否依然存在(官方教程是1.2的,我写的时候已经是1.5了).

好了这样一个基于consul的集群就构建好了.

经过以上的文章介绍,Orleans主要方面都或多或少的涉及到了,我写这系列文章的目的也快要达到了.除去一个方面,那就是eventSourcing.由于EventSourcinig是个复杂的事情,我需要组织语言,而且最近家里私事很多.也许下一篇文章放出的时候会很晚.因为接下来我没有太多时间.

时间: 2024-08-05 17:00:50

Orleans的集群构建的相关文章

nginx+keepalived的高可用负载均衡集群构建

实验架构图: 实验环境 Nginx和Keepalived原理介绍 参考博客:http://467754239.blog.51cto.com/4878013/1541421 1.nginx Nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发, 从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都 由主进程发出,Slave(wor

corosync+pacemaker+crmsh+DRBD实现数据库服务器高可用集群构建

  DRBD (DistributedReplicated Block Device) 是 Linux 平台上的分散式储存系统.其中包含了核心模组,数个使用者空间管理程式及 shell scripts,通常用于高可用性(high availability, HA)丛集.DRBD 类似磁盘阵列的RAID 1(镜像),只不过 RAID 1 是在同一台电脑内,而 DRBD 是透过网络. DRBD 是以 GPL2 授权散布的自由软件. 实验架构图: 一.高可用集群构建的前提条件 1.主机名互相解析,实现

利用heartbeat的ldirectord实现ipvs的高可用集群构建

集群架构拓扑图: 网络规划: 两台LVS server:(两台LVS也可以为用户提供错误页面) node1:172.16.31.10 node2:172.16.31.11 VIP:172.16.31.180 ipvs规则内包含2台Real Server:(后面的RS指的就是后端的web服务器) rs1:172.16.31.13 rs2:172.16.31.14 我们还需要错误页面提供者:我们选择LVS作为sorry server,所有的real server不可用时就指向这个sorry serv

redis集群构建过程 linux windows

redis集群的构建过程 本人初次构建redis集群时,通过查阅资料整理的文档 目录 Linux Redis cluster集群方案... 1 Windows redis集群方案... 5 Linux Redis cluster集群方案 1 安装: 下载地址:http://download.redis.io/releases/ 下载版本:redis3.0.7.tar.gz [[email protected] soft]$ tar -zxzf redis-3.0.7.tar.gz [[email

hadoop零基础系列之一:虚拟机下的Linux集群构建

经过了近两年的hadoop学习和使用,有必要把hadoop的学习进行一个总结,最好的方式就是以博客的方式来总结,既重新梳理以前的学习也可以和同行沟通交流,从今天开始将陆续推出hadoop零基础系列的文章, 当然总结过程中会参考相关方面的资料书,有些例子会直接来源与网络和书籍,我会在文中列出引用 考虑到初学者都是在单机的环境进行学习,所以我们采用虚拟机的方式来构建Linux集群,本篇我们先把Linux集群给构建起来,主机系统本人采用的系统是win7 旗舰版 1.虚拟机软件VMware 采用的VMw

spark集群构建

一.spark启动有standalong.yarn.cluster,具体的他们之间的区别这里不在赘述,请参考官网.本文采用的是standalong模式进行搭建及将接使用. 1.首先去官网下载需要的spark版本: http://spark.apache.org/downloads.html 本例使用的是spark-2.2.0-bin-hadoop2.7,hadoop使用的是2.7版本,spark是需要scala环境的,可以下载编译好的spark,这样就不需要自己在安装了. 同时使用了hive仓库

Docker容器集群构建!!!

项目背景: 我们在使用docker给我们带来的便利的同时,有时候我们需要搭建docker集群,这个时候,下面讲解的内容就显得弥足珍贵了. 实验环境: vmware workstation 11 centos7.0的系统下 服务器:ip:192.168.0.60 SecureCRT (ssh远程连接软件) 软件介绍: 下面是两篇我对docker的一些理解和认识. http://9399369.blog.51cto.com/9389369/1758576 <docker简明教程一> http://

NATS_11:集群构建与验证

NATS服务集群化 NATS支持每一个服务按照集群模式方式运行.你可以将这些服务组织在一起形成一个集群来提高服务器的容量的消息传递系统,并可以提升整个系统的弹性话和高可用性. 注意,NATS集群服务器转发是通过一个跳跃来完成的.这意味着每个gnatsd当从一个客户端接收到消息之后通过路由信息会立即转发给对应注册的gnatsd实例.接收到的消息通过一个路由才会分发给本地的客户.因此一个完整的集群网,或完全图,建议NATS以功能作为目的方式来形象的描述整个过程. 概览 除了可以监听一个客户端应用端口

Hadoop2.7.4完全分布式集群构建实战总结

配置Linux环境配置好各虚拟机的网络(采用NAT联网模式)通过Linux图形界面进行修改(桌面版本Centos):进入Linux图形界面 -> 右键点击右上方的两个小电脑 -> 点击Edit connections-> 选中当前网络System eth0 -> 点击edit按钮 -> 选择IPv4 -> method选择为manual ->点击add按钮 -> 添加IP:192.168.1.101 子网掩码:255.255.255.0 网关:192.168