MySQL kümelerinin oldukça geniş bir deneyimine sahibiz - ve Percona, karmaşık yapılandırmaların sınırlarını zorlarken birçok kez bizimle birlikte çalıştı.
Magento salt okunur köleleri doğal olarak idare edebilir mi?
Magento , farklı veritabanı sunucularına (örneğin, EE 1.11 gibi) birkaç veri sürümünün haricinde, okuma / yazma işlemlerini yerel olarak yapabilme yeteneğine sahiptir select
; ve tüm update/write
sorguları tek bir yöneticiye iletme .
Ne zaman yapmalıyım
Bu daha uygun bir soru. MageStack gibi özel Magento işletim sistemleriyle , yerleşik sunucu tarafında gelişmiş önbellekleme tekniklerinin kullanılabilir olması ve kolayca kullanılması (Vernik ön uç önbellekleme ve Redis arka uç önbellekleme gibi) için daha yaygın hale geliyor.
Tarihsel olarak Magento, MySQL tarafından hiçbir zaman bağlanmadı - bunun yerine PHP. Ancak Cila ve Tam Sayfa Önbelleğe Alma (FPC) daha sık kullanıldığı için, tekrarlanan görevlerin yükü (kategori / ürün yükleri, sık aramalar) aniden emilir ve PHP daha az yüke dönüşür. Aslında, yalnızca içeriği başlangıçta oluşturmak veya önbelleğe alınamayan senaryoları tamamlamak için gerçekten devreye girer (sepete ekleyin, sipariş tamamlama vb.); açıklama amacıyla kasıtlı olarak idari yükü görmezden geliyoruz .
Her iki görüldüğü gibi her zaman, MySQL çoğu perakendeciler için endişe verici bir alanlar olmadığı gerçeği sadık kalarak, burada ve burada . Ancak, saatte yüzlerce emir işleme alanınızdaysa, tek veya çift rakam değil - yakında optimizasyon için bir alan haline gelecektir.
Sonuçta daha küçük mağazalar için (günlük <25 bin günlük benzersiz ziyaretçi)
Çabalarınız, ofsetten doğru donanımın bulunmasını önerebilecek ve makineyi mağazanız için en uygun biçimde ayarlayan uygun bir ana bilgisayar bulmak üzerine daha iyi odaklanacaktır . Master / Slave veya Master / Master konfigürasyonlarını izleyerek zamanınızı boşa harcamayın; bu, performans avantajı getirmez ve sonuçta sürekli dikkat ve gelişmiş MySQL bilgisi gerektirir.
Sonuçta donanım boyutlandırma ve seçim, MySQL optimizasyonundan daha büyük bir rol oynayacaktır.
Ancak daha büyük mağazalar için
Mağazanız büyümeye başladığında, dönüşüm veya işlem yükü tekrarlanan karmaşık inserts
ve tamamlama görevi ile daha fazla bir yük haline gelir updates
. Her yeni siparişin eklenmesi, katalog stokunun azalmasını, ödeme geçitlerinden gelen geri aramaları ve EPOS / ERP sistemlerinden gelen güncellemeleri tetikleyecektir. Bunu, ilgili ürünlerin / kategorilerin ilişkili önbellek temizliği ile birleştirdiğinizde, yakında MySQL yükünün orantısız şekilde arttığını göreceksiniz.
Multi-master hiçbir zaman bizim önerebileceğimiz veya uygulanabilir bir seçenek olarak kabul edebileceğimiz bir çözüm değildir, ancak Master / Slave, okuma yükünü ikincil / üçüncül düğümlere dengeleyerek faydalar sağlayabilir (Kurumsal boyuttaki mağazalarda vurguluyoruz).
Ama yine de yapmak istiyorum
İlk önce, kölelerinizi yapılandırın. Biz Percona programları ve MySQL dallarının büyük savunucuları konum - aldıkları için ideal bir araca sahip sıcak innobackupex - Mevcut DB yedeklerini. Burada güzel bir yazı var .
Ustada
$ TIMESTAMP veya sekmeyi tamamlayın.
mysql
> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'$slaveip' IDENTIFIED BY '$slavepass';
> quit;
innobackupex --user=username --password=password /path/to/backupdir
innobackupex --user=username --password=password /
--apply-log /path/to/backupdir/$TIMESTAMP/
rsync -avprP -e ssh /path/to/backupdir/$TIMESTAMP TheSlave:/path/to/mysql/
scp /etc/mysql/my.cnf TheSlave:/etc/mysql/my.cnf
Köle üzerinde
/etc/init.d/mysql stop
mv /path/to/mysql/datadir /path/to/mysql/datadir_bak
mv /path/to/mysql/$TIMESTAMP /path/to/mysql/datadir
chown -R mysql:mysql /path/to/mysql/datadir
sed -i 's#server-id=1#server-id=2#g' /etc/mysql/my.cnf
/etc/init.d/mysql start
cat /var/lib/mysql/xtrabackup_binlog_info
> TheMaster-bin.000001 481
mysql
> CHANGE MASTER TO MASTER_HOST='$masterip', MASTER_USER='repl', MASTER_PASSWORD='$slavepass', MASTER_LOG_FILE='TheMaster-bin.000001', MASTER_LOG_POS=481;
> START SLAVE;
O zaman köleniz işler hale geldiğinde, pratikte, elde etmek için sadece birkaç ek kod satırı gerekir.
İçinde ./app/etc/local.xml
<default_read>
<connection>
<use/>
<host><![CDATA[host]]></host>
<username><![CDATA[username]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[dbname]]></dbname>
<type>pdo_mysql</type>
<model>mysql4</model>
<initStatements>SET NAMES utf8</initStatements>
<active>1</active>
</connection>
</default_read>
Kaynaklar