Uygulama

ProxySQL ile Yük Dengeleme: 8 Kolay Adım

Günümüzün veri odaklı işletmeleri, Veritabanlarını yönetmek için MySQL’e güveniyor.  Bulut tabanlı mimarisi sayesinde MySQL, şirketler için yüksek işlem gücü ve güvenilirlik sağlayan ideal bir DBMS (Veritabanı Yönetim Sistemi) sağlar.  Üstelik Uygulama Geliştiricileri, popüler İşletim Sistemleri ve Programlama Dilleri ile kolayca uyumlu olduğundan MySQL’in Sorgu İşleme Motorunu beğenmektedir.  Ancak Veritabanı Yöneticileri bazen MySQL’in sınırlı Sorgu Değiştirme seçeneklerinden dolayı hayal kırıklığına uğrarlar.  Üstelik bu platform, büyük veri kümeleriyle çalışan uygulamalar için Yük Paylaşımını uygulamak için doğrudan bir yol sağlamaz.  ProxySQL’in devreye girdiği yer burasıdır!

ProxySQL, SQL trafiğini anlar ve bu nedenle kapsamlı yönlendirme yeteneğine sahiptir.  Bu, Yük Dengeleme ile birleştiğinde, MySQL Veritabanı ile çalışan uygulamaların daha hızlı sorgu işleme ve veritabanı çökmelerine karşı daha güçlü dayanıklılık elde etmesine olanak tanıyacaktır.  Bunu MySQL ile kullanmak, Sorgu yansıtma ve Sorgu Yeniden Yazma özellikleri nedeniyle şirketlerin Veritabanı Sorgularını serbestçe yönetmesine olanak tanır.  Bu şekilde Veritabanı Yöneticileri trafiğini yansıtabilir ve sorguları gereksinimlerine göre yönetebilir.  Ayrıca, anında sorgu yazmaya bile olanak tanır ve temel veritabanındaki herhangi bir yapısal değişiklik, çalışan uygulamaları hiçbir şekilde etkilemez.

Bu makale size MySQL ve ProxySQL’i temel özellikleriyle birlikte tanıtacaktır.  Ayrıca MySQL kullanıcıları için ProxySQL’in önemi de tartışılacaktır.  Makale daha sonra ProxySQL’i MySQL veritabanlarınıza uygulamak için adım adım süreç boyunca size rehberlik edecektir.  Bu aracın yararları hakkında daha fazla bilgi edinmek için okumaya devam edin!

 

Önkoşullar

  • Kök olmayan bir kullanıcıyı içeren ve bir güvenlik duvarı tarafından korunan bir Ubuntu 16.04 sunucusu.  Bu sunucu ProxySQL örneğiniz olarak görev yapacak.
  • 3 MySQL sunucusu çok birincil çoğaltma grubu oluşturacak şekilde yapılandırılmıştır.

MySQL nedir?

Image Source

MySQL, veritabanlarınızı yönetmek için Bulut Teknolojisinden yararlanan sağlam bir sistemdir.  1995 yılında başlatılan bu DBMS, kayıt manipülasyonu ve diğer veri yönetimi işlemleri için SQL’i (Yapılandırılmış Sorgu Dili) kullanır.  Bu açık kaynaklı araca, hizmetlerini sunmak isteyen herkes kolayca erişebilir.  Ancak MySQL’in özel iş gereksinimlerinizi karşılamak için sunduğu bazı gelişmiş özellikler vardır.  Aylık kullanım ücreti ödeyerek bu özelliklerden yararlanabilirsiniz.  Zengin araç seti ve yerleşik özellikleri nedeniyle günümüzde işletmeler, sürekli artan verileri için ölçeklenebilir ve güvenli veri yönetimine sahip olmak amacıyla MySQL platformuna büyük ölçüde güveniyor.

