Code Monkey home page Code Monkey logo

Comments (10)

c4milo avatar c4milo commented on May 13, 2024 1

I believe this can be revisited again, 0.5.x allows to use Docker's volume support as @jsierles mentioned. Generic volume support is supposed to land in 0.6.0. It would also be fair to do it with host networking first.

from stolon.

jsierles avatar jsierles commented on May 13, 2024

Is nomad support still on the table?

from stolon.

sgotti avatar sgotti commented on May 13, 2024

@jsierles Yes, but I'm waiting on nomad persistent volumes (and also evolutions on nomad networking model).

from stolon.

jsierles avatar jsierles commented on May 13, 2024

0.5 looks like it will have preliminary volume override support.

What networking model changes need to happen?

from stolon.

LordFPL avatar LordFPL commented on May 13, 2024

Hello, many thx for this tool :)

For information, i'm actually testing it under nomad... and all seem to be ok with this :

job "postgresclust" {
  datacenters = ["dc1"]
  type = "service"
  priority = 30

  update {
    stagger = "60s"
    max_parallel = 1
  }

  constraint {
    distinct_hosts = true
  }

  group "postgresclust" {
    count = 3
    task "sentinel" {
      driver = "raw_exec"
      config {
        command = "stolon-sentinel"
        args = [
          "--cluster-name=stolon-cluster",
          "--store-backend=consul",
        ]
      }
      artifact {
        source = "http://mystorage/bin/stolon-v0.6.0-linux-amd64/stolon-sentinel"
      }
      service {
        name = "stolon-sentinel"
        tags = [
          "postgres",
        ]
      }
      logs {
        max_files     = 2
        max_file_size = 10
      }
      resources {
        cpu = 200
        memory = 300
        network {
          mbits = 100
        }
      }
    }
    task "keeper" {
      driver = "docker"
      config {
        image = "myregistry/infra/postgres-keeper:9.6.3"
        network_mode = "host"
        args = [
          "--cluster-name=stolon-cluster",
          "--store-backend=consul",
          "--data-dir=/data/postgres",
          "--pg-listen-address=${attr.unique.network.ip-address}",
          "--pg-port=${NOMAD_PORT_postgresnode}",
          "--pg-su-password=supassword",
          "--pg-repl-username=repluser",
          "--pg-repl-password=replpassword",
          "--pg-bin-path=/usr/lib/postgresql/9.6/bin/",
        ]
        volumes = [
          "/local/postgres:/data/postgres",
          "/etc/localtime:/etc/localtime:ro"
        ]
      }
      user = "postgres"
      service {
        name = "stolon-sentinel"
        tags = [
          "postgres",
        ]
      }
      logs {
        max_files     = 2
        max_file_size = 10
      }
      resources {
        cpu = 400
        memory = 1000
        network {
          mbits = 100
          port "postgresnode" {}
        }
      }
    }
    task "proxy" {
      driver = "raw_exec"
      config {
        command = "stolon-proxy"
        args = [
          "--cluster-name=stolon-cluster",
          "--store-backend=consul",
          "--listen-address=${attr.unique.network.ip-address}",
          "--port=5432",
        ]
      }
      artifact {
        source = "http://mystorage/bin/stolon-v0.6.0-linux-amd64/stolon-proxy"
      }
      service {
        name = "stolon-proxy"
        tags = [
          "postgres",
        ]
      }
      logs {
        max_files     = 2
        max_file_size = 10
      }
      resources {
        cpu = 200
        memory = 300
        network {
          mbits = 100
        }
      }
    }
  }
}

Just 3 things to do before lauch :

  • Have a place to get binary (to use artifacts under nomad)
  • Create local directory on all node (/local/postgres here) and give right on postgres user
  • Create an image with keeper and correct entrypoint :
FROM postgres:9.6.3
ADD http://mystorage/bin/stolon-v0.6.0-linux-amd64/stolon-keeper /
RUN chmod +x /stolon-keeper
ENTRYPOINT ["/stolon-keeper"]

And of course, do stolonctl init before ;)

stolonctl status
=== Active sentinels ===

ID              LEADER
17eeb35e        false
2afc367e        true
4bfd8962        false

=== Active proxies ===

ID
282b8fde
53240b6e
c121b388

=== Keepers ===

UID             PG LISTENADDRESS        HEALTHY PGWANTEDGENERATION      PGCURRENTGENERATION
5600ba68        xxxxxxx:33793      true    2                       2
6bb9f682        xxxxxxx:29111      true    15                      15
c782f104        xxxxxxx:45772      true    4                       4

=== Cluster Info ===

Master: 6bb9f682

===== Keepers tree =====

6bb9f682 (master)
├─5600ba68
└─c782f104

On front, i have a keepalived for a floating vip.

Only thing i have to do on this nomad file is to change user from sentinel and proxy (no need to be root i think).

Hope it can help you for a nomad integration... i will test it more on next week.

from stolon.

LordFPL avatar LordFPL commented on May 13, 2024

I little update : it's more interesting to separate nomad file in three parts.
IMHO :

  • sentinels : don't need more than two
  • keeper : can be adjusted with two or three
  • proxy : in my case, i'm using keepalived, and i have to put a proxy on each node... so this nomad job is a system job (or i may add a constraint to be collocated with keepalived).

from stolon.

codekoala avatar codekoala commented on May 13, 2024

@LordFPL thank you for describing your setup. I'm interested to learn more about your setup after splitting things into different parts. Have you noticed any other possible tweaks since 2 days ago?

from stolon.

LordFPL avatar LordFPL commented on May 13, 2024

Hi @codekoala , all seem to be ok, tweaks are mainly on postgres now as stolon is only here for availibility.
I don't have many time actually, so tests are mainly with pgbench, and now i'm installing iRODS on it. Since all my needs are pretty simple, i feel confident ;)

from stolon.

scalp42 avatar scalp42 commented on May 13, 2024

Anyone knows how to pass an ACL Consul token in that scenario so that Stolon can access the KV?

from stolon.

sgotti avatar sgotti commented on May 13, 2024

@scalp42 please ask on gitter or mailing list (not related to this issue). BTW you should just export the CONSUL_HTTP_TOKEN env var before starting all the stolon components. If this doesn't work please open a new issue with the steps to reproduce it.

from stolon.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.