diff --git a/Dockerfile b/Dockerfile index 6f2448df870d5c02ffcb33f4c47a35918a9d74b1..d138e90445800f7485d70aaf67c15b6ac711790b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,7 +28,9 @@ COPY redis.conf /etc/redis/redis.conf COPY entrypoint.sh /usr/bin/entrypoint.sh -COPY run.sh /usr/bin/run.sh +COPY setupMasterSlave.sh /usr/bin/setupMasterSlave.sh + +COPY healthcheck.sh /usr/bin/healthcheck.sh VOLUME ["/data"] diff --git a/Makefile b/Makefile index ab57cc2d58c349320f44989d48c05f76f93f7e43..17ce5322969d7e4ada1a03e291adaf628c14072b 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,11 @@ build-redis-exporter-image: docker build -t opstree/redis-exporter:dev -f Dockerfile.exporter . setup-standalone-server-compose: - docker-compose up -f docker-compose-standalone.yaml -d + docker-compose -f docker-compose-standalone.yaml up -d setup-cluster-compose: - docker-compose up -f docker-compose.yaml -d + docker-compose -f docker-compose.yaml up -d + docker-compose exec redis-master-3 /bin/bash -c "/usr/bin/setupMasterSlave.sh" + docker-compose exec redis-slave-1 /bin/bash -c "/usr/bin/setupMasterSlave.sh" + docker-compose exec redis-slave-2 /bin/bash -c "/usr/bin/setupMasterSlave.sh" + docker-compose exec redis-slave-3 /bin/bash -c "/usr/bin/setupMasterSlave.sh" diff --git a/docker-compose-standalone.yaml b/docker-compose-standalone.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1b12566f099ae43f1b8a6b4744e736c9ff69f8da --- /dev/null +++ b/docker-compose-standalone.yaml @@ -0,0 +1,10 @@ +version: '3.3' +services: + redis: + image: opstree/redis:1.0 + restart: always + expose: + - 6379 + environment: + REDIS_PASSWORD: "Opstree@12345" + SETUP_MODE: standalone diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c46f8854193a5a883e69eb8cb93aa1f498fd710a --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,93 @@ +version: '3.3' +services: + redis-master-1: + image: opstree/redis:1.0 + restart: always + networks: + redis: + ipv4_address: 10.5.0.2 + environment: + REDIS_PASSWORD: "Opstree@12345" + SETUP_MODE: cluster + SERVER_MODE: master + healthcheck: + test: ["CMD-SHELL", "/bin/bash /usr/bin/healthcheck.sh"] + + redis-master-2: + image: opstree/redis:1.0 + restart: always + networks: + redis: + ipv4_address: 10.5.0.3 + environment: + REDIS_PASSWORD: "Opstree@12345" + SETUP_MODE: cluster + SERVER_MODE: master + healthcheck: + test: ["CMD-SHELL", "/bin/bash /usr/bin/healthcheck.sh"] + + redis-master-3: + image: opstree/redis:1.0 + restart: always + networks: + redis: + ipv4_address: 10.5.0.4 + environment: + REDIS_PASSWORD: "Opstree@12345" + SETUP_MODE: cluster + SERVER_MODE: master + MASTER_LIST: "10.5.0.2:6379 10.5.0.3:6379 10.5.0.4:6379" + healthcheck: + test: ["CMD-SHELL", "/bin/bash /usr/bin/healthcheck.sh"] + + redis-slave-1: + image: opstree/redis:1.0 + restart: always + networks: + redis: + ipv4_address: 10.5.0.5 + environment: + REDIS_PASSWORD: "Opstree@12345" + SETUP_MODE: cluster + SERVER_MODE: slave + SLAVE_IP: "10.5.0.5:6379" + MASTER_IP: "10.5.0.2:6379" + healthcheck: + test: ["CMD-SHELL", "/bin/bash /usr/bin/healthcheck.sh"] + + redis-slave-2: + image: opstree/redis:1.0 + restart: always + networks: + redis: + ipv4_address: 10.5.0.6 + environment: + REDIS_PASSWORD: "Opstree@12345" + SETUP_MODE: cluster + SERVER_MODE: slave + SLAVE_IP: "10.5.0.6:6379" + MASTER_IP: "10.5.0.3:6379" + healthcheck: + test: ["CMD-SHELL", "/bin/bash /usr/bin/healthcheck.sh"] + + redis-slave-3: + image: opstree/redis:1.0 + restart: always + networks: + redis: + ipv4_address: 10.5.0.7 + environment: + REDIS_PASSWORD: "Opstree@12345" + SETUP_MODE: cluster + SERVER_MODE: slave + SLAVE_IP: "10.5.0.7:6379" + MASTER_IP: "10.5.0.4:6379" + healthcheck: + test: ["CMD-SHELL", "/bin/bash /usr/bin/healthcheck.sh"] + +networks: + redis: + driver: bridge + ipam: + config: + - subnet: 10.5.0.0/16 diff --git a/healthcheck.sh b/healthcheck.sh new file mode 100755 index 0000000000000000000000000000000000000000..a28ecd2b26baf9ef3aebb3a6676f476af26f91a8 --- /dev/null +++ b/healthcheck.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +check_redis_health() { + if [[ -z "${REDIS_PASSWORD}" ]]; then + redis-cli ping + else + redis-cli -a ${REDIS_PASSWORD} ping + fi +} + +check_redis_health diff --git a/redis.conf b/redis.conf old mode 100644 new mode 100755 diff --git a/run.sh b/run.sh deleted file mode 100755 index 03bb7948c89fe4d194793bdb95b263c8de4bf66c..0000000000000000000000000000000000000000 --- a/run.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -redis_server_mode() { - if [[ "${SERVER_MODE}" == "master" ]]; then - echo "Redis server mode is master" - elif [[ "${SERVER_MODE}" == "slave" ]]; then - echo "Redis server mode is slave" - if [[ -z "${REDIS_PASSWORD}" ]]; then - redis-cli --add-node "${SLAVE_IP}" "${MASTER_IP}" --cluster-slave - else - redis-cli --add-node "${SLAVE_IP}" "${MASTER_IP}" --cluster-slave -a "${REDIS_PASSWORD}" - fi - else - echo "Redis server mode is standalone" - fi -} - -redis_server_mode diff --git a/setupMasterSlave.sh b/setupMasterSlave.sh new file mode 100755 index 0000000000000000000000000000000000000000..6889e73d25d440a3595f555efdee98daa1960ccd --- /dev/null +++ b/setupMasterSlave.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +redis_server_mode() { + if [[ "${SERVER_MODE}" == "master" ]]; then + echo "Redis server mode is master" + if [[ -z "${REDIS_PASSWORD}" ]]; then + redis-cli --cluster create "${MASTER_LIST}" --cluster-yes + else + redis-cli --cluster create ${MASTER_LIST} --cluster-yes -a "${REDIS_PASSWORD}" + fi + elif [[ "${SERVER_MODE}" == "slave" ]]; then + echo "Redis server mode is slave" + if [[ -z "${REDIS_PASSWORD}" ]]; then + redis-cli --cluster add-node ${SLAVE_IP} ${MASTER_IP} --cluster-slave + else + redis-cli --cluster add-node ${SLAVE_IP} ${MASTER_IP} --cluster-slave -a "${REDIS_PASSWORD}" + fi + else + echo "Redis server mode is standalone" + fi +} + +redis_server_mode