MySQL’in Oracle veritabanları ve Microsoft SQL Serve gibi benzer DBMS’lere göre size sunacağı büyük bir avantaj, basitliği ve herhangi bir programlama dilini ücretsiz olarak kullanabilme yeteneğidir.  MySQL’in popülaritesinin bir diğer önemli nedeni de Linux, Unix, Windows ve diğer işletim sistemleriyle kolayca entegre olabilme yeteneğinde yatmaktadır.  Ayrıca MySQL ile tercih ettiğiniz uygulama modunu seçebilirsiniz.  Bu, bu DBMS’yi çevrimiçi olarak veya yerel bilgisayarlarınıza yükledikten sonra kullanmanıza olanak tanır.

MySQL’in Temel Özellikleri

Aşağıdaki temel özellikler MySQL’i popüler bir DBMS tercihi haline getirmektedir:

  • Yüksek performans: MySQL ile çok basit bir kullanıcı arayüzü kullanırken yüksek hızlı sorgu işleme deneyimini yaşayabilirsiniz.  Üstelik hızlı ve global erişilebilirliği sayesinde çok sayıda kullanıcıya aynı anda hizmet verebilmektedir.
  • Uyumluluk: MySQL, veritabanınız için güvenli veri işlemleri sağlar ve düşük gecikmeyle çalışır.  Veri kullanımınızı optimize etmek için MySQL platformuna birden fazla web geliştirme aracı da ekleyebilirsiniz.
  • Ölçeklenebilirlik: MySQL, veri ihtiyaçlarınızı istediğiniz zaman ölçeklendirmenize veya küçültmenize olanak tanır.  Ayrıca Linux, OS X, Windows vb. gibi yaygın işletim yapılarına sorunsuz bir şekilde uyum sağlar.

MySQL platformunun özellikleri hakkında daha fazla bilgi edinmek için burayı ziyaret edin.

ProxySQL nedir?

Image Source

ProxySQL, bir Veritabanı Yöneticisinin büyük, parçalı bir MySQL ortamında çalışırken karşılaştığı kritik sorunları çözmek için 2015 yılında piyasaya sürüldü.  MySQL için açık kaynaklı bir proxy sunucusudur ve MySQL sunucusu ile veritabanlarında çalışan uygulamalar arasında köprü görevi görür.  Bu araç, birden fazla veritabanı sunucusundan oluşan bir havuz arasındaki trafik yükünü dengelemede uzmanlaşmıştır.  Bu şekilde sorgu işleme hızını ve ölçeklenebilirliğini artırır.

ProxySQL allows for high data availability by automatically failing over to a standby in case one or more database servers fail. It also enables you to rewrite “wrong queries” in a live database environment. Moreover, it allows you to perform changes in the underlying database without affecting the application in production.

ProxySQL’in Temel Özellikleri

ProxySQL, aşağıdaki özellikleriyle MySQL deneyiminizi geliştirebilir:

  • Uygulama Katmanı Proxy’si: MySQL protokollerine uyum sağlama yeteneğine sahiptir ve gelişmiş bağlantı yönetimi özellikleri sağlar.
  • Veritabanı Güvenlik Duvarı: Güvenlik duvarı, gelen ve giden trafiği izler ve dosyalarınızın kötü amaçlı içerikten korunmasını sağlar.
  • Parçalama ve Yeniden Yazma:  Veritabanı yükünüzü sunucular arasında parçalamanıza olanak tanır.  Ayrıca dönüştürme komutlarını anında yeniden yazmanıza olanak tanır

ProxySQL hakkında daha fazla bilgi edinmek için burayı ziyaret edin.

Hevo’nun Kodsuz Veri İşlem Hattı ile Veri Analizinizi basitleştirin

Kodsuz bir Veri Boru Hattı olan Hevo Data, MySQL, SaaS uygulamaları, Bulut Depolama, SDK’lar ve Akış Hizmetleri gibi herhangi bir veri kaynağından veri yüklemeye yardımcı olur ve ETL sürecini basitleştirir.  100’den fazla veri kaynağını destekleyerek istenilen Veri Ambarı’na veriyi yükler, veriyi zenginleştirir ve tek satır kod yazmaya gerek kalmadan analize hazır bir forma dönüştürür.

