# 分布式锁
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保持一致,如图:
验证分布式锁集群是否成功
使用命令验证: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连接,如图:
验证分布式锁集群是否成功
使用命令验证: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连接和密码即可,如图:
验证分布式锁集群是否成功
使用命令验证:dlock key seconds
在A服务器获取锁30秒,dlock a 30
在B服务器获取相同的锁10秒,dlock a 10
在A服务器锁定期间,B服务器等待,A服务器释放锁后,B服务器获取锁
# Azure
创建存储账户
1、登录Azure账户,创建存储账户
2、在访问控制(IAM)设置授权
3、在访问秘钥模块,获得连接字符串,如图:
BPM配置
放出Provider、配置连接为前面步骤3中获取的连接字符串,BlobContainerName名称可自定,集群服务器之间保持一致,设置后Azure中会自动创建相应的容器。
验证分布式锁集群是否成功
使用命令验证:dlock key seconds
在A服务器获取锁30秒,dlock a 30
在B服务器获取相同的锁10秒,dlock a 10
在A服务器锁定期间,B服务器等待,A服务器释放锁后,B服务器获取锁