前面我们说了在单机模式下和K8S集群下的Dapr实战,这次我们来看看如何在不使用K8S的情况下,在一个传统的虚拟机集群里来部署Dapr。

1.环境准备

我们准备两台centos7虚拟机

Dapr1:192.168.43.131

Dapr2:192.168.43.132

2.Dapr CLI安装

分别在Dapr1和Dapr2两台虚机上安装Dapr CLI

方式1 wget命令安装

wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash

方式2 二进制方式手动安装
从https://github.com/dapr/cli/releases下载Dapr脚手架,并解压后放入/usr/local/bin目录

tar -xzvf dapr_linux_amd64.tar.gz

mv dapr /usr/local/bin

3.Dapr初始化

在Dapr1和Dapr2两台虚机上初始化,不依赖Docker的情况下课通过指定--slim选项来启动

dapr init --slim

初始化好之后查看~/.dapr文件夹下的文件夹与文件,其中bin文件夹存放着daprd,dashboard,placement三个可执行文件

[root@localhost ~]# ll ~/.dapr
总用量 4
drwxrwxrwx 3 root root 64 10月 15 10:37 bin
drwxrwxrwx 2 root root 29 10月 15 15:33 components
-rw-r--r-- 1 root root 224 10月 15 18:34 config.yaml
[root@localhost ~]# ll ~/.dapr/bin/
总用量 135632
-rwxrwxrwx 1 root root 94117888 10月 15 11:08 daprd
-rwxrwxrwx 1 root root 30007296 10月 15 11:08 dashboard
-rwxrwxrwx 1 root root 14761984 10月 15 11:07 placement
drwxr-xr-x 3 root root 18 10月 15 11:08 web

4.部署项目

我们仍然采用之前的FrontEnd和BackEnd项目,在Dapr1与Dapr2两台机器上分别部署BackEnd,使其实现负载

发布FrontEnd和BackEnd,选择完全发布模式,这样我们不需要安装dotnet core运行时即可直接运行FrontEnd与BackeEnd,并选择linux-x64目标运行时

发布完成后,将BackEnd上传到Dapr1和Dapr2两台机器动;将FrontEnd上传到Dapr2

5.运行BackEnd和FrontEnd

Dapr1上和Dapr2上启动BackEnd

chmod 777 /usr/local/src/backend/BackEnd
dapr run --dapr-http-port 3511 --app-port 5000 --app-id backend /usr/local/src/backend/BackEnd

Dapr2上启动FrontEnd

chmod 777 /usr/local/src/frontend/FrontEnd
dapr run --dapr-http-port 3501 --app-port 5001 --app-id frontend /usr/local/src/frontend/FrontEnd

6.调用FrontEnd接口Dapr/ip验证

发现每次调用获取的ip不一致,已经通过mDNS实现负载

7.自定义组件

我们在Dapr1和Dapr2两台机器上的~/.dapr/components文件夹中分别新建文件statestore.yaml

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: 192.168.43.102:6379
- name: redisPassword
value: "123456"
- name: actorStateStore
value: "true"

重新启动FrontEnd,调用api/State接口,发现组件设置成功

8.Actors使用

因为我们初始化时指定了--slim选项,这种模式下placement需要我们手动启动,我们启动FrontEnd中的~/.dapr/bin/placement

[root@localhost ~]# ~/.dapr/bin/placement
INFO[0000] starting Dapr Placement Service -- version 1.4.3 -- commit a8ee30180e1183e2a2e4d00c283448af6d73d0d0 instance=localhost.localdomain scope=dapr.placement type=log ver=unknown
INFO[0000] log level set to: info instance=localhost.localdomain scope=dapr.placement type=log ver=1.4.3
INFO[0000] metrics server started on :9090/ instance=localhost.localdomain scope=dapr.metrics type=log ver=1.4.3
INFO[0000] Raft server is starting on 127.0.0.1:8201... instance=localhost.localdomain scope=dapr.placement.raft type=log ver=1.4.3
INFO[0000] placement service started on port 50005 instance=localhost.localdomain scope=dapr.placement type=log ver=1.4.3
INFO[0000] Healthz server is listening on :8080 instance=localhost.localdomain scope=dapr.placement type=log ver=1.4.3
INFO[0001] cluster leadership acquired instance=localhost.localdomain scope=dapr.placement type=log ver=1.4.3
INFO[0001] leader is established. instance=localhost.localdomain scope=dapr.placement type=log ver=1.4.3
INFO[0004] Start disseminating tables. memberUpdateCount: 1, streams: 1, targets: 1, table generation: 1 instance=localhost.localdomain scope=dapr.placement type=log ver=1.4.3
INFO[0004] Completed dissemination. memberUpdateCount: 1, streams: 1, targets: 1, table generation: 1 instance=localhost.localdomain scope=dapr.placement type=log ver=1.4.3

重新启动FrontEnd与BackEnd,并调用api/ActorsClient/123,Actors环境启动成功

9.Consul名字解析组件

前面的负载我们使用了mDNS,官方还为我们提供了Consul名字解析组件,我们新建一个虚拟机Consul(192.168.43.133)来安装Consul

1.下载
wget https://releases.hashicorp.com/consul/1.3.0/consul_1.3.0_linux_amd64.zip
2.解压
unzip consul_1.3.0_linux_amd64.zip
3.拷贝到/usr/local/bin
mv consul /usr/local/bin
4.验证
consul
5.启动
consul agent -dev -ui -node=consul-dev -client=192.168.43.133
6.访问192.168.43.133:8500