Tamamen otomatikleştirilmiş boru hattı, verilerin kaynaktan hedefe herhangi bir kayıp olmadan gerçek zamanlı olarak iletilmesini sağlar.  Hataya dayanıklı ve ölçeklenebilir mimarisi, verilerin sıfır veri kaybıyla güvenli, tutarlı bir şekilde işlenmesini sağlar ve farklı veri biçimlerini destekler.  Sağlanan çözümler tutarlıdır ve farklı İş Zekası (BI) araçlarıyla da çalışır.

Hevo’nun neden En İyisi olduğuna göz atın:

  • Secure: Hevo has a fault-tolerant architecture that ensures that the data is handled in a secure, consistent manner with zero data loss.
  • Schema Management: Hevo takes away the tedious task of schema management & automatically detects the schema of incoming data and maps it to the destination schema.
  • Minimal Learning: Hevo, with its simple and interactive UI, is extremely simple for new customers to work on and perform operations.
  • Hevo Is Built To Scale: As the number of sources and the volume of your data grows, Hevo scales horizontally, handling millions of records per minute with very little latency.
  • Incremental Data Load: Hevo allows the transfer of data that has been modified in real-time. This ensures efficient utilization of bandwidth on both ends.
  • Live Support: The Hevo team is available round the clock to extend exceptional support to its customers through chat, email, and support calls.
  • Live Monitoring: Hevo allows you to monitor the data flow and check where your data is at a particular point in time.

ProxySQL Ek Yükü nedir?

ProxySQL, MySQL altyapılarınıza önbelleğe alma ve bağlantı çoğullama gibi birçok işlevsellik sunar – ancak ücretsiz değildir!  Sonuçta veritabanınızın ek işlem süreçlerinden geçmesi gerekir ve bu da bir miktar masraf yaratır.  Yükün devreye girdiği yer burasıdır ve bunu nasıl hesaplayacağınızı bilmelisiniz.

ProxySQL söz konusu olduğunda iki tür ek yük vardır:

  1. Ağ ProxySQL Ek Yükü
  2. ProxySQL Ek Yükünü İşleme

Şimdi kısaca iki ProxySQL Overhead’inden bahsedelim.

Ağ ProxySQL Ek Yükü

Ağ Ek Yükü ProxySQL’in konuma bağlıdır.  Aşağıda verilen örnekte ProxySQL ayrı bir host üzerinde bulunmaktadır.

ProxySQLImage credits: percona

Doğrudan ProxySQL Sunucularını sorgulamayla karşılaştırıldığında uygulama, her sorgu için ek ağ gecikmesine neden olacaktır.  Bu gecikme, ProxySQL aynı yerel ağda kuruluysa birkaç milisaniyeden, yetersiz ProxySQL konumları seçtiyseniz çok daha fazlasına kadar değişebilir.

ProxySQL’in MySQL ve Uygulamadan farklı bölgelere kurulduğu ve bunun onlarca milisaniyelik gecikmeye (ve birçok sorgu için yüzde 100’den fazla ek yüke) neden olduğu senaryoları gözlemledik.

ProxySQL Ek Yükünü İşleme

İşleme Ek Yükü’ndeki en kötü senaryo, sorgu kurallarına dayalı binlerce ifadenin çok yüksek ek yük oluşturabileceği durumdur.  Sorun, ProxySQL’in aldığı her isteğin ek işlemler gerçekleştirmesi durumunda ortaya çıkar.  Yeterli CPU gücü mevcut olduğunda, bu tür işlemler için temel maliyet etkenleri sorgunun boyutu, sonuç kümesi boyutu ve ProxySQL ayarlarınız olacaktır.  Ne kadar çok sorgu kuralınız varsa ve bunlar ne kadar karmaşıksa, o kadar fazla işlem yükü beklemelisiniz.

How to Measure & Reduce the ProxySQL Overhead?

Measuring network overhead can be tricky because it’s environment-specific; hence, in this section, we would rather look at processing overhead in cases we are running ProxySQL.

MySQLDump

En mantıksız testle başlayalım: MySQLDump’ı dev tabloda (yaklaşık 2 GB) çalıştırmak ve bunun ne kadar süreceğini hesaplamak.  Bu test, sorgu yönlendirme çabasının bu senaryoda önemsiz olması nedeniyle ProxySQL’de sonuç işlemenin ne kadar maliyetli olduğunu gösterir.

