【51CTO.com快译】Redis Enterprise这种双活数据库是地域分布式应用程序的理想选择。其架构基于无冲突复制数据类型(CRDT)方面是突破性的学术研究。这种方法与其他双活数据库相比具有许多优点,包括如下:
1. 为读写操作提供本地延迟
2. 为简单和复杂的数据类型提供内置的冲突解决方案
3. 跨区域故障切换
4. 简化实施了诸多用例,比如积分榜、分布式缓存、共享会话和多用户计费等。
最近我们发布了一篇关于如何使用双活Redis Enterprise来开发应用程序的教程。为了模拟生产环境,开发人员或测试人员需要一种小型化的开发环境,很容易用Docker来搭建。
Redis Enterprise在Docker hub上以redislabs/redis的形式存在,我们已经在Redis Enterprise说明文档页面和docker hub本身上介绍了如何在Docker上搭建Redis Enterprise的详细逐步说明。
我们在本文中介绍创建基于Docker的Redis Enterprise集群的步骤,这一切通过命令行来完成。下面大体介绍了整个过程(更多详细信息如下):
1. 安装数据库
1)创建一个3个节点的Redis Enterprise集群,每个节点在单独的子网上
2)创建基于CRDT的Redis Enterprise数据库
3)连接到三个不同的实例
2. 验证安装的环境
3. 拆分网络
4. 恢复连接
5. 停止Redis Enterprise
在开始之前,确保你已有一个bash shell,并为docker进程分配了足够的内存。你可以进入到Docker -> Preferences -> Advanced来检查内存。
图1:Docker内存***项高级选项卡
1. 安装数据库
下列脚本在3节点集群上创建基于CRDT的Redis Enterprise数据库。将其保存在文件中并为其命名,比如“create_3_node_cluster.sh”。然后将模式改成可执行(chmod + x create_3_node_cluster.sh),并运行脚本([path] /create_3_node_cluster.sh)。
- #!/bin/bash
- # Delete the bridge networks if they already exist
- docker network rm network1 2>/dev/null
- docker network rm network2 2>/dev/null
- docker network rm network3 2>/dev/null
- # Create new bridge networks
- 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
- # Start 3 docker containers. Each container is a node in a separate network
- # These commands pull redislabs/redis from the docker hub. Because of the
- # port mapping rules, Redis Enterprise instances are available on ports
- # 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 redislabs/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 redislabs/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 redislabs/redis
- # Connect the networks
- 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
- # Sleep while the nodes start. Increase the sleep time if your nodes take
- # longer than 60 seconds to start
- echo “”
- echo “Waiting for the servers to start…”
- sleep 60
- # Create 3 Redis Enterprise clusters – one for each network. You can login to
- # a cluster as https://localhost:8443/ (or 8445, 8447). The user name is
- # r@r.com, password is password. Change the user
- echo “”
- echo “Creating clusters”
- docker exec -it rp1 /opt/redislabs/bin/rladmin cluster create name cluster1.local username r@r.com password test
- docker exec -it rp2 /opt/redislabs/bin/rladmin cluster create name cluster2.local username r@r.com password test
- docker exec -it rp3 /opt/redislabs/bin/rladmin cluster create name cluster3.local username r@r.com password test
- # Create the CRDB
- echo “”
- echo “Creating a CRDB”
- docker exec -it rp1 /opt/redislabs/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
2. 验证安装的环境
在端口12000、12002和12004上运行redis-cli,验证你可以连接到所有三个Redis Enterprise端口。如果你将应用程序连接到Redis Enterprise,需要应用程序的三个实例连接到三个不同的端口。比如:
- $ redis-cli -p 12000
- 127.0.0.1:12000> incr counter
- (integer) 1
- 127.0.0.1:12000> get counter
- “1”
3. 拆分网络
拆分网络可帮助你在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
4. 恢复连接
你运行脚本“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
5. 停止Redis Enterprise
完成开发和测试后,只要运行下列脚本,就可以终止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双活数据库环境。若有任何问题,欢迎留言交流。
原文标题:How to Set Up a Docker-based Development Environment for Active-Active Redis Enterprise,作者:Roshan Kumar
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】