下面修改Dapr1和Dapr2机器上的~/.dapr/config.yaml配置,让其使用Consul来解析名字

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: daprConfig
spec:
nameResolution:
component:
"consul"
configuration:
client:
address: "192.168.43.133:8500"
selfRegister: true

重启FrontEnd与BackEnd并调用api/Dapr/ip接口,发现只能调用到后启动的BackEnd,无法实现负载

针对这个问题我像dapr官方提了issue,静等回复

https://github.com/dapr/components-contrib/issues/1199

Dapr + .NET Core实战(十四)虚拟机集群部署 mDNS + Consul的更多相关文章

  1. Dapr 虚拟机集群部署 (非K8S)

    从2021-10-08号发布4小时Dapr + .NET 5 + K8S实战到今天刚刚一周时间,报名人数到了230人,QQ群人数从80人增加到了260人左右,大家对Dapr的关注度再一次得到了验证,并 ...

  2. zookeeper学习与实战(二)集群部署

    上一篇介绍了单机版zookeeper安装,这种情况一般用于开发测试.如果是生产环境建议用分布式集群部署,防止单点故障,增加zookeeper服务的高可用. [环境介绍]       三台机器:192. ...

  3. kubernetes实战(十四):k8s持久化部署gitlab集成openLDAP登录

    1.基本概念 使用k8s安装gitlab-ce,采用GlusterFS实现持久化(注意PG使用的是NFS存储,使用动态存储重启postgresql的pod后无法成功启动pg,待解决),并集成了open ...

  4. RabbitMQ (十四) 普通集群

    上篇文章把单机集群搭建好了,可以开始验证普通集群的相关功能了. 我们首先在管理后台(15672,15673 都可以)添加一个用户,并用新用户登录,添加一个虚拟主机 由于是在一台机器上模拟集群,所以我们 ...

  5. Hadoop实战:Hadoop分布式集群部署(一)

    一.系统参数优化配置 1.1 系统内核参数优化配置 修改文件/etc/sysctl.conf,使用sysctl -p命令即时生效.   1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  6. Hadoop数据分析平台项目实战(基于CDH版本集群部署与安装)

    1.Hadoop的主要应用场景: a.数据分析平台. b.推荐系统. c.业务系统的底层存储系统. d.业务监控系统. 2.开发环境:Linux集群(Centos64位)+Window开发模式(win ...

  7. Dapr + .NET Core实战(四)发布和订阅

    什么是发布-订阅 发布订阅是一种众所周知并被广泛使用的消息传送模式,常用在微服务架构的服务间通信,高并发削峰等情况.但是不同的消息中间件之间存在细微的差异,项目使用不同的产品需要实现不同的实现类,虽然 ...

  8. Openfire 集群部署和负载均衡方案

    Openfire 集群部署和负载均衡方案 一.   概述 Openfire是在即时通讯中广泛使用的XMPP协议通讯服务器,本方案采用Openfire的Hazelcast插件进行集群部署,采用Hapro ...

  9. (1)Consul在linux环境的集群部署

    1.Consul概念 1.1什么是Consul? Consul是一种服务网格解决方案,是HashiCorp公司推出的开源组件,由Go语言开发,部署起来很容易,只需要极少的可执行程序和配置.同时Cons ...

随机推荐

  1. 修改python import模块中的变量

    可以直接通过 模块名.变量名=xx 的方式修改模块中的全局变量,测试代码如下 模块:test_model.py x = 111 def inc_x(): global x x = x + 1 测试脚本 ...

  2. Confluence7.4安装并破解汉化教程

    Confluence是一款由JAVA编写用于企业知识库管理协同软件,多用于构建企业内部WIKI,支持多人协作,共享信息等. 当前系统环境Centos7.9,内存至少2G以上,数据库采用MySQL5.7 ...

  3. Qt编译工程提示qt creator no rule to make target opencv2/core/hal/interface.h need by debug解决方法

    总是提示 qt creator no rule to make target opencv2/core/hal/interface.h need by debug解决方法: 也算是花了整整两个小时踩坑 ...

  4. [bug]spring项目通过反射测试私有方法时,注入对象异常

    背景 遇到问题:在进行Spring单元测试编写时,发现被测方法是一个私有方法,无法直接通过注入对象调用 解决思路:首先想到通过反射获取该私有方法的访问权限,并传入注入对象,最终调用对象的私有方法. 出 ...

  5. JDK源码阅读:Object类阅读笔记

    Object 1. @HotSpotIntrinsicCandidate @HotSpotIntrinsicCandidate public final native Class<?> g ...

  6. PHP设计模式之中介者模式

    上回说道,我们在外打工的经常会和一类人有很深的接触,那就是房产中介.大学毕业后马上就能在喜欢的城市买到房子的X二代不在我们的考虑范围内哈.既然需要长期的租房,那么因为工作或者生活的变动,不可避免的一两 ...

  7. 创建一个Orchard Core CMS 应用程序

    开始使用Orchard Core作为NuGet软件包 在本文中,我们将看到使用Orchard Core提供的NuGet包创建CMS Web应用程序是多么容易. 你可以在这里找到Chris Payne写 ...

  8. greedy algorithm, insertion sort, quick sort

    always makes the choice that seems to be the best at that moment. Example #1: @function:  scheduling ...

  9. 浅析Java中的static关键字

    关键点 <Java编程思想>对static方法的描述:"static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没有创建对象的 ...

  10. 用 openresty 编写 lua

    """ #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/erro ...