Image credits: percona

ProxySQL, %20 daha hızlı yanıt süreleri elde etmemizi sağlar (sonuçların MySQLDump tarafından işlenmesi dikkate alındığında, gerçek sorgu yürütme süresi farkının muhtemelen daha yüksek olduğu dikkate alınır).

Başka bir açıdan bakıldığında, 10 milyon satırı işlemek için ek 4,75 saniyemiz var, bu da ProxySQL ek yükünün yaklaşık 200 baytlık satır için 475 ns olduğu anlamına geliyor ki bu gerçekten oldukça makul.

64 Eşzamanlı Bağlantı İş Yükü

Bu iş yükü için, 28 Çekirdekli ve 56 mantıksal CPU iş parçacığına sahip sunucuyu kullanacağız ve ProxySQL’in kendisini diyette tutmadığından emin olmak için mysql iş parçacıklarını 32’ye yükseltmem gerekiyor.

Image credits: percona

Burada çok ilginç veriler var.  İlk olarak, Hazırlanmış İfadeleri devre dışı bırakmanın bize doğrudan MySQL bağlantısıyla %15 ve ProxySQL’den geçerken yaklaşık %13,5 yavaşlama sağladığını görebiliriz; bu, Hazır İfadeler devre dışı bırakıldığında ProxySQL tarafındaki İşleme yükünün o kadar artmaması gerektiği için mantıklıdır.

Doğrudan bağlantı ile ProxySQL üzerinden geçiş arasındaki performans önemlidir, ancak doğrudan geçiş, Hazırlanmış İfadeler kullanımdayken neredeyse %80 daha hızlıdır ve Hazırlanmış İfadeler devre dışı bırakıldığında %75’in üzerindedir.

Bu sayıları düşünürseniz – sysbench’in kendisinin bazı kaynaklar aldığını düşünürsek, önemsiz birincil anahtar arama sorguları için ProxySQL’in ihtiyaç duyduğu kaynak sayısı, sorguyu sunmak için MySQL Server’ın ihtiyaç duyduğu kaynak sayısıyla karşılaştırılabilir.

Tek Bağlantı İş Yükü

Aynı basit nokta arama sorgusunun hızına bir göz atalım, ancak bu sefer yalnızca tek bir iş parçacığıyla.  Ayrıca CPU kaynakları için önemli bir çakışma olmadığından emin olmak ve verimliliği inceleyebilmek için Sysbench ve ProxySQL’i çeşitli CPU çekirdeklerine programlıyoruz.  Bu testteki tüm bağlantılar UNIX Soketi aracılığıyla yapılır, dolayısıyla en iyi senaryolara bakıyoruz ve Hazırlanmış İfadeler etkinleştiriliyor.

Image credits: percona

Doğrudan bağlantı, aktarım hızı açısından ProxySQL’den yaklaşık %55 daha iyi performans gösterir.

Başka bir yöntem, sorgunun doğrudan ve ortada ProxySQL ile sunulmasının ne kadar süreceğini hesaplamaktır – MySQL Directly ile 46 mikrosaniye ve ProxySQL ile 71 mikrosaniyedir; bu, ProxySQL’in kabaca 25 mikrosaniye eklediğini gösterir.

25 mikrosaniye, bu tek ana bilgisayar bağlamında ve temel sorgular için genel sorgu yürütmenin önemli bir kısmı olsa da, daha karmaşık sorgular ve ağ tabanlı dağıtımlar için çok daha az alakalı olabilir.

Unix Soketi ve TCP/IP

Aynı şeyin ProxySQL dağıtımı için de geçerli olacağını varsaymak mantıklıdır, ancak ProxySQL’de yönetmemiz gereken iki bağlantı vardır: ProxySQL ile MySQL Sunucusu arasındaki bağlantı ve ProxySQL ile Uygulama arasındaki bağlantı.  Her iki durumda da tek ana bilgisayar testimizde Unix Soketini kullanabiliriz.  ProxySQL’i bir uygulama sepeti olarak veya MySQL Sunucusunda kullanıyorsanız, bu bağlantılardan en az biri için bir Unix soketi kullanabileceksiniz.

