15 Kasım 2021 Pazartesi

Vitess Vttestserver Docker Image - Hazır Docker Image

Giriş
Bu test için kullanılan bir docker image. Maalesef içinden vtctl komutu çıkmıyor. İndirmek için şöyle yaparız
docker pull vitess/vttestserver:mysql80
Docker dosyasında kullanılabilecek ortam değişkenleri listesi burada. Sadece KEYSPACES,NUM_SHARDS, PORT değişkenleri mecburi

Örnek - Dockerfile
Şöyle yaparız. Burada boş bir veri tabanı oluşturuluyor
FROM vitess/vttestserver:mysql80

ENV PORT=33574
EXPOSE 33577

ENV KEYSPACES=ope
ENV NUM_SHARDS=1
ENV MYSQL_MAX_CONNECTIONS=2000
ENV MYSQL_BIND_HOST=0.0.0.0
ENV MYSQL_SERVER_VERSION=8.0.23
Image oluşturmak için şöyle yaparız
docker build -t myserver .
Çalıştırmak için şöyle yaparız. Böylece artık harici bir mysql ile de bağlanabiliriz.
docker run --rm --name myserver -p 33577:33577 myserver
Örnek - Dockerfile
Şöyle yaparız
FROM vitess/vttestserver:mysql80
ENV KEYSPACES=unsharded ENV NUM_SHARDS=1 ENV MYSQL_MAX_CONNECTIONS=2000 ENV MYSQL_BIND_HOST=0.0.0.0 ENV MYSQL_SERVER_VERSION=8.0.23 COPY create_schema.sql /tmp/create_schema.sql COPY entrypoint.sh /entrypoint.sh USER root RUN chmod 777 /tmp/create_schema.sql RUN chmod 777 /entrypoint.sh USER vitess ENTRYPOINT ["/entrypoint.sh"] CMD [""]
create_schema.sql dosyasında CREATE TABLE gibi tabloları yaratan SQL komutları var

entrypoint.sh ise şöyle
#!/bin/bash

VTGATE_SQL_PORT=$(($PORT + 3))

set -e

echo "Entrypoint start..."

# start vitess
/bin/sh -c /vt/run.sh &

echo "Waiting for vtgate to be up..."
while true; do
 curl -I "http://localhost:$PORT/debug/status" >/dev/null 2>&1 && break
 sleep 3
done;
echo "vtgate is up!"


alias mysql="mysql -h 127.0.0.1 -P $VTGATE_SQL_PORT"
shopt -s expand_aliases

# initial data
INIT_FILE=/tmp/import_done.txt
if [ ! -f "$INIT_FILE" ]; then
  echo "Starting to import inital data"
  mysql < /tmp/create_schema.sql
  touch $INIT_FILE
  echo "Initial data import done! Database ready for use"
else
    echo "Nothing to import. Database ready for use"
fi

# Workaround for graceful shutdown.
while [ "$END" == '' ]; do
sleep 1
done

Örnek
Çalıştırmak ve bir bash cli açmak için şöyle yaparız
docker run --name=vttestserver \
  --rm \
  -p 33577:33577 \
  -e PORT=33574 \
  -e KEYSPACES=test,unsharded -e NUM_SHARDS=2,1 \
  -e MYSQL_MAX_CONNECTIONS=70000 -e MYSQL_BIND_HOST=0.0.0.0 \
  --health-cmd="mysqladmin ping -h127.0.0.1 -P33577" \
  --health-interval=5s \
  --health-timeout=2s \
  --health-retries=5 \
  vitess/vttestserver:mysql80
bash cli açmak için şöyle yaparız
docker exec -it vttestserver bash
Aslında bu komutu kullanınca Go ile yazılmış bir uygulama çalıştırılıyor. Bu uygulamaya ilave parametreler de girmek mümkün sanırım. Ben denediğimde işe yaramadılar.

Daha sonra cli içinden mysql ile bağlanırız
mysql --host 127.0.0.1 --port 33577 --user "root"
Merak ediyorsak veri tabanlarına bakarız
SHOW DATABASES;
Biz unsharded isimli veri tabanını kullanacağımız için ona geçiş yaparız
USE unsharded;
Daha sonra bir tablo yaratırız.
CREATE TABLE product (sku VARBINARY(128),description VARBINARY(128),
  price BIGINT,PRIMARY KEY(sku));
Tabloya kayıt ekleyelim
INSERT INTO product(sku,description,price) VALUES (1,2,3);
Tablo için select denemesi yapalım
SELECT * FROM product;
Şimdi bir sequence yaratalım
CREATE TABLE user_seq(id INT, next_id BIGINT, cache BIGINT, PRIMARY KEY(id))
  COMMENT 'vitess_sequence';
INSERT INTO user_seq(id, next_id, cache) VALUES(0, 1, 100);
Sequence vscheme'ya eklenmeli. Şöyle yaparız
ALTER vschema ADD SEQUENCE user_seq;
Şimdi sequence'tan yeni bir sayı alalım. nextval 1 gelecektir. İkinci kere denersek 2 gelir vs.
SELECT NEXT VALUE FROM user_seq;








 


Hiç yorum yok:

Yorum Gönder

CREATE EVENT - Scheduled Task İçindir

Örnek Şöyle yaparız CREATE EVENT myevent     ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR     DO       UPDATE myschema.mytable SET myc...