Skip to content

Instantly share code, notes, and snippets.

@mathieuancelin
Last active February 28, 2019 13:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mathieuancelin/878c6c5cb6b275b948cd051840211d53 to your computer and use it in GitHub Desktop.
Save mathieuancelin/878c6c5cb6b275b948cd051840211d53 to your computer and use it in GitHub Desktop.

Otoroshi cluster demos

assuming your local ip address is 192.168.86.194

Getting otoroshi

curl -L -o otoroshi.jar 'https://dl.bintray.com/maif/binaries/otoroshi.jar/1.4.6/otoroshi.jar'
# or
curl -L -o otoroshi.jar 'https://dl.bintray.com/maif/binaries/otoroshi.jar/snapshot/otoroshi.jar'

Create a test service on Otoroshi instance

curl -X POST -H 'Content-Type: application/json' -H 'Host: otoroshi-api.foo.bar' http://127.0.0.1:8080/api/services -u admin-api-apikey-id:admin-api-apikey-secret -d '
{
  "groupId": "default",
  "name": "my-service",
  "env": "prod",
  "domain": "foo.bar",
  "subdomain": "test",
  "targets": [
    {
      "host": "neverssl.com",
      "scheme": "http"
    }
  ],
  "root": "/",
  "enabled": true,
  "forceHttps": false,
  "enforceSecureCommunication": false,
  "publicPatterns": [
    "/.*"
  ]
}
'

In Memory

java -Dotoroshi.cluster.mode=leader -jar otoroshi.jar
java -Dotoroshi.cluster.mode=worker -Dhttp.port=8081 -Dhttps.port=8082 -jar otoroshi.jar

Redis standalone

docker run -p 6379:6379 -v ./data/standalone-redis-data:/data redis:4.0.8 redis-server --appendonly yes
java -Dapp.storage=redis -Dotoroshi.cluster.mode=leader -jar otoroshi.jar
java -Dapp.storage=redis-lf -Dotoroshi.cluster.mode=leader -jar otoroshi.jar
java -Dotoroshi.cluster.mode=worker -Dhttp.port=8081 -Dhttps.port=8082 -jar otoroshi.jar

Redis sentinel setup

touch docker-compose.yml
touch sentinel1.conf
touch sentinel2.conf
touch sentinel3.conf

content of docker-compose.yml

version: '3'
services:

  redis1:
    image: redis:3.2-alpine
    expose:
      - 6379
    volumes:
      - ./data/redis1-data:/data
    ports:
      - 6401:6379

  sentinel1:
    image: redis:3.2-alpine
    expose:
      - 26379
    ports:
      - 26401:26379
    volumes:
      - ./sentinel1.conf:/etc/sentinel.conf
      - ./data/sentinel1-data:/data    
    command: redis-server /etc/sentinel.conf --sentinel

  redis2:
    image: redis:3.2-alpine
    expose:
      - 6379
    ports:
      - 6402:6379
    volumes:
      - ./data/redis2-data:/data

  sentinel2:
    image: redis:3.2-alpine
    expose:
      - 26379
    ports:
      - 26402:26379
    volumes:
      - ./sentinel2.conf:/etc/sentinel.conf
      - ./data/sentinel2-data:/data    
    command: redis-server /etc/sentinel.conf --sentinel

  redis3:
    image: redis:3.2-alpine
    expose:
      - 6379
    ports:
      - 6403:6379
    volumes:
      - ./data/redis3-data:/data

  sentinel3:
    image: redis:3.2-alpine
    expose:
      - 26379
    ports:
      - 26403:26379
    volumes:
      - ./sentinel3.conf:/etc/sentinel.conf
      - ./data/sentinel3-data:/data    
    command: redis-server /etc/sentinel.conf --sentinel

content of sentinel1.conf

sentinel monitor my_redis_master 192.168.86.194 6401 3
sentinel down-after-milliseconds my_redis_master 3000
sentinel failover-timeout my_redis_master 10000
sentinel parallel-syncs my_redis_master 1

content of sentinel2.conf

sentinel monitor my_redis_master 192.168.86.194 6401 3
sentinel down-after-milliseconds my_redis_master 3000
sentinel failover-timeout my_redis_master 10000
sentinel parallel-syncs my_redis_master 1
sentinel known-slave my_redis_master 192.168.86.194 6402

content of sentinel3.conf

sentinel monitor my_redis_master 192.168.86.194 6401 3
sentinel down-after-milliseconds my_redis_master 3000
sentinel failover-timeout my_redis_master 10000
sentinel parallel-syncs my_redis_master 1
sentinel known-slave my_redis_master 192.168.86.194 6403

Redis sentinel

docker-compose up
java \
  -Dapp.storage=redis-sentinel-lf \
  -Dapp.redis.cluster.sentinels.lf.members.0.host=192.168.86.194 \
  -Dapp.redis.cluster.sentinels.lf.members.1.host=192.168.86.194 \
  -Dapp.redis.cluster.sentinels.lf.members.2.host=192.168.86.194 \
  -Dapp.redis.cluster.sentinels.lf.members.0.port=26401 \
  -Dapp.redis.cluster.sentinels.lf.members.1.port=26402 \
  -Dapp.redis.cluster.sentinels.lf.members.2.port=26403 \
  -Dapp.redis.cluster.sentinels.lf.master=my_redis_master \
  -Dotoroshi.cluster.mode=leader \
  -jar otoroshi.jar
java -Dotoroshi.cluster.mode=worker -Dhttp.port=8081 -Dhttps.port=8082 -jar otoroshi.jar
docker-compose down

Client tests

curl -H 'Host: test.foo.bar' http://127.0.0.1:8080
curl -H 'Host: test.foo.bar' http://127.0.0.1:8081
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment