็†ฑ้–€ๅˆ†้กž
 ่ผ‰ๅ…ฅไธญ…
็›ฎ้Œ„

๐Ÿ—„️ MySQL / MariaDB Active-Active ้ซ˜ๅฏ็”จๆ€ง:3 ใƒŽใƒผใƒ‰ Galera Cluster ใซใ‚ˆใ‚‹ใƒžใƒซใƒใƒžใ‚นใ‚ฟใƒผๅŒๆœŸ + ่‡ชๅ‹•ใƒ•ใ‚งใ‚คใƒซใ‚ชใƒผใƒใƒผๅฎŒๅ…จใ‚ฌใ‚คใƒ‰

    ๐Ÿ—„️ MySQL / MariaDB Active-Active ้ซ˜ๅฏ็”จๆ€ง:3 ใƒŽใƒผใƒ‰ Galera Cluster ใซใ‚ˆใ‚‹ใƒžใƒซใƒใƒžใ‚นใ‚ฟใƒผๅŒๆœŸ + ่‡ชๅ‹•ใƒ•ใ‚งใ‚คใƒซใ‚ชใƒผใƒใƒผๅฎŒๅ…จใ‚ฌใ‚คใƒ‰

    ๅพ“ๆฅใฎ MySQL Master/Slave ใƒฌใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใฏ、ใƒ•ใ‚งใ‚คใƒซใ‚ชใƒผใƒใƒผใฎ้…ๅปถใ‚„ใƒ‡ใƒผใ‚ฟไธๆ•ดๅˆใŒ็™บ็”Ÿใ—ใ‚„ใ™ใ、 ้ซ˜ๅฏ็”จๆ€งใŒๆฑ‚ใ‚ใ‚‰ใ‚Œใ‚‹็พไปฃใฎใ‚ทใ‚นใƒ†ใƒ ใซใฏไธๅๅˆ†ใงใ™。 ใ“ใฎใ‚ฌใ‚คใƒ‰ใงใฏ、็œŸใฎ Active-Active(ใƒžใƒซใƒใƒžใ‚นใ‚ฟใƒผ)ๆง‹ๆˆใ‚’ๅฎŸ็พใ™ใ‚‹ MariaDB Galera Cluster(3 ใƒŽใƒผใƒ‰ๆง‹ๆˆ)ใ‚’็”จใ„ใฆ、 ใƒชใ‚ขใƒซใ‚ฟใ‚คใƒ ๅŒๆœŸ・่‡ชๅ‹•ๅพฉๆ—ง・็„กๅœๆญข้‹็”จใ‚’ๅฎŸ็พใ™ใ‚‹ๆ–นๆณ•ใ‚’่ฉณใ—ใ่งฃ่ชฌใ—ใพใ™。


    ๐Ÿ“Œ 1. ใชใœ Galera Cluster ใ‚’้ธใถใฎใ‹?(True Multi-Master)

    Galera ใฏๅŒๆœŸๅผใƒžใƒซใƒใƒžใ‚นใ‚ฟใƒผๆ–นๅผใ‚’ๅฎŸ็พใ™ใ‚‹ๆœ€ใ‚‚ๆˆ็†Ÿใ—ใŸใ‚ฝใƒชใƒฅใƒผใ‚ทใƒงใƒณใงใ™。

    • ใ™ในใฆใฎใƒŽใƒผใƒ‰ใง่ชญใฟๆ›ธใๅฏ่ƒฝ(Active-Active)
    • ใƒฌใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณ้…ๅปถใ‚ผใƒญ(ๅŒๆœŸๆ›ธใ่พผใฟ)
    • Quorum ใซใ‚ˆใ‚‹ split-brain ้˜ฒๆญข
    • IST/SST ใซใ‚ˆใ‚‹่‡ชๅ‹•ใƒŽใƒผใƒ‰ๅพฉๆ—ง
    • ✔ ้ซ˜ๅฏ็”จๆ€งใ‚’่ฆๆฑ‚ใ™ใ‚‹ใ‚จใƒณใ‚ฟใƒผใƒ—ใƒฉใ‚คใ‚บใซๆœ€้ฉ

    ๆŽจๅฅจใ•ใ‚Œใ‚‹ 3 ใƒŽใƒผใƒ‰ๆง‹ๆˆ:

    node1: 192.168.1.10
    node2: 192.168.1.11
    node3: 192.168.1.12
    

    ๐Ÿ“ก 2. 3 ใƒŽใƒผใƒ‰ Galera Cluster ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃ

    
                       ┌────────────────────────┐
                       │      HAProxy + VIP       │
                       │   (่ชญใฟๆ›ธใ่ฒ ่ทๅˆ†ๆ•ฃๅฑค)   │
                       └──────────┬──────────────┘
                                  │
                   ┌──────────────┴──────────────┐
                   │                               │
          ┌────────┴────────┐             ┌────────┴────────┐
          │   MariaDB Node 1 │             │   MariaDB Node 2 │
          │   192.168.1.10   │             │   192.168.1.11   │
          └────────┬─────────┘             └────────┬────────┘
                   │                                   │
                   └──────────────┬──────────────┬────┘
                                  │              │
                           ┌──────┴──────┐
                           │ MariaDB Node 3 │
                           │ 192.168.1.12  │
                           └──────────────┘
    

    ๐Ÿ›  3. MariaDB + Galera ใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซ(ๅ…จใƒŽใƒผใƒ‰ๅ…ฑ้€š)

    
    sudo dnf install mariadb mariadb-server galera -y
    sudo systemctl enable mariadb
    

    ⚙️ 4. Galera ่จญๅฎš(ๅ…จใƒŽใƒผใƒ‰)

    /etc/my.cnf.d/galera.cnf ใ‚’็ทจ้›†:

    
    [galera]
    wsrep_on=ON
    wsrep_provider=/usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_name="galera_cluster"
    
    wsrep_cluster_address="gcomm://192.168.1.10,192.168.1.11,192.168.1.12"
    
    wsrep_node_address="192.168.1.X"
    wsrep_node_name="nodeX"
    
    binlog_format=ROW
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    

    ๅ„ใƒŽใƒผใƒ‰ใง wsrep_node_address / wsrep_node_name ใ‚’ๅค‰ๆ›ดใ—ใฆใใ ใ•ใ„。


    ๐Ÿš€ 5. ใ‚ฏใƒฉใ‚นใ‚ฟใฎ่ตทๅ‹•ๆ‰‹้ †(้‡่ฆ)

    1️⃣ ๆœ€ๅˆใฎใƒŽใƒผใƒ‰ใ‚’ใƒ–ใƒผใƒˆใ‚นใƒˆใƒฉใƒƒใƒ—

    
    galera_new_cluster
    

    2️⃣ ๆฎ‹ใ‚ŠใฎใƒŽใƒผใƒ‰ใ‚’่ตทๅ‹•

    
    sudo systemctl start mariadb
    

    ใ‚ฏใƒฉใ‚นใ‚ฟใ‚ตใ‚คใ‚บใ‚’็ขบ่ช:

    
    mysql -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
    
    ๆœŸๅพ…ใ•ใ‚Œใ‚‹ๅ‡บๅŠ›:
    
    3
    

    ๐Ÿ” 6. ใƒฌใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณๆ–นๅผ:SST / IST

    • SST(State Snapshot Transfer):ๆ–ฐ่ฆใƒŽใƒผใƒ‰・ใƒ•ใƒซๅŒๆœŸ
    • IST(Incremental State Transfer):็Ÿญๆ™‚้–“ใฎๅˆ‡ๆ–ญๅพŒใซ้ซ˜้€Ÿๅพฉๆ—ง

    ๐Ÿงฉ 7. Quorum ใจ split-brain ๅ›ž้ฟ

    
    3 ใƒŽใƒผใƒ‰ → ๆญฃๅธธ็จผๅƒ  
    2 ใƒŽใƒผใƒ‰ → ้ŽๅŠๆ•ฐ็ถญๆŒใง็จผๅƒๅฏ่ƒฝ  
    1 ใƒŽใƒผใƒ‰ → ่‡ชๅ‹•ๅœๆญข(ๆ•ดๅˆๆ€งไฟ่ญท)
    

    ⚖️ 8. HAProxy ใซใ‚ˆใ‚‹่ฒ ่ทๅˆ†ๆ•ฃ

    ใ‚คใƒณใ‚นใƒˆใƒผใƒซ:

    
    sudo dnf install haproxy -y
    

    ่จญๅฎš:

    
    /etc/haproxy/haproxy.cfg
    
    frontend mysql-in
        bind *:3306
        mode tcp
        default_backend galera
    
    backend galera
        mode tcp
        balance roundrobin
        option mysql-check user haproxy
        server node1 192.168.1.10:3306 check
        server node2 192.168.1.11:3306 check
        server node3 192.168.1.12:3306 check
    

    ๐Ÿท 9. Keepalived + VIP ใซใ‚ˆใ‚‹่‡ชๅ‹•ใƒ•ใ‚งใ‚คใƒซใ‚ชใƒผใƒใƒผ

    HAProxy ๅฑคใ‚’ Active-Active ใงๅ†—้•ทๅŒ–。

    
    vrrp_instance VI_1 {
        state MASTER
        interface ens33
        virtual_router_id 50
        priority 120
        virtual_ipaddress {
            192.168.1.200
        }
    }
    

    ใ‚ฏใƒฉใ‚คใ‚ขใƒณใƒˆใฏๅธธใซ VIP ใ‚’ไฝฟ็”จ:

    mysql -h 192.168.1.200 -u user -p


    ๐Ÿ“ฆ 10. ใƒŽใƒผใƒ‰ๆ•…้šœใจๅพฉๆ—ง

    ๐ŸŸก ใƒŽใƒผใƒ‰้šœๅฎณ → ไป–ใƒŽใƒผใƒ‰ใŒๅณๆ™‚ๅ‡ฆ็†ใ‚’็ถ™็ถš

    ๐ŸŸข ใƒŽใƒผใƒ‰ๅพฉๆ—ง → IST ใซใ‚ˆใ‚Š่‡ชๅ‹•ๅŒๆœŸ

    ๐Ÿ”ด ๆ•ดๅˆๆ€ง็ ดๆ → SST ใงๅ†ๆง‹็ฏ‰


    ๐Ÿ“˜ ใพใจใ‚

    3 ใƒŽใƒผใƒ‰ๆง‹ๆˆใฎ MariaDB Galera Cluster ใฏ、็œŸใฎ Active-Active ใƒžใƒซใƒใƒžใ‚นใ‚ฟใƒผๆ–นๅผใ‚’ๆไพ›ใ—、ไปฅไธ‹ใ‚’ๅฎŸ็พใ—ใพใ™:

    • ใ™ในใฆใฎใƒŽใƒผใƒ‰ใง่ชญใฟๆ›ธใๅฏ่ƒฝ
    • ๅŒๆœŸใƒฌใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใซใ‚ˆใ‚‹ๅผทๆ•ดๅˆๆ€ง
    • HAProxy + VIP ใซใ‚ˆใ‚‹็„กๅœๆญขใƒ•ใ‚งใ‚คใƒซใ‚ชใƒผใƒใƒผ
    • IST/SST ใซใ‚ˆใ‚‹่‡ชๅ‹•ๅพฉๆ—ง

    ใ‚จใƒณใ‚ฟใƒผใƒ—ใƒฉใ‚คใ‚บๅ‘ใ‘ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚น、API ใƒใƒƒใ‚ฏใ‚จใƒณใƒ‰、้ซ˜ใƒˆใƒฉใƒ•ใ‚ฃใƒƒใ‚ฏใ‚ทใ‚นใƒ†ใƒ ใซๆœ€้ฉใชๆง‹ๆˆใงใ™。


    ๐Ÿ”— ้–ข้€ฃ่จ˜ไบ‹

    — WWFandy・ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚น&ใ‚ทใ‚นใƒ†ใƒ ใƒŽใƒผใƒˆ

    ๐Ÿ”— ๅˆ†ไบซ้€™็ฏ‡ LINE Facebook X

    ๆฒ’ๆœ‰็•™่จ€:

    ๅผต่ฒผ็•™่จ€

    ๅญ—็ดš