|
1 | 1 | #!/bin/bash
|
2 | 2 |
|
3 | 3 | # Delete bridge networks if they already exist
|
4 |
| -sudo docker stop rp1 rp2 rp3 redisinsight grafana |
5 |
| -sudo docker rm rp1 rp2 rp3 redisinsight grafana |
| 4 | +sudo docker stop re-node1-cluster1 re-node1-cluster2 re-node1-cluster3 redisinsight grafana |
| 5 | +sudo docker rm re-node1-cluster1 re-node1-cluster2 re-node1-cluster3 redisinsight grafana |
6 | 6 | sudo docker network rm network1 2>/dev/null
|
7 | 7 | sudo docker network rm network2 2>/dev/null
|
8 | 8 | sudo docker network rm network3 2>/dev/null
|
9 | 9 |
|
| 10 | +# shellcheck disable=SC2046 |
| 11 | +sudo docker rmi -f $(sudo docker images | grep redislabs | awk '{print $3}') |
| 12 | + |
10 | 13 | # Create new bridge networks
|
11 | 14 | echo "Creating new subnets..."
|
12 | 15 | sudo docker network create network1 --subnet=172.18.0.0/16 --gateway=172.18.0.1
|
13 | 16 | sudo docker network create network2 --subnet=172.19.0.0/16 --gateway=172.19.0.1
|
14 | 17 | sudo docker network create network3 --subnet=172.20.0.0/16 --gateway=172.20.0.1
|
15 | 18 |
|
| 19 | +# Add entries to /etc/hosts so A-A can work without DNS setup |
| 20 | +cluster1=$(grep cluster1.local /etc/hosts | cut -d ' ' -f 2) |
| 21 | +if [ ! -z "$cluster1" ] |
| 22 | +then |
| 23 | + echo "cluster1.local entry exists in /etc/hosts. Skipping.." |
| 24 | +else |
| 25 | + echo "Adding cluster1.local entry to /etc/hosts.." |
| 26 | + echo "172.18.0.2 cluster1.local" | sudo tee -a /etc/hosts |
| 27 | +fi |
| 28 | +cluster2=$(grep cluster2.local /etc/hosts | cut -d ' ' -f 2) |
| 29 | +if [ ! -z "$cluster2" ] |
| 30 | +then |
| 31 | + echo "cluster2.local entry exists in /etc/hosts. Skipping.." |
| 32 | +else |
| 33 | + echo "Adding cluster2.local entry to /etc/hosts.." |
| 34 | + echo "172.19.0.2 cluster2.local" | sudo tee -a /etc/hosts |
| 35 | +fi |
| 36 | +cluster3=$(grep cluster3.local /etc/hosts | cut -d ' ' -f 2) |
| 37 | +if [ ! -z "$cluster3" ] |
| 38 | +then |
| 39 | + echo "cluster3.local entry exists in /etc/hosts. Skipping.." |
| 40 | +else |
| 41 | + echo "Adding cluster3.local entry to /etc/hosts.." |
| 42 | + echo "172.20.0.2 cluster3.local" | sudo tee -a /etc/hosts |
| 43 | +fi |
| 44 | + |
16 | 45 | # Start 3 sudo docker containers. Each container is a node in a separate network
|
17 | 46 | echo "Starting Redis Enterprise as Docker containers..."
|
18 |
| -sudo docker run -d --cap-add sys_resource -h rp1 --name rp1 -p 8443:8443 -p 9443:9443 -p 12000:12000 -p 12001:12001 --network=network1 --ip=172.18.0.2 redislabs/redis:latest |
19 |
| -sudo 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:latest |
20 |
| -sudo 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:latest |
| 47 | +sudo docker run -d --cap-add sys_resource -h re-node1-cluster1 --name re-node1-cluster1 -p 8443:8443 -p 9443:9443 -p 14000:12000 -p 14001:12001 -p 8071:8070 --network=network1 --ip=172.18.0.2 redislabs/redis:latest |
| 48 | +sudo docker run -d --cap-add sys_resource -h re-node1-cluster2 --name re-node1-cluster2 -p 8445:8443 -p 9445:9443 -p 14002:12000 -p 8072:8070 --network=network2 --ip=172.19.0.2 redislabs/redis:latest |
| 49 | +sudo docker run -d --cap-add sys_resource -h re-node1-cluster3 --name re-node1-cluster3 -p 8447:8443 -p 9447:9443 -p 14004:12000 -p 8073:8070 --network=network3 --ip=172.20.0.2 redislabs/redis:latest |
21 | 50 |
|
22 | 51 | # Connect the networks
|
23 |
| -sudo docker network connect network2 rp1 |
24 |
| -sudo docker network connect network3 rp1 |
25 |
| -sudo docker network connect network1 rp2 |
26 |
| -sudo docker network connect network3 rp2 |
27 |
| -sudo docker network connect network1 rp3 |
28 |
| -sudo docker network connect network2 rp3 |
| 52 | +sudo docker network connect network2 re-node1-cluster1 |
| 53 | +sudo docker network connect network3 re-node1-cluster1 |
| 54 | +sudo docker network connect network1 re-node1-cluster2 |
| 55 | +sudo docker network connect network3 re-node1-cluster2 |
| 56 | +sudo docker network connect network1 re-node1-cluster3 |
| 57 | +sudo docker network connect network2 re-node1-cluster3 |
29 | 58 |
|
30 | 59 | # Create 3 Redis Enterprise clusters - one for each network
|
31 | 60 | echo "Waiting for the servers to start..."
|
32 | 61 |
|
33 | 62 | sleep 60
|
34 | 63 |
|
35 | 64 | echo "Creating clusters"
|
36 |
| -sudo docker exec -it rp1 /opt/redislabs/bin/rladmin cluster create name cluster1.local username demo@redislabs.com password redislabs |
37 |
| -sudo docker exec -it rp2 /opt/redislabs/bin/rladmin cluster create name cluster2.local username demo@redislabs.com password redislabs |
38 |
| -sudo docker exec -it rp3 /opt/redislabs/bin/rladmin cluster create name cluster3.local username demo@redislabs.com password redislabs |
| 65 | +sudo docker exec -it re-node1-cluster1 /opt/redislabs/bin/rladmin cluster create name cluster1.local username demo@redis.com password redislabs |
| 66 | +sudo docker exec -it re-node1-cluster2 /opt/redislabs/bin/rladmin cluster create name cluster2.local username demo@redis.com password redislabs |
| 67 | +sudo docker exec -it re-node1-cluster3 /opt/redislabs/bin/rladmin cluster create name cluster3.local username demo@redis.com password redislabs |
39 | 68 |
|
40 | 69 |
|
41 | 70 | # Create the CRDB
|
42 | 71 | echo "Creating a CRDB"
|
43 | 72 | echo ""
|
44 | 73 | # Test the cluster
|
45 |
| -sudo docker exec -it rp1 bash -c "/opt/redislabs/bin/rladmin info cluster" |
| 74 | +sudo docker exec -it re-node1-cluster1 bash -c "/opt/redislabs/bin/rladmin info cluster" |
| 75 | + |
| 76 | +# Get the module info to be used for database creation |
| 77 | +tee -a list_modules.sh <<EOF |
| 78 | +curl -s -k -L -u [email protected]:redislabs --location-trusted -H "Content-Type: application/json" -X GET https://localhost:9443/v1/modules | python -c 'import sys, json; modules = json.load(sys.stdin); |
| 79 | +modulelist = open("./module_list.txt", "a") |
| 80 | +for i in modules: |
| 81 | + lines = i["display_name"], " ", i["module_name"], " ", i["uid"], " ", i["semantic_version"], "\n" |
| 82 | + modulelist.writelines(lines) |
| 83 | +modulelist.close()' |
| 84 | +EOF |
| 85 | + |
| 86 | +sudo docker cp list_modules.sh re-node1-cluster1:/opt/list_modules.sh |
| 87 | +sudo docker exec --user root -it re-node1-cluster1 bash -c "chmod 777 /opt/list_modules.sh" |
| 88 | +sudo docker exec --user root -it re-node1-cluster1 bash -c "/opt/list_modules.sh" |
| 89 | + |
| 90 | +json_module_name=$(sudo docker exec --user root -it re-node1-cluster1 bash -c "grep -i json /opt/module_list.txt | cut -d ' ' -f 2 | uniq") |
| 91 | +json_semantic_version=$(sudo docker exec --user root -it re-node1-cluster1 bash -c "grep -i json /opt/module_list.txt | cut -d ' ' -f 4 | uniq") |
| 92 | +search_module_name=$(sudo docker exec --user root -it re-node1-cluster1 bash -c "grep -i search /opt/module_list.txt | cut -d ' ' -f 3 | uniq") |
| 93 | +search_semantic_version=$(sudo docker exec --user root -it re-node1-cluster1 bash -c "grep -i search /opt/module_list.txt | cut -d ' ' -f 5 | uniq") |
| 94 | +timeseries_module_name=$(sudo docker exec --user root -it re-node1-cluster1 bash -c "grep -i timeseries /opt/module_list.txt | cut -d ' ' -f 2 | uniq") |
| 95 | +timeseries_semantic_version=$(sudo docker exec --user root -it re-node1-cluster1 bash -c "grep -i timeseries /opt/module_list.txt | cut -d ' ' -f 4 | uniq") |
46 | 96 |
|
47 | 97 | echo "Creating databases..."
|
48 |
| -rm create_demodb.sh |
49 |
| -sudo docker cp target_crdb.json rp1:/opt/target_crdb.json |
50 |
| -sudo docker cp config_bdb.json rp1:/opt/config_bdb.json |
51 | 98 | tee -a create_demodb.sh <<EOF
|
52 |
| -curl -v -L -u [email protected]:redislabs --location-trusted -H Content-type:application/json -d @target_crdb.json -k https://localhost:9443/v1/crdbs |
53 |
| -curl -v -L -u demo@redislabs.com:redislabs --location-trusted -H "Content-type:application/json" -d @config_bdb.json -k https://localhost:9443/v1/bdbs |
| 99 | +curl -v -k -L -u [email protected]:redislabs --location-trusted -H "Content-type:application/json" -d '{ "default_db_config": { "name": "Target", "port": 12000, "memory_size": 1024000000, "type" : "redis", "replication": false, "aof_policy": "appendfsync-every-sec", "snapshot_policy": [], "shards_count": 1, "shard_key_regex": [{"regex": ".*\\\\{(?<tag>.*)\\\\}.*"}, {"regex": "(?<tag>.*)"}], "module_list": [ {"module_args": "PARTITIONS AUTO", "module_name": "$search_module_name", "semantic_version": "$search_semantic_version"} ] }, "instances": [{"cluster": {"url": "https://cluster1.local:9443","credentials": {"username": "[email protected]", "password": "redislabs"}, "name": "cluster1.local"}, "compression": 6}, {"cluster": {"url": "https://cluster2.local:9443", "credentials": {"username": "[email protected]", "password": "redislabs"}, "name": "cluster2.local"}, "compression": 6}, {"cluster": {"url": "https://cluster3.local:9443", "credentials": {"username": "[email protected]", "password": "redislabs"}, "name": "cluster3.local"}, "compression": 6}], "name": "Target" }' https://localhost:9443/v1/crdbs |
| 100 | +curl -v -k -L -u demo@redis.com:redislabs --location-trusted -H "Content-type:application/json" -d '{"name": "JobManager", "type":"redis", "replication": false, "memory_size": 1024000000, "port": 12001, "module_list": [{"module_args": "", "module_name": "$timeseries_module_name", "semantic_version": "$timeseries_semantic_version"} ] }' https://localhost:9443/v1/bdbs |
54 | 101 | EOF
|
55 |
| -sudo docker cp create_demodb.sh rp1:/opt/create_demodb.sh |
56 |
| -sudo docker exec --user root -it rp1 bash -c "chmod 777 /opt/create_demodb.sh" |
57 |
| -sudo docker exec -it rp1 bash -c "/opt/create_demodb.sh" |
| 102 | + |
| 103 | +sleep 20 |
| 104 | + |
| 105 | +sed -i "s///g" create_demodb.sh |
| 106 | +sudo docker cp create_demodb.sh re-node1-cluster1:/opt/create_demodb.sh |
| 107 | +sudo docker exec --user root -it re-node1-cluster1 bash -c "chmod 777 /opt/create_demodb.sh" |
| 108 | +sudo docker exec -it re-node1-cluster1 bash -c "/opt/create_demodb.sh" |
| 109 | +echo "" |
58 | 110 |
|
59 | 111 | echo "Database port mappings per node. We are using mDNS so use the IP and exposed port to connect to the databases."
|
60 | 112 | echo "node1:"
|
61 |
| -sudo docker port rp1 | egrep "12000|12001" |
62 |
| -sudo docker port rp2 | egrep "12000|12001" |
63 |
| -sudo docker port rp3 | egrep "12000|12001" |
| 113 | +sudo docker port re-node1-cluster1 | grep -E "12000|12001" |
| 114 | +sudo docker port re-node1-cluster2 | grep -E "12000|12001" |
| 115 | +sudo docker port re-node1-cluster3 | grep -E "12000|12001" |
64 | 116 | echo "------- RLADMIN status -------"
|
65 | 117 | sleep 60
|
66 |
| -sudo docker exec -it rp1 bash -c "rladmin status" |
| 118 | +sudo docker exec -it re-node1-cluster1 bash -c "rladmin status" |
| 119 | +echo "" |
| 120 | +sudo docker exec -it re-node1-cluster1 bash -c "crdb-cli crdb list" |
67 | 121 | echo ""
|
68 |
| -echo "You can open a browser and access Redis Enterprise Admin UI at https://127.0.0.1:8443 (replace localhost with your ip/host) with username=demo@redislabs.com and password=redislabs." |
| 122 | +echo "You can open a browser and access Redis Enterprise Admin UI at https://127.0.0.1:8443 (replace localhost with your ip/host) with username=demo@redis.com and password=redislabs." |
69 | 123 | echo "To connect using RedisInsight or redis-cli, please use the exposed port from the node where master shard for the database resides."
|
70 | 124 | echo "Creating RedisInsight in docker container.."
|
71 | 125 | sudo docker run -d --name redisinsight -p 18001:8001 -v redisinsight:/db redislabs/redisinsight:latest
|
72 | 126 | echo "Creating Grafana with redis-datasource in docker container.."
|
73 | 127 | sudo docker run -d -p 3000:3000 --name=grafana -e "GF_INSTALL_PLUGINS=redis-datasource" grafana/grafana
|
74 | 128 | echo ""
|
75 |
| -echo "Creating idx:emp index for search.." |
| 129 | +echo "Creating idx_emp index for search.." |
76 | 130 | sleep 60
|
77 |
| -sudo docker exec -it rp1 bash -c "/opt/redislabs/bin/redis-cli -p 12000 ft.create idx:emp on hash prefix 1 'emp:' schema EmpNum numeric sortable FName text sortable LName text Job tag sortable Manager numeric HireDate text Salary numeric Commission numeric Department numeric" |
78 |
| -sudo docker exec -it rp2 bash -c "/opt/redislabs/bin/redis-cli -p 12000 ft.create idx:emp on hash prefix 1 'emp:' schema EmpNum numeric sortable FName text sortable LName text Job tag sortable Manager numeric HireDate text Salary numeric Commission numeric Department numeric" |
79 |
| -sudo docker exec -it rp3 bash -c "/opt/redislabs/bin/redis-cli -p 12000 ft.create idx:emp on hash prefix 1 'emp:' schema EmpNum numeric sortable FName text sortable LName text Job tag sortable Manager numeric HireDate text Salary numeric Commission numeric Department numeric" |
| 131 | +sudo docker exec -it re-node1-cluster1 bash -c "/opt/redislabs/bin/redis-cli -p 12000 ft.create idx_emp on hash prefix 1 'emp:' schema empno numeric sortable fname text sortable lname text job tag sortable mgr numeric hiredate text sal numeric comm numeric dept numeric" |
| 132 | +sudo docker exec -it re-node1-cluster2 bash -c "/opt/redislabs/bin/redis-cli -p 12000 ft.create idx_emp on hash prefix 1 'emp:' schema empno numeric sortable fname text sortable lname text job tag sortable mgr numeric hiredate text sal numeric comm numeric dept numeric" |
| 133 | +sudo docker exec -it re-node1-cluster3 bash -c "/opt/redislabs/bin/redis-cli -p 12000 ft.create idx_emp on hash prefix 1 'emp:' schema empno numeric sortable fname text sortable lname text job tag sortable mgr numeric hiredate text sal numeric comm numeric dept numeric" |
80 | 134 | echo "You can open a browser and access RedisInsight client UI at http://127.0.0.1:18001 (replace localhost with your ip/host) and add databases to monitor."
|
81 |
| -echo "Please visit, https://docs.redislabs.com/latest/ri/using-redisinsight/add-instance/ for steps to add these databases to RedisInsight." |
82 |
| -echo "DISCLAIMER: This is best for local development or functional testing. Please see, https://docs.redislabs.com/latest/rs/getting-started/getting-started-docker" |
| 135 | +echo "Please visit, https://docs.redis.com/latest/ri/using-redisinsight/add-instance/ for steps to add these databases to RedisInsight." |
| 136 | +echo "DISCLAIMER: This is best for local development or functional testing. Please see, https://docs.redis.com/latest/rs/getting-started/getting-started-docker" |
| 137 | + |
| 138 | +# Cleanup |
| 139 | +rm list_modules.sh |
| 140 | +sudo docker exec --user root -it re-node1-cluster1 bash -c "rm /opt/list_modules.sh" |
| 141 | +sudo docker exec --user root -it re-node1-cluster1 bash -c "rm /opt/module_list.txt" |
| 142 | +rm create_demodb.sh |
| 143 | +sudo docker exec --user root -it re-node1-cluster1 bash -c "rm /opt/create_demodb.sh" |
| 144 | + |
|
0 commit comments