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/bashVTGATE_SQL_PORT=$(($PORT + 3))set -eecho "Entrypoint start..."# start vitess/bin/sh -c /vt/run.sh &echo "Waiting for vtgate to be up..."while true; docurl -I "http://localhost:$PORT/debug/status" >/dev/null 2>&1 && breaksleep 3done;echo "vtgate is up!"alias mysql="mysql -h 127.0.0.1 -P $VTGATE_SQL_PORT"shopt -s expand_aliases# initial dataINIT_FILE=/tmp/import_done.txtif [ ! -f "$INIT_FILE" ]; thenecho "Starting to import inital data"mysql < /tmp/create_schema.sqltouch $INIT_FILEecho "Initial data import done! Database ready for use"elseecho "Nothing to import. Database ready for use"fi# Workaround for graceful shutdown.while [ "$END" == '' ]; dosleep 1done
Ö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.
mysql --host 127.0.0.1 --port 33577 --user "root"
SHOW DATABASES;
USE unsharded;
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