“U” ve “T” harfleri bağlantı türlerini temsil eder; “UU”, her iki bağlantı için de Unix Soketinin kullanıldığını, “TT” ise her iki yerde de TCP/IP’nin kullanıldığını belirtir.

Image credits: percona

Sonuçlar oldukça öngörülebilir; en iyi performans için Unix Soket kullanın, ancak bağlantı türlerinden biri için Soket kullanmak bile performansı artırır.

Her iki bağlantı türünde de Unix Soketi yerine TCP/IP kullanılması performansı %20’den fazla düşürür.

TCP/IP’nin ne kadar gecikme eklediğini hesaplamak için aynı aritmetiği kullanırsak 20 mikrosaniye elde ederiz; bu, TCP/IP üzerinden ProxySQL’in, Unix Soketi aracılığıyla ProxySQL’e kıyasla neredeyse iki kat daha fazla işlem gecikmesi sağladığı anlamına gelir.

Yük Dengeleme İçin ProxySQL’in Önemi

ProxySQL, aşağıdaki nedenlerden dolayı MySQL Veritabanlarınız arasındaki Yük Dengeleme sürecini geliştirebilir:

  • Bağlantı Çoğullama’dan yararlanarak bağlantı kullanımını büyük ölçüde azaltabilirsiniz.  Ayrıca, tek bir arka uç bağlantısı üzerinden birden çok ön uç bağlantısına dinamik olarak hizmet vererek Yük Dengeleme’yi uygulayabilirsiniz.
  • Karmaşık Sorgu Kuralları oluşturmanıza olanak tanır.  Bu kurallar, kopyalar arasında dağıtılmış okumalar sağlayarak veritabanı sorgu işlemenizi geliştirir.  Ayrıca sorguları yüksek düzeyde ayrıntılı ölçütlerle anında yeniden yazma olanağı sunar ve yüksek ProxySQL performansı sağlar.
  • Az yer kapladığı için herhangi bir biçimde kolayca dağıtabilirsiniz.  Örneğin uygulama sunucularınız için merkezi olmayan bir şekilde veya sunucular içinde merkezi bir katmanda kullanabilirsiniz.
  • Sıfır satıcılar, tam MySQL uyumluluğunu korurken uygulamalarınızı kilitlemenize izin verir.  Bu şekilde Yük Dengeleme için ortamınıza temiz ve basit bir entegrasyon sağlar.

ProxySQL Kavramları ve Mimarisi

ProxySQL Mimarisi aşağıdaki ana bileşenlerden oluşur:

  • Query Rules Engine: MySQL ile iyi entegre olur ve protokolüne göre çalışır.  Sorgu Kuralları Motoru, gelen trafiği izler ve bir sorgunun önbelleğe alınmasına, engellenmesine, yeniden yazılmasına, yeniden yönlendirilmesine veya ana bilgisayar grubunun hedefine yansıtılmasına dinamik olarak karar verir.
  • User Authentication: Destekleyici veritabanları için gerekli kullanıcı kimlik bilgileri karma hale getirilir ve proxy’de güvenli bir şekilde saklanır.
  • Hostgroup Manager: Rolü sunucu gruplarını yönetmek, durumlarını takip etmek ve giden trafiği düzenlemektir.
  • Connection Pool: Bu, arka uç veritabanlarına olan bağlantıların çalışmasını sağlar.  Bu havuz arka uçlarla kurulur ve bağlantılar tüm uygulamalar tarafından paylaşılır.

ProxySQL ile Yük Dengelemeyi Ayarlama Adımları

 

Adım 1: ProxySQL’i yükleyin

ProxySQL’in en son Ubuntu uyumlu sürümünü buradan indirin ve /tmp dizininde saklayın.

cd /tmp
curl -OL https://github.com/sysown/proxysql/releases/download/v1.4.4/proxysql_1.4.4-ubuntu16_amd64.deb

Aşağıda gösterildiği gibi .deb dosyasını kullanarak kurulumu tamamlayın:

