Kami memiliki pengalaman yang cukup luas dari kluster MySQL - dan Percona telah bekerja bersama kami pada beberapa kesempatan ketika mendorong batas-batas konfigurasi yang kompleks.
Dapatkah Magento secara alami menangani budak hanya baca
Magento adalah native mampu membelah off membaca / menulis ke server database yang berbeda (dengan pengecualian dari beberapa rilis rusak, misalnya EE 1.11.) - yang memungkinkan Anda untuk mengimbangi select
beban untuk tambahan (atau lebih) server (s); dan meneruskan semua update/write
pertanyaan ke master tunggal.
Kapan saya harus melakukannya?
Ini pertanyaan yang lebih tepat. Dengan sistem operasi Magento khusus seperti MageStack - ini menjadi lebih umum untuk teknik caching canggih sisi server built-in tersedia dan mudah digunakan (seperti caching front end Varnish dan caching back end Redis).
Secara historis, Magento tidak pernah terikat oleh MySQL - melainkan PHP. Tetapi karena Varnish dan Full Page Caching (FPC) lebih sering digunakan, beban tugas berulang (kategori / produk banyak, pencarian sering) tiba-tiba diserap dan PHP menjadi kurang dari beban. Bahkan, itu hanya benar-benar berperan untuk menghasilkan konten pada awalnya, atau menyelesaikan skenario yang tidak dapat ditutup (tambahkan ke keranjang, penyelesaian pesanan dll.); untuk tujuan penjelasan, kami sengaja mengabaikan beban administrasi .
Kami selalu mendukung fakta bahwa MySQL bukan bidang perhatian bagi sebagian besar pengecer, seperti yang terlihat di sini dan di sini . Tetapi jika Anda di wilayah memproses ratusan pesanan per jam, bukan satu atau dua digit - itu akan segera menjadi area untuk optimasi.
Akhirnya untuk toko kecil (<25rb pengunjung unik setiap hari)
Upaya Anda akan jauh lebih terfokus pada hanya menemukan host yang tepat yang dapat menyarankan perangkat keras yang tepat untuk digunakan dari offset dan yang telah mengkonfigurasi mesin dengan cara yang paling optimal untuk toko Anda . Jangan buang waktu Anda mengejar konfigurasi Master / Slave atau Master / Master - yang tidak akan menghasilkan manfaat kinerja dan pada akhirnya akan membutuhkan perhatian terus-menerus dan pengetahuan MySQL tingkat lanjut.
Pada akhirnya ukuran dan pemilihan perangkat keras akan memiliki peran yang lebih besar daripada optimasi MySQL.
Tetapi untuk toko yang lebih besar
Ketika toko Anda mulai tumbuh, konversi atau beban transaksional menjadi lebih menjadi beban dengan tugas berulang untuk menyelesaikan kompleks inserts
dan updates
. Penambahan setiap pesanan baru akan memicu penurunan stok katalog, panggilan balik dari gateway pembayaran dan pembaruan dari sistem EPOS / ERP. Gabungkan ini dengan pembersihan cache terkait dari masing-masing produk / kategori dan Anda akan segera melihat MySQL load meningkat secara tidak proporsional.
Multi-master tidak pernah merupakan solusi yang kami sarankan atau pertimbangkan sebagai opsi yang layak, tetapi Master / Slave dapat menghasilkan keuntungan (kami menekankan, pada toko ukuran Perusahaan) dengan mengimbangi beban baca ke node sekunder / tersier.
Tetapi saya masih ingin melakukannya
Pertama konfigurasikan budak Anda. Kami adalah pendukung besar utilitas Percona dan cabang MySQL - mereka memiliki alat yang ideal untuk mengambil cadangan panas dari DB - innobackupex yang ada. Ada tulisan bagus di sini .
Di master
Ganti $ TIMESTAMP atau tab selesai.
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
Di budak
/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;
Kemudian setelah budak Anda beroperasi, dalam praktiknya, hanya dibutuhkan beberapa baris kode tambahan untuk mencapainya.
Di ./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>
Sumber