Skip to content

Instantly share code, notes, and snippets.

@victorouttes
Last active February 7, 2024 18:18
Show Gist options
  • Save victorouttes/cb4f59fab717f7d10fac20934608b3c2 to your computer and use it in GitHub Desktop.
Save victorouttes/cb4f59fab717f7d10fac20934608b3c2 to your computer and use it in GitHub Desktop.
Instalação do Dremio

Instalação básica do Dremio

Rodar este docker-compose.yml no servidor:

version: '3.1'

services:

  dremio:
    image: dremio/dremio-oss:<tag>
    container_name: dremio
    restart: always
    ports:
      - 9047:9047
      - 31010:31010
      - 45678:45678
    volumes:
      - /opt/dremio/data:/opt/dremio/data

com:

docker-compose up -d

Backup

Entrar no bash do container:

docker exec -it dremio /bin/bash

Rodar o backup:

bin/dremio-admin backup -d /tmp/backup -l
exit

Puxar o backup do container para o host:

docker cp dremio:/tmp/backup ~/backups

Upgrade de versão no Dremio

  • Pare o serviço do dremio:
docker-compose down
  • Baixe a nova versão desejada:
docker pull dremio/dremio-oss:<tag-nova>
  • Executar um novo container em modo shell, apontando um volume para a pasta dos metadados da versão anterior:
docker run --name dremio --rm -v /opt/dremio/data:/opt/dremio/data --entrypoint=bash -it dremio/dremio-oss:<tag-nova>
  • Dentro do shell, rodar um upgrade para a versão nova atualizar os metadados antigos para a versão nova do dremio:
bin/dremio-admin upgrade
exit
  • Agora atualize o docker-compose.yml para apontar para a imagem nova:
version: '3.1'

services:

  dremio:
    image: dremio/dremio-oss:<tag-nova>
    container_name: dremio
    restart: always
    ports:
      - 9047:9047
      - 31010:31010
      - 45678:45678
    volumes:
      - /opt/dremio/data:/opt/dremio/data
  • Pode iniciar o container:
docker-compose up -d

PS: Você pode ver a versão do Dremio pela aplicação, indo em Help > About Dremio. Caso ainda esteja aparecendo a versão antiga, pode ser cache do navegador. Dê um SHIFT + F5 na página.

Sqlalchemy como cliente

Você pode usar agora o sqlalchemy como cliente para o Dremio. Instale:

sudo dnf install libnsl
pip install sqlalchemy_dremio

Você vai precisar ter o driver ODBC de qualquer jeito instalado no seu SO.

Instalação EKS

Você precisa ter o "kubectl" e o "helm" configurados na sua máquina!

Clonar o projeto https://github.com/dremio/dremio-cloud-tools.

Dentro do projeto você vai entrar na pasta "charts/dremio_v2/" e vai criar uma cópia do arquivo "values.yaml" com o nome "values.local.yaml". Fazer as alterações necessárias no arquivo. Aqui vai um exemplo funcional.

image: dremio/dremio-oss
imageTag: 4.8.0

annotations: {}
podAnnotations: {}
labels: {}
podLabels: {}
nodeSelector: {}
tolerations: []

# Dremio Coordinator
coordinator:
  cpu: 5
  memory: 12800

  count: 0
  volumeSize: 10Gi

  # Web UI
  web:
    port: 9047
    tls:
      enabled: false

      secret: dremio-tls-secret-ui

  # ODBC/JDBC Client
  client:
    port: 31010
    tls:
      enabled: false

      secret: dremio-tls-secret-client

# Dremio Executor
executor:
  cpu: 5
  memory: 12800

  engines: ["default"]
  count: 3

  # Executor volume size.
  volumeSize: 20Gi

  cloudCache:
    enabled: true

    volumes:
    - size: 10Gi

# Zookeeper
zookeeper:
  # The Zookeeper image used in the cluster.
  image: k8s.gcr.io/kubernetes-zookeeper
  imageTag: 1.0-3.4.10

  cpu: 0.5
  memory: 1024
  count: 3

  volumeSize: 10Gi

