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

๐ŸŒ Linux Apache ้ซ˜ๅฏ็”จๆžถๆง‹:้›™็ฏ€้ปž Active-Active ๅฎŒๆ•ด้ƒจ็ฝฒๆŒ‡ๅ—

    ๐ŸŒ Linux Apache ้ซ˜ๅฏ็”จๆžถๆง‹:้›™็ฏ€้ปž Active-Active ๅฎŒๆ•ด้ƒจ็ฝฒๆŒ‡ๅ—

    ๅœจไผๆฅญ็ดš Web ๆžถๆง‹ไธญ,ๅ–ฎไธ€ Apache ไผบๆœๅ™จๅพˆๅฎนๆ˜“ๆˆ็‚บๆ•ˆ่ƒฝ็“ถ้ ธ่ˆ‡ๅ–ฎ้ปžๆ•…้šœ(SPOF)。 ๆœฌๆŒ‡ๅ—ๆ•™ไฝ ๆ‰“้€  ๅ…ฉๅฐ Apache ๅŒๆ™‚ๆไพ›ๆœๅ‹™็š„ Active-Active HA ๆžถๆง‹,ๅŒ…ๅซ่ฒ ่ผ‰ๅนณ่กก、ๅฅๅบทๆชขๆŸฅ、Session ๅŒๆญฅ่ˆ‡ๆ•…้šœๅˆ‡ๆ›ๆต็จ‹,ไธ€ๆฌกๅธถไฝ ๅฎŒๆˆ็”Ÿ็”ข็ญ‰็ดš้ƒจ็ฝฒ。

    ๐Ÿ“Œ ไธ€、ๆžถๆง‹ๆฆ‚่ฆฝ(Active-Active ๆ˜ฏไป€้บผ?)

    Active-Active ๆŒ‡ๅ…ฉๅฐไปฅไธŠไธปๆฉŸ「ๅŒๆ™‚ๆไพ›ๆœๅ‹™」,่ซ‹ๆฑ‚ๅนณๅ‡ๅˆ†ๆ•ฃ่‡ณๅคšๅ€‹็ฏ€้ปž,ไปฅๆๅ‡:

    • ⚡ ๆ•ˆ่ƒฝ(่ฒ ่ผ‰ๅˆ†ๆ•ฃ)
    • ๐Ÿ›ก️ ้ซ˜ๅฏ็”จ(ไปปไธ€็ฏ€้ปžๆ•…้šœไปไธไธญๆ–ท)
    • ๐Ÿ“ˆ ๅฏๆ“ดๅ……ๆ€ง(ๆฐดๅนณๆ“ดๅฑ• Web ็ฏ€้ปž)
    
    ไฝฟ็”จๅˆฐ็š„ๅ…ƒไปถ:
    1. Apache(Web Server)
    2. HAProxy / Nginx(่ฒ ่ผ‰ๅนณ่กกๅ™จ)
    3. Keepalived(VIP + ๅฅๅบทๆชขๆŸฅ/Failover)
    4. rsync / unison / GlusterFS(็ถฒ็ซ™่ณ‡ๆ–™ๅŒๆญฅ้ธ้ …)
      

    ๐Ÿ“ก ไบŒ、ๆžถๆง‹ๆ‹“ๆ’ฒๅœ–

    
            +--------------------------+
            |     VIP 192.168.1.200    |
            |     (Keepalived)         |
            +-----------+--------------+
                        |
                +-------+--------+
                | Load Balancer  |
                | (HAProxy/Nginx)|
                +-------+--------+
                        |
            +-----------+-------------+
            |                         |
    +-------+--------+       +--------+-------+
    | Apache Node A   |       | Apache Node B  |
    | 192.168.1.10    |       | 192.168.1.11   |
    +-----------------+       +----------------+
      

    ๐Ÿ›  ไธ‰、ๅฎ‰่ฃ Apache(ๅ…ฉๅฐ้ƒฝ่ฆ)

    # Rocky Linux / CentOS
    sudo dnf install httpd -y
    
    # Ubuntu / Debian
    sudo apt install apache2 -y
    
    sudo systemctl enable --now httpd
    sudo systemctl status httpd
      

    ็ขบ่ช่ƒฝๅพžๅ…ฉๅฐ็œ‹ๅˆฐไธๅŒ้ ้ข(ๆ–นไพฟๅพŒ็บŒ้ฉ—่ญ‰่ฒ ่ผ‰ๅนณ่กก):

    echo "Node A Web" | sudo tee /var/www/html/index.html
    echo "Node B Web" | sudo tee /var/www/html/index.html
      

    ๐Ÿ” ๅ››、็ถฒ็ซ™่ณ‡ๆ–™ๅŒๆญฅ(3 ็จฎๆ–นๅผ)

    ้ธ้ … A:rsync ๆŽ’็จ‹ๅŒๆญฅ(็ฐกๅ–ฎ、ๅฎ‰ๅ…จ)

    
    # Node A → Node B
    */1 * * * * rsync -az /var/www/html/ root@192.168.1.11:/var/www/html/
      

    ้ธ้ … B:Unison ้›™ๅ‘ๅŒๆญฅ(ๆŽจ่–ฆ)

    ้ฉๅˆ้›™ๅ‘ไฟฎๆ”น็š„ๆƒ…ๅขƒ,ไพ‹ๅฆ‚ๅคšไบบ้–‹็™ผ。

    ้ธ้ … C:GlusterFS(ไผๆฅญ็ดš)

    ๅ…ฉ็ฏ€้ปž็ต„ๆˆ replicated volume,ๅฏฆ็พๅณๆ™‚ๅŒๆญฅ。


    ⚖️ ไบ”、้ƒจ็ฝฒ่ฒ ่ผ‰ๅนณ่กก(HAProxy / Nginx ไปป้ธๅ…ถไธ€)

    ้ธ้ … A:HAProxy(ๆœ€ๆŽจ่–ฆ)

    sudo dnf install haproxy -y
    /etc/haproxy/haproxy.cfg
    
    frontend http-in
        bind *:80
        default_backend apache-backend
    
    backend apache-backend
        balance roundrobin
        mode http
        option httpchk
        server web1 192.168.1.10:80 check
        server web2 192.168.1.11:80 check
      
    sudo systemctl enable --now haproxy

    ้ธ้ … B:Nginx ็•ถ Load Balancer

    
    upstream apache_cluster {
        server 192.168.1.10;
        server 192.168.1.11;
    }
    
    server {
        listen 80;
        location / {
            proxy_pass http://apache_cluster;
        }
    }
      

    ๐Ÿท ๅ…ญ、Keepalived + VIP(็œŸๆญฃๅšๅˆฐไธไธญๆ–ท)

    ่ฎ“ LB ๅฝขๆˆ Active-Standby ๆˆ– Active-Active(้›™ VIP)。ๆญค่™•็คบ็ฏ„ๅธธ็”จ Active-Standby ไปฅ้ฟๅ… ARP ๆททไบ‚。

    ๅฎ‰่ฃ:

    sudo dnf install keepalived -y

    ่จญๅฎšไธป็ฏ€้ปž(LB1):

    /etc/keepalived/keepalived.conf
    
    vrrp_instance VI_1 {
        state MASTER
        interface ens33
        virtual_router_id 51
        priority 120
        advert_int 1
    
        authentication {
            auth_type PASS
            auth_pass 123456
        }
    
        virtual_ipaddress {
            192.168.1.200
        }
    }
      

    ๅ‚™ๆด็ฏ€้ปž(LB2):

    
    state BACKUP
    priority 100
      

    ๅ•Ÿๅ‹•:

    sudo systemctl enable --now keepalived

    ๐Ÿงช ไธƒ、้ฉ—่ญ‰ Active-Active ๆ•ˆๆžœ

    while true; do curl -s http://192.168.1.200 | grep Node; sleep 1; done
      

    ้ ๆœŸๆœƒ้กฏ็คบ:

    Node A Web
    Node B Web
    Node A Web
    Node B Web
      

    ๐Ÿ“ฆ ๅ…ซ、ๆ•…้šœๆธฌ่ฉฆ(ๅฟ…ๅš)

    # ้—œๆމ Node A Apache
    sudo systemctl stop httpd
    
    # ่ง€ๅฏŸๆ˜ฏๅฆไปๆญฃๅธธๆœๅ‹™
    curl http://192.168.1.200
      

    ๆ‡‰ๅช็œ‹ๅˆฐ Node B,ไฝ†ไธๆœƒไธญๆ–ท。

    ๐Ÿ“˜ ็ต่ชž

    ้€้Ž HAProxy + Keepalived + Apache,ไฝ ๅทฒๅฎŒๆˆไผๆฅญ็ดš Active-Active ้ซ˜ๅฏ็”จๆžถๆง‹。 ๆญคๆžถๆง‹ๅ…ทๅ‚™่ฒ ่ผ‰ๅ‡่กก、ๆ•…้šœๅˆ‡ๆ›、่ณ‡ๆ–™ๅŒๆญฅ,ๅฏๆ‡‰็”จๆ–ผไธญๅคงๅž‹็ถฒ็ซ™、API、ๅพŒ็ซฏๆœๅ‹™็ญ‰ๅ ดๆ™ฏ。 ่‹ฅ้œ€ๆ›ดๅคงๅž‹ๆžถๆง‹,ๅฏๅ†ๅผ•ๅ…ฅ Kubernetes、CephFS、Redis Session Cluster ็ญ‰ๆ“ดๅ……ๆ–นๆกˆ。


    ๐Ÿ”— ๅปถไผธ้–ฑ่ฎ€

    — WWFandy・็ณป็ตฑ่ˆ‡็ถฒ่ทฏ็ญ†่จ˜

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

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

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

    ๅญ—็ดš