Docker Compose, MySQL ana-bağımlı çoğaltma kümesi oluşturur

Önsöz

Uygulama iş verilerinin sürekli artmasıyla, Tepki hızı düşmeye devam ediyor , Taleplerin çoğunun Sorgu işlemi . Bu noktada, veritabanını genişletebiliriz. Master-slave çoğaltma , Niyet İşlemi oku ile Yazma işlemi Ayrı, çoklu veritabanları Paylaşım isteği , Dolayısıyla Tek kitaplığı azaltın nın-nin Erişim basıncı , Ve sonra uygulama optimize edilir.

Metin

Master-slave çoğaltma

MySQL 5.6'da master-slave replikasyonunu başlatmanın iki yolu vardır: log-based (binlog) ve GTID (global işlem tanımlayıcı).

Bu makale yalnızca günlük binlog tabanlı Master-slave konfigürasyonu .

Master-slave çoğaltma işlemi

MySQL senkronizasyon işlemi 3 iş parçacığı aracılığıyla gerçekleştirilir ve temel adımlar aşağıdaki gibidir:

  • Ana sunucu Veri güncellemelerini şuraya kaydedin: İkili günlük ( İkili günlük ), ikili günlük olaylarını kaydetmek için kullanılır, bu adım şu şekilde belirlenir: Ana kitaplık dizisi gerçekleştirmek;

  • Slave kütüphanesi Niyet Ana kütüphane nın-nin İkili günlük Yerel olarak kopyala Röle günlüğü ( Röle günlüğü ), bu adım şunlardan oluşur: Slave kütüphanesi G / Ç Konu gerçekleştirmek;

  • Slave kütüphanesi Okuyun Röle günlüğü orta Etkinlik , Verilerin içinde tekrar oynatın, bu adımı belirleyen Slave kütüphanesi SQL Konu gerçekleştirmek.

  • Master-slave modunun avantajları

    1. Yük Dengeleme

    Normalde kullanacaksın Ana sunucu Veriler hakkında Güncelleme , sil ile Yeni Operasyonu bekleyin ve Sormak İş düşüyor Slave kütüphanesi Kafasına.

    2. Uzaktan felaket kurtarma yedekleme

    Ana sunucudaki veriler şu şekilde senkronize edilebilir: Uzak bağımlı sunucu Açık, büyük ölçüde geliştirildi Veri güvenliği .

    3. Yüksek kullanılabilirlik

    Veritabanı çoğaltma işlevi gerçekleştirilir Ana sunucu karşı Sunucu odasından Ana sunucu kapandığında veri senkronizasyonu arıza , Bağımlı sunucu, sistemin sürekli ve kararlı çalışmasını sağlamak için hemen ana sunucu rolünü üstlenir.

    4. Yüksek ölçeklenebilirlik

    Master-slave çoğaltma Mod desteği 2 Genişletmenin yolları:

    • çoğaltmak

    Ölçek büyütme veya Çoğaltmak Temelde mevcut sunucudan daha fazlasını sağlamak için Daha iyi performans Sunucu, örneğin artırmak İşlemci ile Veri deposu Hem de Disk dizisi Ve bunun gibi, birden fazla sunucu olduğu için ölçeklenebilirlik tek bir sunucudan daha fazladır.

    • ölçeklendirme

    Ölçek büyütme veya Yatay genişleme , Yani artırmak Sunucu sayısı Bunun genişletilmesi, esas olarak her sunucunun baskısını dağıtabilir.

    Master-slave modunun dezavantajları

    1. Maliyet artışı

    Bir master-slave kurmak kesinlikle maliyeti artıracaktır Sonuçta bir server ve iki serverın maliyeti tamamen farklıdır.Ayrıca master-slave açık olmalıdır. İkili günlük , Bu nedenle ek olarak Performans maliyeti .

    2. Veri gecikmesi

    Slave kütüphanesi Nereden Ana kütüphane Kopyalanan veriler kesinlikle belirli bir Veri gecikmesi nın-nin. Bu nedenle, sorgu girildikten hemen sonra gerçekleştiğinde, sorgu çıkmayabilir. Elbette, ekleyicinin kendisi sorgularsa, doğrudan Ana kütüphane Tabii ki sorguda bunun da kodla kontrol edilmesi gerektiğini öğrenin.

    3. Yazmak daha yavaştır

    Master-slave çoğaltma Esas olarak Okumak, yazmaktan çok daha büyüktür Veya doğru Gerçek zamanlı veri yedekleme Zorlu sistemlerde. Yüzünden Ana sunucu Yazılı olarak daha fazla işleme ihtiyacınız var ve Sadece bir Yazılabilir Ana kütüphane Yani yazma baskısı dağıtılamaz.

    Master-slave replikasyonu için önkoşullar

  • Master-slave sunucu İşletim sistemi sürümü ile Rakamlar Tutarlı.

  • Ana veritabanı ve bağımlı veritabanı versiyon Tutarlı olun.

  • Ana veritabanı ve bağımlı veritabanı veri Tutarlı olun.

  • Ana veritabanı İkili günlük , Ana veritabanı ve bağımlı veritabanı server_id LAN'da olmalı bir tek .

  • Spesifik konfigürasyon

    1. Çevresel hazırlık

    Ad sürüm numarasıDocker18.03.1-ceDocker Compose1.21.1MySQL5.7.17

    2. docker-compose.yml'yi yapılandırın

    docker-compose.yml

    versiyon 2' Hizmetler: mysql-master: inşa etmek: bağlam: ./ dockerfile: ana / Dockerfile çevre: - "MYSQL_ROOT_PASSWORD = kök" - "MYSQL_DATABASE = replicas_db" bağlantılar: -mysql-köle bağlantı noktaları: - "33065: 3306" yeniden başlat: her zaman ana bilgisayar adı: mysql-master mysql-köle: inşa etmek: bağlam: ./ dockerfile: köle / Dockerfile çevre: - "MYSQL_ROOT_PASSWORD = kök" - "MYSQL_DATABASE = replicas_db" bağlantı noktaları: - "33066: 3306" yeniden başlat: her zaman hostname: mysql-slave

    3. Ana veritabanı yapılandırması

    3.1. Dockerfile'ı Yapılandırma

    Dockerfile

    Mysql'den: 5.7.17 BAKICI Harrison EKLE ./master/my.cnf /etc/mysql/my.cnf

    3.2. My.cnf dosyasını yapılandırın

    my.cnf

    ## Genellikle IP'ye ayarlanan server_id'yi ayarlayın, benzersiz server_id = 100 ## Çoğaltma filtresi: yani hangi veritabanının senkronize edilmesine gerek olmadığını belirtin (mysql kitaplığı genellikle senkronize edilmez) binlog-ignore-db = mysql ## İkili günlük işlevini açın, istediğiniz zaman alabilirsin, anlamlı olmak daha iyidir (anahtar burada) log-bin = replicas-mysql-bin ## Her oturum için ayrılan bellek, işlem sırasında ikili günlüğün önbelleğini depolamak için kullanılır binlog_cache_size = 1 milyon ## Master-slave çoğaltma biçimi (karma, ifade, satır, varsayılan biçim deyimdir) binlog_format = mixed ## İkili günlüğün otomatik olarak silindiği / süresinin dolduğu gün sayısı. Varsayılan değer 0'dır, yani otomatik olarak silinmez. expire_logs_days = 7 ## İkincil tarafında çoğaltmanın kesintiye uğramasını önlemek için ana-bağımlı çoğaltmada karşılaşılan tüm hataları veya belirtilen hata türlerini atlayın. ## Örneğin: 1062 hatası, yinelenen birincil anahtarları ifade eder, 1032 hatası tutarsız ana-bağımlı veritabanı verilerinden kaynaklanır slave_skip_errors = 1062

    4. Veritabanından yapılandırın

    4.1. Dockerfile'ı Yapılandırma

    Dockerfile

    Mysql'den: 5.7.17 BAKICI Harrison EKLE ./slave/my.cnf /etc/mysql/my.cnf

    4.2. My.cnf dosyamı yapılandırın

    ## Genellikle IP'ye ayarlanan server_id'yi ayarlayın, benzersiz server_id = 101 ## Çoğaltma filtresi: yani hangi veritabanının senkronize edilmesine gerek olmadığını belirtin (mysql kitaplığı genellikle senkronize edilmez) binlog-ignore-db = mysql ## Slave'i diğer slave'lerin yöneticisi olarak kullanmak üzere hazırlamak için ikili günlük fonksiyonunu açın log-bin = replicas-mysql-slave1-bin ## Her oturum için ayrılan bellek, işlem sırasında ikili günlüğün önbelleğini depolamak için kullanılır binlog_cache_size = 1 milyon ## Master-slave çoğaltma biçimi (karma, ifade, satır, varsayılan biçim deyimdir) binlog_format = mixed ## İkili günlüğün otomatik olarak silindiği / süresinin dolduğu gün sayısı. Varsayılan değer 0'dır, yani otomatik olarak silinmez. expire_logs_days = 7 ## İkincil tarafında çoğaltmanın kesintiye uğramasını önlemek için ana-bağımlı çoğaltmada karşılaşılan tüm hataları veya belirtilen hata türlerini atlayın. ## Örneğin: 1062 hatası, yinelenen birincil anahtarları ifade eder, 1032 hatası tutarsız ana-bağımlı veritabanı verilerinden kaynaklanır slave_skip_errors = 1062 ## relay_log geçiş günlüğünü yapılandırın röle_ günlüğü = replicas-mysql-röle-bin ## log_slave_updates, slave'in replikasyon olaylarını kendi ikili günlüğüne yazması anlamına gelir log_slave_updates = 1 ## Verilerin değiştirilmesini önleyin (özel iş parçacıkları hariç) read_only = 1

    5. Bir kapsayıcı oluşturun

    Giriş liman işçisi Dizin, çalıştır docker-compose Komutu başlatın.

    $ docker-compose up -d

    resim gösterdiği gibi MySQL Ana veritabanı ile Veritabanından Kapsayıcı başarıyla oluşturuldu.

    Ayrı yapılandırın Ana veritabanı ile Veritabanından Bağlantı bilgileri aşağıdaki gibidir:

    • Ana veritabanı

    • Veritabanından

    6. Bağımlı veritabanını yapılandırın

    Slave'in başlangıç durumunu kontrol edin

    $ ana durumu göster;

    Şekilde gösterildiği gibi, veri tabanından Eşitlenmemiş çoğaltma durumu .

    Ana kütüphanenin durumunu kontrol edin

    $ ana durumu göster;

    Kayıt Ana veritabanı ikili günlük nın-nin dosya adı ile Veri senkronizasyonu başlangıç konumu .

    • Dosya: replicas-mysql-bin.000003

    • Pozisyon: 154

    Kütüphaneden ana kütüphane bilgilerini yapılandırın

    İçinde Veritabanından A doğru koş Ana veritabanı İlgili yapılandırma sql Efendi-köle derneği

    MASTER'I DEĞİŞTİR MASTER_HOST = 'mysql-ana', MASTER_USER = 'kök', MASTER_PASSWORD = 'kök', MASTER_LOG_FILE = 'replicas-mysql-bin.000003', MASTER_LOG_POS = 154;

    Tekrar başlat köle hizmet

    $ durdur köle $ köle başlat

    İleri inceleme Veritabanından Durum bilgisi, her ikisi de gerçekleştirildi veri senkronizasyonu İlişkili

    7. Hedef tabloyu oluşturun

    İçinde Ana veritabanı İçinde bir test veri tablosu oluşturun kurs

    FOREIGN_KEY_CHECKS = 0; - ---------------------------- - Kurs için masa yapısı - ---------------------------- "Kurs" VARSA TABLO DÜŞÜR; TABLO OLUŞTUR "kurs" ( `id` int (11) BOŞ DEĞİL AUTO_INCREMENT, `isim` varchar (20) NULL DEĞİL, `lesson_period` double (5,0) VARSAYILAN NULL, `score` double (10,0) VARSAYILAN NULL, BİRİNCİL ANAHTAR ("kimlik") ) MOTOR = InnoDB VARSAYILAN KAR SETİ = utf8mb4;

    Ana veritabanı ile Veritabanından Veriler içeride Senkronizasyon durumu , Master-slave replikasyon kümesi oluşturuldu.

    MySQL çoğaltma türü

    Bildirim tabanlı çoğaltma

    Ana sunucuda yürütülen deyim, ikincil sunucuda yeniden yürütülür ve MySQL-3.23'ten sonra desteklenir.

    Sorun: Eksik senkronizasyon, zamanda sapmaya neden olabilir ve ifadeyi yürüten kullanıcı da farklı bir kullanıcı olabilir.

    Satır tabanlı çoğaltma

    Değiştirilen içeriği, hangi ifadenin değişikliği tetiklediğini umursamadan, doğrudan ana sunucuda kopyalayın.MySQL-5.0'dan sonra tanıtıldı.

    Soru: Örneğin, bir maaş tablosunda on bin kullanıcı var ve her kullanıcının maaşını +1000 olarak belirledik, sonra satır tabanlı çoğaltmanın 10.000 satırlık içeriği kopyalaması gerekiyor, bu da nispeten büyük ek yüke neden olurken, ifade tabanlı çoğaltma Sadece bir cümle yeterli olacaktır.

    Karışık çoğaltma türleri MySQL

    Varsayılan olarak kullanılır Bildirim tabanlı çoğaltma ,ne zaman Bildirim tabanlı çoğaltma Sorun yarattığında kullanın Satır tabanlı çoğaltma , MySQL otomatik olarak seçecektir.

    Dünyanın ilk 1 TB depolama telefonu! Nut R1 resmi olarak piyasaya çıktı: 3499 yuan'dan başlıyor
    önceki
    Zafer Kralı: Dunhuang Feitian COS güzel fotoğraflar,% 100 restore edildi, netizenler: asıl mesele o değil
    Sonraki
    Derin öğrenmede dengesiz veri setlerinin işlenmesi
    Yeni BMW M4 resmi olarak piyasaya sürüldü ve 92.70-1.098 milyon satış yaptı
    Vivo X27 mavi gerçek makine uygulamalı, kaldırma kamerası / sözcüsü yine o
    Çin Bilim ve Teknoloji Üniversitesi'nin "Öğrenen Tanrısı" nereye gitti?
    Kubernetes, rook + ceph depolama sistemini dağıtır
    Nut R1 sadece ön sevişme, çığır açan bir ürün! Hammer, Nut TNT iş istasyonunu piyasaya sürdü
    İnsansız bir sürüş ekolojisi nasıl oluşturulur ve insansız inişin teknik zorlukları nasıl çözülür, işte ayrıntılı bir referans
    King of Glory S13 sezonunun cildi ortaya çıktı ve dövüş sanatları tarzı çılgın demir kraliyet aslanı, ancak netizenler iki kelime ile yanıt verdi
    Tarihteki en eksiksiz Redis yüksek kullanılabilirlik teknolojisi çözümü
    480 GB SSD yaygınlaşacak: Renkli, iki NVMe SSD çıkarıyor
    130-180 bin yuan Zotye T700 modellerinin satış öncesi fiyat aralığına maruz kalma
    Zafer Kralı: Yang Yuhuan yeni bir kostüme sahip mi, iki tane bedava? Netizen: Güzellik tasarımcısını seçiyorum
    To Top