本文中介绍创建基于docker的redis Enterprise集群的步骤,这一切通过命令行来完成。下面大体介绍了整个过程。
1)创建一个3个节点的Redis Enterprise集群,每个节点在单独的子网上
2)创建基于CRDT的Redis Enterprise数据库
3)连接到三个不同的实例
验证安装的环境
拆分网络
恢复连接
停止Redis Enterprise
在开始之前,确保你已有一个bash shell,并为docker进程分配了足够的内存。你可以进入到Docker -> Preferences -> Advanced来检查内存。
下列脚本在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
在端口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”
拆分网络可帮助你在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双活数据库环境。
Docker中安装DB2的详细教程和DBVisualize的安装教程