sudo dpkg -i proxysql_*
rm proxysql_*

Şimdi, önceden paketlenmiş en son sürümle çalıştığınızdan emin olmak için deponuzu güncelleyin ve ardından mysql-client paketini aşağıdaki gibi yüklemek için sudo apt komutunu kullanın:

sudo apt-get update
sudo apt-get install mysql-client

Şimdi hizmeti aşağıdaki komutla manuel olarak başlatın:

sudo systemctl start proxysql

ProxySQL artık varsayılan yapılandırmasıyla çalışacaktır.

Adım 2: Yönetici Parolasını Oluşturun

ProxySQL başlatıldıktan sonra yapılandırmasını güçlü bir parola kullanarak güvence altına alabileceğiniz bir veritabanında saklar.

Öncelikle, varsayılan olarak admin olan şifreyi girmeniz gereken yönetim arayüzüne gidin.

mysql -u admin -p -h 127.0.0.1 -P 6032 --prompt='ProxySQLAdmin> '

Başarılı bir şekilde oturum açtığınızı belirten bir hoş geldiniz notu göreceksiniz. Şimdi şifre kelimesini güçlü bir şeyle değiştirerek şifrenizi değiştirmek için aşağıdaki kodu kullanın:

UPDATE global_variables SET variable_value='admin:password' WHERE variable_name='admin-admin_credentials';

Değişikliklerinizi yürürlüğe koymak için bellek ayarlarını kopyalayın ve bunları aşağıdaki gibi diske kaydedin:

LOAD ADMIN VARIABLES TO RUNTIME;
SAVE ADMIN VARIABLES TO DISK;

Şimdi bu sekmeyi çalışır durumda tutun ve bu arada bu entegrasyonun MySQL kısmını kurmanın zamanı geldi.

Adım 3: MySQL İzlemeyi Yapılandırma

MySQL düğümlerini izlemek için öncelikle ProxySQL’in onlarla iletişim kurması gerekir.  Bu iletişimi kolaylaştırmak için her sunucuya özel bir kullanıcı aracılığıyla bağlanması gerekir.  Bu nedenle, kullanıcıları MySQL düğümleri için yapılandırmanız ve daha fazla sorgulama için SQL işlevlerini yüklemeniz gerekir.

MySQL grup çoğaltması arka planda çalıştığından, aşağıdaki adımı grubun yalnızca tek bir üyesi için uygulamanız gerekir.  Yeni bir terminalde aşağıdaki kodla bir MySQL düğümü kullanın ve bir sunucuda oturum açın:

ssh sammy@your_mysql_server_ip_1

Verilen kodu kullanın ve ProxySQL grup çoğaltması için gereken SQL dosyasını indirin:

curl -OL https://gist.github.com/lefred/77ddbde301c72535381ae7af9f968322/raw/5e40b03333a3c148b78aa348fd2cd5b5dbb36e4d/addition_to_sys.sql

Şimdi aşağıdaki komutu yürütün; herhangi bir çıktı oluşturulmazsa, bu, grup çoğaltmasının mevcut olduğu anlamına gelir:

mysql -u root -p < addition_to_sys.sql

Şimdi bir Monitör (kullanıcı) oluşturun ve verilen şifreyi güçlü bir şifreyle değiştirin:

CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitorpassword';

Yeni Monitöre gerekli ayrıcalıkları verin:

GRANT SELECT on sys.* to 'monitor'@'%';

Değişiklikleri tüm düğümlere uygulayın:

FLUSH PRIVILEGES;

4. Adım: ProxySQL İzlemeyi Yapılandırma

MySQL düğümlerine erişmesine izin vermek için ProxySQL’i kullanıcı bilgilerini kullanarak güncellemelisiniz.  MySQL terminal sekmesine gidin ve aşağıdaki komutu kullanın:

UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';

Aşağıdakileri yapılandırmak için aşağıdaki komutu kullanın:

LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

The monitor (user) is fully configured and now you have to inform the ProxySQL about the nodes.

Adım 5: MySQL Düğümlerini ProxySQL Sunucu Havuzuna Bağlayın

