Redis Enterprise 作为活动-活动数据库是地理分布式应用程序的理想选择。其架构基于突破性的学术研究,涉及无冲突复制数据类型 (CRDT)。与其他活动-活动数据库相比,这种方法提供了许多优势,包括
最近,我们发布了 关于如何使用活动-活动 Redis Enterprise 开发应用程序的教程。 为了模拟生产环境,开发人员或测试人员需要一个小型化开发环境,可以用 Docker 轻松创建此类环境。
Redis Enterprise 在 Docker 中心可作为 redis/redis 使用,我们已在 Redis Enterprise 文档页 和 Docker 中心本身上分享了有关如何在 Docker 中设置 Redis Enterprise 的详细分步说明。
在本博客中,我们将指导您完成创建基于 Docker 的 Redis Enterprise 集群的步骤,所有步骤均通过命令行完成。以下是该流程的高级概述(更多详细信息见下文)
在开始之前,请确保您有现成的 bash shell,并为 docker 进程分配了足够的内存。您可以通过转到 Docker -> 首选项 -> 高级来检查您的内存。
以下脚本在 3 节点集群上创建基于 CRDT 的 Redis Enterprise 数据库。将此脚本保存到文件中,并为其命名,如“create_3_node_cluster.sh。然后将模式更改为可执行模式(chmod +x create_3_node_cluster.sh),并运行脚本 ([path]/create_3_node_cluster.sh)。
#!/bin/bash
# 如果桥接网络已存在,则删除这些网络
docker network rm network1 2>/dev/null
docker network rm network2 2>/dev/null
docker network rm network3 2>/dev/null
# 创建新的桥接网络
echo “Creating new subnets…”
docker network create network1 –subnet=172.18.0.0/16 –gateway=172.18.0.1
docker network create network2 –subnet=172.19.0.0/16 –gateway=172.19.0.1
docker network create network3 –subnet=172.20.0.0/16 –gateway=172.20.0.1
# 启动 3 个 docker 容器。每个容器都是不同网络中的一个节点
# 由于端口映射规则,端口上 availability Redis Enterprise 实例
#
# 12000, 12002, 12004
echo “”
echo “Starting Redis Enterprise as Docker containers…”
docker run -d –cap-add sys_resource -h rp1 –name rp1 -p 8443:8443 -p 9443:9443 -p 12000:12000 –network=network1 –ip=172.18.0.2 redis/redis
docker run -d –cap-add sys_resource -h rp2 –name rp2 -p 8445:8443 -p 9445:9443 -p 12002:12000 –network=network2 –ip=172.19.0.2 redis/redis
docker run -d –cap-add sys_resource -h rp3 –name rp3 -p 8447:8443 -p 9447:9443 -p 12004:12000 –network=network3 –ip=172.20.0.2 redis/redis
# 连接网络
docker network connect network2 rp1
docker network connect network3 rp1
docker network connect network1 rp2
docker network connect network3 rp2
docker network connect network1 rp3
docker network connect network2 rp3
# 在节点启动时睡眠。如果节点启动时间超过 60 秒,则增加睡眠时间
# 更长
echo “”
echo “等待服务器启动…”
sleep 60
# 为每个网络创建 3 个 Redis Enterprise 集群。您可以登录到
# 集群为 https://localhost:8443/ (或 8445、8447)。用户名是
# r@r.com,密码是 password。更改用户
echo “”
echo “创建集群”
docker exec -it rp1 /opt/redis/bin/rladmin cluster create name cluster1.local username r@r.com password test
docker exec -it rp2 /opt/redis/bin/rladmin cluster create name cluster2.local username r@r.com password test
docker exec -it rp3 /opt/redis/bin/rladmin cluster create name cluster3.local username r@r.com password test
# 创建 CRDB
echo “”
echo “创建 CRDB”
docker exec -it rp1 /opt/redis/bin/crdb-cli crdb create –name mycrdb –memory-size 512mb –port 12000 –replication false –shards-count 1 –instance fqdn=cluster1.local,username=r@r.com,password=test –instance fqdn=cluster2.local,username=r@r.com,password=test –instance fqdn=cluster3.local,username=r@r.com,password=test
在端口 12000、12002 和 12004 上运行 redis-cli,以验证是否可以连接到全部三个 Redis Enterprise 节点。如果您正在将您的应用连接到 Redis Enterprise,则需要三个应用实例连接到三个不同的端口。例如
$ redis-cli -p 12000
127.0.0.1:12000> incr counter
(整数) 1
127.0.0.1:12000> get counter
“1”
拆分网络有助于在 Redis Enterprise 副本之间引入“网络分区”。在设计应用时,您必须设计,使其在副本断开连接时无缝工作。此脚本可帮助您隔离三个副本。将这个脚本保存在 “split_networks.sh” 文件中,并在运行脚本之前更改模式,以使其可执行(chmod +x split_networks.sh)。
#!/bin/bash
docker network disconnect network2 rp1
docker network disconnect network3 rp1
docker network disconnect network1 rp2
docker network disconnect network3 rp2
docker network disconnect network1 rp3
docker network disconnect network2 rp3
当你运行“split_netorks.sh”脚本时,本地副本将停止与对等方共享其数据库更新。由于 Redis Enterprise 提供的最终一致性非常强大,因此恢复连接将使它们能够交换所有更新并得到相同最终状态。以下脚本会恢复副本之间的网络连接。将其另存为“restore_networks.sh”文件,然后更改模式使其可执行(chmod +x restore_networks.sh)。
#!/bin/bash
docker network connect network2 rp1
docker network connect network3 rp1
docker network connect network1 rp2
docker network connect network3 rp2
docker network connect network1 rp3
docker network connect network2 rp3
当你完成开发和测试后,可以通过运行以下脚本停止 Redis Enterprise 的所有三个节点。将脚本另存为一个文件,命名为“stop.sh”,然后更改模式使其可执行(chmod +x stop.sh)。
#!/bin/bash
docker stop rp1 rp2 rp3
docker rm rp1 rp2 rp3
docker network rm network1
docker network rm network2
docker network rm network3
就是这样。以此为起点,你现在有了自己的基于 Docker 的 Redis Enterprise 主动-主动设置。如有任何疑问,请随时通过 product@redis.com 发送电子邮件与我们联系。
如果你希望在云中开始使用 Redis Enterprise,你可以 在此处 免费注册。