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
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
- 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.
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.
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.
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
É 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!
- dremio1 --> versão producao
- dremio2 --> versão nova, limpa
- Tirar backup de dremio1:
bin/dremio-admin backup -u login -p senha -d /tmp/backup -i -j
- Salvar o backup localmente:
kubectl cp dremio/dremio-master-0:/tmp/backup /home/victor/Downloads/dremio_backups
-
No dremio2, setar o dremio-master para zero pods
-
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
- Limpar a pasta data/db/ dentro de dremio2:dremio-admin:
cd data/db
rm -rf *
- Puxar o backup para o dremio2:dremio-admin:
kubectl cp /home/victor/Downloads/dremio_backups/nome-da-pasta dremio2/dremio-admin:/tmp/backup
- Rodar o restore dentro do dremio2:dremio-admin:
bin/dremio-admin restore -d /tmp/backup -v -r
- Rodar um clean no dremio2:dremio-admin:
bin/dremio-admin clean
-
Pode deletar o dremio2:dremio-admin!
-
Vá no dremio1:dremio-master e aumente de volta a quantidade de pods
-
Mande editar o app inteiro, atualizando a versão da imagem de 4.9.1 para 15.5.0
Muito bom.
Obrigado.