Tag: haproxy

  • Juju #06 – เชื่อม MySQL Master-Master เข้ากับ HAProxy

    ต่อจาก Juju #05 – วิธีกระจายงานไปยัง MySQL แบบ Master-Master เมื่อสร้าง MySQL แบบ Master-Master Replication ได้แล้ว ก็มาเชื่อมกับ HAProxy เพื่อให้ Application ที่เขียน มองเห็นทั้งระบบเป็นชิ้นเดียว

    IP Address ของระบบต่างๆเป็นดังนี้
    haproxy : 10.107.107.71

    mysql-master1: 10.107.107.35

    mysql-master1: 10.107.107.83

    ขั้นตอนการติดตั้ง

    1. ที่ mysql-master1 ต้องสร้าง 2 Users ขึ้นมา ชื่อ haproxy_check และ haproxy_root ด้วยคำสั่งต่อไปนี้
      mysql -u root -p$(cat /var/lib/mysql/mysql.passwd) -e "INSERT INTO mysql.user (Host,User) values ('10.107.107.71','haproxy_check'); FLUSH PRIVILEGES;"
      
      mysql -u root -p$(cat /var/lib/mysql/mysql.passwd) -e "GRANT ALL PRIVILEGES ON *.* TO 'haproxy_root'@'10.107.107.71' IDENTIFIED BY 'password' WITH GRANT OPTION; FLUSH PRIVILEGES;"
    2. ที่ haproxy
      ติดตั้ง mysql-client ด้วยคำสั่ง

      sudo apt-get install mysql-client

      ทดสอบด้วยคำสั่ง

      mysql -h 10.107.107.35 -u haproxy_root -ppassword -e "SHOW DATABASES;"
      mysql -h 10.107.107.83 -u haproxy_root -ppassword -e "SHOW DATABASES;"

      แก้ไขไฟล์ /etc/haproxy/haproxy.cfg โดยเพิ่มบรรทัดต่อไปนี้ท้ายไฟล์ [3]

      frontend mysql-cluster
       bind *:3306
       mode tcp
       default_backend mysql-backend
      
      backend mysql-backend
       mode tcp
       balance roundrobin
       server mysql-master1 10.107.107.35:3306 check
       server mysql-master2 10.107.107.83:3306 check

      และสุดท้าย ทดสอบด้วยคำสั่งต่อไปนี้

      for i in `seq 1 6`; do 
         mysql -h 127.0.0.1 -u haproxy_root -ppassword -e "show variables like 'server_id'"; 
      done
      

      ควรจะได้ผลประมาณนี้

    3. จากนั้นก็สามารถพัฒนา Application โดยใช้ IP Address ของ haproxy ซึ่งในที่นี้คือ 10.107.107.71 และ Port 3306 ได้แล้ว ซึ่งเบื้องหลัระบบจะทำการ Replication กันเองทั้งหมด

    Reference:

    [1] https://www.digitalocean.com/community/tutorials/how-to-set-up-mysql-master-master-replication

    [2] https://www.digitalocean.com/community/tutorials/how-to-use-haproxy-to-set-up-mysql-load-balancing–3

    [3] https://serversforhackers.com/load-balancing-with-haproxy