# 分布式锁

FlowPortal BPM的分布式锁支持4种主流产品:Dapr、ZooKeeper、Redis和Azure。

集群时根据需要选择其中一种,每台服务器指向同一配置,即可完成集群。

# Dapr

Dapr安装与配置

1、下载dapr cli(dapr.exe)

把dapr.exe放到一个目录,添加环境变量指向这个目录

2、dapr初始化:(离线)

先在powershell执行dapr init(因为网络原因失败也没关系,这里是为了生成components和config.yaml文件)

3、dapr uninstall 卸载

在目录C:\用户\用户名\.dapr\下新建bin,将下载好的文件解压后放进来( daprd.exe、dashboard.exe、web )

4、dapr –v查看版本号

环境变量添加C:\用户\用户名\.dapr\

5、创建一个dapr实例:

dapr run --app-id BPMServerApp --dapr-http-port 3501 --dapr-grpc-port 50001 --app-port 6002(运行起来窗口不要关)

在一台电脑测试集群,需运行多个实例,--app-id要保持一致,--app-port要和程序端口一致,BPM配置文件的GrpcEndpoint要改为对应实例的--dapr-grpc-port 

6、在components目录下新建文件lockstore.yaml(文件修改后重新运行Dapr实例命令才会生效)

注:文件下载地址

https://github.com/dapr/cli/releases

https://github.com/dapr/dapr/releases

https://github.com/dapr/dashboard/releases/

BPM配置

放出Provider、配置GrpcEndpoint为运行实例时dapr-grpc-port端口,StoreName和lockstore.yaml文件的metadata保持一致,如图:

Image

ImageImage

验证分布式锁集群是否成功

使用命令验证:dlock key seconds

在A服务器获取锁30秒,dlock a 30

在B服务器获取相同的锁10秒,dlock a 10

在A服务器锁定期间,B服务器等待,A服务器释放锁后,B服务器获取锁

# ZooKeeper

安装ZooKeeper

使用docker部署,按照下面的步骤依次运行命令:

1、docker pull zookeeper

2、docker run -d  -p 2181:2181 --name zookeeper --restart always zookeeper

3、docker run -it --rm --link zookeeper:zookeeper zookeeper zkCli.sh -server zookeeper(连客户端)

BPM配置

放出Provider、配置zookeeper连接,如图:

Image

Image

验证分布式锁集群是否成功

使用命令验证:dlock key seconds

在A服务器获取锁30秒,dlock a 30

在B服务器获取相同的锁10秒,dlock a 10

在A服务器锁定期间,B服务器等待,A服务器释放锁后,B服务器获取锁

# Redis

安装Redis环境

使用docker部署,按照下面的步骤依次运行命令:

1、docker pull redis

2;、docker run --name my-redis -d -p 6379:6379 redis

3、若想设置密码:打开redis客户端:docker exec -it my-redis redis-cli

      获取密码:config get requirepass

      设置密码:config set requirepass 你的密码

      认证密码:AUTH 你的密码

BPM配置

放出Provider、配置redis连接和密码即可,如图:

Image

Image

验证分布式锁集群是否成功

使用命令验证:dlock key seconds

在A服务器获取锁30秒,dlock a 30

在B服务器获取相同的锁10秒,dlock a 10

在A服务器锁定期间,B服务器等待,A服务器释放锁后,B服务器获取锁

# Azure

创建存储账户

1、登录Azure账户,创建存储账户

2、在访问控制(IAM)设置授权

3、在访问秘钥模块,获得连接字符串,如图:

Image

BPM配置

放出Provider、配置连接为前面步骤3中获取的连接字符串,BlobContainerName名称可自定,集群服务器之间保持一致,设置后Azure中会自动创建相应的容器。

Image

Image

验证分布式锁集群是否成功

使用命令验证:dlock key seconds

在A服务器获取锁30秒,dlock a 30

在B服务器获取相同的锁10秒,dlock a 10

在A服务器锁定期间,B服务器等待,A服务器释放锁后,B服务器获取锁