ProxySQL’in grup çoğaltması, tüm düğümleri 4 mantıksal duruma ayırır: Yazıcı, Yedek Yazıcı, Okuyucu, Çevrimdışı.  Bunlara karşılık gelen sayısal grup kimliklerini manuel olarak atamanız gerekir.  Burada şunları kullanabilirsiniz:

  • 1 çevrimdışı ana bilgisayar grubu için.
  • 2 yazıcı ev sahibi grubu için.
  • 3 okuyucu ana bilgisayar grubu için.
  • 4 yedek yazıcı ana bilgisayar grubu için.
INSERT INTO mysql_group_replication_hostgroups (writer_hostgroup, backup_writer_hostgroup, reader_hostgroup, offline_hostgroup, active, max_writers, writer_is_also_reader, max_transactions_behind) VALUES (2, 4, 3, 1, 1, 3, 1, 100);

Artık MySQL sunucularını ProxySQL’e ekleyebilirsiniz.  Aşağıdaki komutu kullanarak her sunucunun IP adresini ve ana bilgisayar grubunu mysql_servers tablosuna ekleyin:

INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (2, '203.0.113.1', 3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (2, '203.0.113.2', 3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (2, '203.0.113.3', 3306);

Ayrıntıları doğru sunuculara aktarmak için tekrar aşağıdaki komutu çalıştırın:

LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

Yukarıdaki komutların etkisini kontrol etmek için aşağıdakileri girin:

SELECT hostgroup_id, hostname, status FROM runtime_mysql_servers;

Aşağıdaki çıktıyı alacaksınız:


+--------------+-------------+--------+
| hostgroup_id | hostname    | status |
+--------------+-------------+--------+
| 2            | 203.0.113.1 | ONLINE |
| 2            | 203.0.113.2 | ONLINE |
| 2            | 203.0.113.3 | ONLINE |
| 3            | 203.0.113.1 | ONLINE |
| 3            | 203.0.113.2 | ONLINE |
| 3            | 203.0.113.3 | ONLINE |
+--------------+-------------+--------+
6 rows in set (0.01 sec)

Artık ONLINE düğümleri kullanmadan önce, her düğümün MySQL veritabanına erişebilmesi için kullanıcı kimlik bilgilerini yapılandırmanız gerekir.

Adım 6: MySQL’de Kullanıcı Oluşturun

Öncelikle ProxySQL kimlik bilgilerine sahip bir kullanıcı hesabı oluşturmalı ve kullanıcıya gerekli ayrıcalıkları vermelisiniz:

Not: 3. Adımda olduğu gibi, aşağıdaki adımları yalnızca tek bir üye üzerinde uygulamanız gerekir.  Ayrıca, aşağıdakileri kullanarak ona gerekli ayrıcalıkları verin:

CREATE USER 'playgrounduser'@'%' IDENTIFIED BY 'playgroundpassword';
GRANT ALL PRIVILEGES on playground.* to 'playgrounduser'@'%';

Son olarak aşağıdaki değişiklikleri uygulayın ve terminalden çıkın:

FLUSH PRIVILEGES;
EXIT;

Çalışmanızı doğrulamak için terminali tekrar açın ve şunu kullanın:

imysql -u playgrounduser -p

Şimdi şunu girin:

SHOW TABLES FROM playground;

Aşağıda gösterilene benzer bir çıktı almanız gerekir:


+----------------------+
| Tables_in_playground |
+----------------------+
| equipment            |
+----------------------+
1 row in set (0.00 sec)

Terminalden çıkmak için aşağıdaki komutu kullanın:

EXIT;

Bir sonraki adımda ProxySQL sunucusunda ilgili kullanıcıyı oluşturmanız gerekir.

Adım 7: ProxySQL Kullanıcısını Oluşturun

ProxySQL terminalinde şunu yazın:

INSERT INTO mysql_users(username, password, default_hostgroup) VALUES ('playgrounduser', 'playgroundpassword', 2);

Aşağıdakileri kullanarak yapılandırmayı taşıyın:

LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;

Şimdi yeni bir terminal açın ve veritabanı düğümlerine bağlanmak ve şunu yazmak için bu kimlik bilgilerini kullanabileceğinizi doğrulayın:

ssh sammy@your_proxysql_server_ip

ProxySQL, gelen istemci bağlantılarını dinlemek için 6033 numaralı bağlantı noktasını kullanır.  6033 numaralı bağlantı noktasını kullanarak gerçek veritabanına bağlanmayı deneyebilirsiniz. (Bunun için şifrenizi kullanmanız gerekecek. Bu blogdaki şifre, playgroundpassword şifresiydi.

mysql -u playgrounduser -p -h 127.0.0.1 -P 6033 --prompt='ProxySQLClient> '

Bu komutlar bir hoş geldiniz istemi açarsa, ProxySQL kimlik bilgilerinizi kabul etmiştir.

Adım 8: ProxySQL Yapılandırmasını Doğrulayın

Bu son adım, oyun alanı veritabanının ProxySQL’den hem okuma hem de yazma ifadelerine izin verdiğinden emin olmaktır.

Oyun alanı veritabanındaki verileri okuyabildiğinizi doğrulamak için aşağıdakileri yürütün:

SELECT * FROM playground.equipment;

Aşağıdakine benzer çıktı, MySQL veritabanından başarıyla veri okunduğunu doğrulayacaktır:

+----+--------+-------+--------+
| id | type   | quant | color  |
+----+--------+-------+--------+
|  3 | slide  |     2 | blue   |
| 10 | swing  |    10 | yellow |
| 17 | seesaw |     3 | green  |
+----+--------+-------+--------+
3 rows in set (0.00 sec)

Şimdi yazma komutunu doğrulamak için yukarıdaki tabloya yeni veriler eklemeyi deneyin:

INSERT INTO playground.equipment (type, quant, color) VALUES ("drill", 5, "red");

Şimdi SELECT komutunu çalıştırıyoruz:

SELECT * FROM playground.equipment;

Çıktı aşağıdakine benzer olmalıdır:

+----+--------+-------+--------+
| id | type   | quant | color  |
+----+--------+-------+--------+
|  3 | slide  |     2 | blue   |
| 10 | swing  |    10 | yellow |
| 17 | seesaw |     3 | green  |
| 24 | drill  |     5 | red    |
+----+--------+-------+--------+
4 rows in set (0.00 sec)

Bu kadar!  Artık ProxySQL kurulumunuz tamamlandı.  Şimdi kendiniz deneyin ve MySQL veritabanlarınız için ProxySQL performans ayarlamasını gerçekleştirin.

ProxySQL ile Yük Dengelemenin Faydaları

Image Source

Yük Dengelemenin bir uygulamanın üretkenliği üzerinde doğrudan etkisi vardır.  Geliştiriciler aşağıdaki avantajlardan yararlanmak için Veritabanlarının Yük Dengelemesi için MySQL Proxy’yi kullanmayı tercih ediyor:

  • MySQL trafiğini akıllıca izler ve okumaları yazmalardan buna göre ayırır.  Bu, yazmaların yalnızca ana düğümlere gönderilmesi gereken bir Master-Slave çoğaltma kurulumunu çalıştırmak için gereklidir.
  • Temel veritabanı topolojisini inceler.  Bu nedenle, belirli örneklerin yukarı veya aşağı olmasına bağlı olarak istekleri yalnızca sağlıklı veritabanlarına yönlendirir.  Ayrıca uygulamaları karmaşık veritabanı topolojisindeki değişikliklere karşı korur.
  • Sorguların analizini ve performansını hızlandırmak için sorgu iş yükü analitiği sunar.  Ayrıca yöneticilere güçlü kontrol mekanizmaları sağlar.  Yöneticiler bu özelliği kullanarak sorguları proxy katmanında önbelleğe alabilir, sorguları yeniden yönlendirebilir veya yanlış yazılmış bir sorguyu sorunsuz bir şekilde yeniden yazabilir.
  • Yük Dengeleme özelliği, genel altyapıda gerçekleştirilen işlemler açısından yöneticinin yüksek verimliliği korumasına destek olur

Yazının orijinalini buradan okuyabilirsiniz.