前面我们说了在单机模式下和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. 由Eratosthenes筛法演变出的一种素数新筛法

    这两天和walls老师交流讨论了一个中学竞赛题,我把原题稍作增强和变形,得到如下一个题: 从105到204这100个数中至少要选取多少个数才能保证选出的数中必有两个不是互素的? 我们知道最小的几个素数 ...

  2. 约瑟夫环问题详解 (c++)

    问题描述: 已知n个人(以编号0,2,3...n-1分别表示)围坐在一起.从编号为0的人开始报数,数到k的那个人出列:他的下一个人又从1开始报数,数到k的那个人又出列:依此规律重复下去,直到圆桌周围的 ...

  3. Integer-源码

    Integer 是java5 引进的新特性 先上一个小实验: public static void main(String[] args) { Integer a1 = 100; Integer a2 ...

  4. windows/linux 页面编码区别导致 python 乱码

    http://blog.csdn.net/haiross/article/details/36189103 可以先看下这篇文章..写的比较用心和详细并且高深..我只是记流水账的. 直到今天我才注意到 ...

  5. Python中 sys.argv[]

    sys.argv[]是一个从程序外部获取参数的桥梁,从外部取得的参数可以是多个,所以获得的是一个列表(list),用[]提取其中的元素.其第一个元素是程序本身,随后才依次是外部给予的参数. 实例 im ...

  6. vue-cli3 项目中通过 CDN方式 使用 echarts

    1.html 中引入 echarts         html中添加script标签如下:         <script src="//cdn.bootcss.com/echarts ...

  7. leetcode-螺旋矩阵(指针)

    给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2 ...

  8. 基于swoole框架hyperf开发的纯API接口化的后台RBAC管理工具hyperfly@v1.0.0发布

    hyperfly@v1.0.0发布 本文地址http://yangjianyong.cn/?p=323转载无需经过作者本人授权 github地址:https://github.com/vankour/ ...

  9. PHP中的文件对比扩展

    文件对比这个扩展现在用得比较少,因为大部分情况下我们都在使用一些代码管理工具,比如 Git 或者 Svn 之类的,其实它的作用就非常类似这类工具,另外还有一个非常常用的 Beyond Compare ...

  10. Java面向对象系列(4)- 类与对象的创建

    类与对象的关系 类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是不能代表某一个具体的事物 动物.植物.手机-- Person类.Pet类.Car类等,这些类都是用来描述/定义某一类具体的事 ...