distStorage:
  type: "local"

extraVolumes: []
extraVolumeMounts: []

# Dremio Service
# The dremio-client service exposes the service for access outside of the Kubernetes cluster.
service:
  type: NodePort
  spec:
    ports:
      - name: client
        port: 31010
        protocol: TCP
        targetPort: client
      - name: web
        port: 9047
        protocol: TCP
        targetPort: web
    selector:
      app: dremio-coordinator

Dentro da pasta "charts/dremio_v2/", execute:

helm install dremio480 . -f values.local.yaml --namespace dremiolab

Você pode mudar o valor "dremio480" para qualquer nome que vá identificar seu deploy pra facilitar futuros upgrades. O valor "dremiolab" é o nome do namespace do EKS (você cria previamente na interface do EKS), serve apenas para organizar os pods.

Backups

Para fazer backup do dremio no EKS entre na máquina do "dremio-master" como bash e rode:

bin/dremio-admin backup -u <usuario> -p <senha> -d /tmp/backup

Atenção: evite usar outro diretório para salvar o backup por questões de permissão.

Quando o backup for gerado você pode baixá-lo pra sua máquina rodando (de sua máquina, com kubectl configurado!):

kubectl cp dremiolab/dremio-master-0:/tmp/backup /home/victor/Downloads/dremio_backups

Upgrade de versão

É mais simples fazer o upgrade no EKS. Basta você alterar no seu arquivo "values.local.yaml" a versão da imagem do dremio e rodar, na pasta "charts/dremio_v2/":

helm upgrade dremio480 . -f values.local.yaml --namespace dremiolab

O helm do dremio foi construído para deixar bem simples o processo de upgrade. Durante o processo ele cria um container para executar os upgrades necessários nos dados e estruturas do banco de dados interno, não necessitando fazer manualmente. Atenção que ele não suporta downgrade!

Backup, Restore e Update no Kubernetes

  • dremio1 --> versão producao
  • dremio2 --> versão nova, limpa
  1. Tirar backup de dremio1:
bin/dremio-admin backup -u login -p senha -d /tmp/backup -i -j
  1. Salvar o backup localmente:
kubectl cp dremio/dremio-master-0:/tmp/backup /home/victor/Downloads/dremio_backups
  1. No dremio2, setar o dremio-master para zero pods

  2. Criar o pod "dremio-admin" no namespace de dremio2:

apiVersion: v1
kind: Pod
metadata:
  name: dremio-admin
spec:
  containers:
  - name: dremio-admin
    image: dremio/dremio-oss:4.9.1
    imagePullPolicy: IfNotPresent
    stdin: true
    tty: true
    resources:
      requests:
        cpu: 5
        memory: 12800M
    volumeMounts:
    - name: dremio-master-volume
      mountPath: /opt/dremio/data
    - name: dremio-config
      mountPath: /opt/dremio/conf
    command: ["sleep", "infinity"]
  volumes:
  - name: dremio-master-volume
    persistentVolumeClaim:
      claimName: dremio-master-volume-dremio-master-0
  - name: dremio-config
    configMap:
      name: dremio-config
  1. Limpar a pasta data/db/ dentro de dremio2:dremio-admin:
cd data/db
rm -rf *
  1. Puxar o backup para o dremio2:dremio-admin:
kubectl cp /home/victor/Downloads/dremio_backups/nome-da-pasta dremio2/dremio-admin:/tmp/backup
  1. Rodar o restore dentro do dremio2:dremio-admin:
bin/dremio-admin restore -d /tmp/backup -v -r
  1. Rodar um clean no dremio2:dremio-admin:
bin/dremio-admin clean
  1. Pode deletar o dremio2:dremio-admin!

  2. Vá no dremio1:dremio-master e aumente de volta a quantidade de pods

  3. Mande editar o app inteiro, atualizando a versão da imagem de 4.9.1 para 15.5.0

@RicardoBorgesGO
Copy link

Muito bom.
Obrigado.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment