banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Xây dựng hệ thống HA Load Balancer Mysql Cluster  XML
  [Article]   Xây dựng hệ thống HA Load Balancer Mysql Cluster 29/11/2012 19:04:04 (+0700) | #1 | 271442
[Avatar]
ngtrongtri
Member

[Minus]    0    [Plus]
Joined: 27/03/2012 22:54:13
Messages: 114
Offline
[Profile] [PM]
Xin chào mọi người, mình tham gia diễn đàn cũng được 1 thời gian ngắn thôi nhưng đã nhận được rất nhiều kiến thức từ các anh chị trong diễn đàn. Những câu hỏi mình đưa ra đều được mọi người giải đáp, mình rất cảm kích điều ấy smilie . Sau một thời gian chỉ biết đặt câu hỏi ^^, thì nay mình xin gởi đến mọi người một bài viết về hệ thống mình mà mình mới thực hiện xong. Đó là hệ thống HA Load Balancer Mysql Cluster (đây là hệ thống tổng hợp nên mình cũng đặt tên tổng hợp như vậy smilie ), mình chỉ mới chạy demo trên local nên không dám chắc là có thể áp dụng thực tế được không, nên xin mọi người góp ý thêm cho mình ^^
Để thực hiện được hệ thống này, mình xin gởi lời cảm ơn sâu sắc đến anh quanta, nhờ những giải đáp của anh mà em mới hoàn thành được.

Mô hình như sau:


Dữ liệu được lưu tại các Storage Node (2 Storage được đồng bộ hoá dữ liệu), 2 SQL Node có chỉ có nhiệm vụ xử lý các câu lệnh SQL và lấy dữ liệu từ Storage Node để trả về. Tất nhiên do lấy chung 1 nguồn data nên 2 SQL Node đều được đồng bộ hoá dữ liệu. Quản lý phần này thuộc về Manager Node.

Mình xin chia bài viết thành 3 phần cho mọi người dễ theo dõi.

Xây Dựng Hệ Thống HA Load Balancer Mysql Cluster
Phần 1:
Xây dựng hệ thống Mysql Cluster
Phần 2:
Xây dựng hệ thống Load Balancer cho Mysql Cluster
Phần 3:
HA cho hệ thống Load Balancer

----------------------------------------------------------------------------------------------------------------------
PHẦN 1: XÂY DỰNG HỆ THỐNG MYSQL CLUSTER
Chuẩn bị:
Đầu tiên các bạn cần download file mysql-cluster-gpl-x.x.xx-linux-x86_64-glibc23.tar.gz tại http://dev.mysql.com/downloads/cluster/7.1.html#downloads
Các bạn cần chuẩn bị 5 server (mình thực hiện trên Ubuntu) sau:
Code:
192.168.2.52 là Manager Node
192.168.2.53 là SQL Node (hostname: server01)
192.168.2.54 là SQL Node (hostname: server02)
192.168.2.55 là Storage Node
192.168.2.56 là Storage Node

Chuyển qua quyền root
Step 1: Đầu tiên cấu hình trên manager node
Copy file mysql cluster vào folder /usr/local
Thực hiện lệnh:
Code:
groupadd mysql 
useradd -g mysql mysql

Code:
cd /usr/local
tar -zxvf mysql-cluster-gpl-7.1.24-linux-x86_64-glibc23.tar.gz
ln -s mysql-cluster-gpl-7.1.14-linux-i686-glibc23 mysql-cluster
cd mysql-cluster
chown -R mysql:mysql /usr/local/mysql-cluster/
mkdir -p /var/lib/mysql-mgmd-config-cache
mkdir -p /var/lib/mysql-mgmd-data

Tạo file khai báo các thông tin Manager, SQL và Storage Node
Code:
cat >> /var/lib/mysql-mgmd-data/config.ini << EOF
[ndbd default]
NoOfReplicas = 2
DataDir= /var/lib/mysql-ndb-data
DataMemory = 64M
IndexMemory = 128M
 
[ndb_mgmd]
# Management process options:
DataDir = /var/lib/mysql-mgmd-data
PortNumber = 2205
HostName = 192.168.2.52
 
[ndbd]
# Options for data node ndb1
hostname = 192.168.2.55
 
[ndbd]
# Options for data node ndb2
hostname = 192.168.2.56
[mysqld]
# SQL node options for dbsrv3
hostname = 192.168.2.53
 
[mysqld]
# SQL node options for dbsrv4
hostname = 192.168.2.54
EOF


Code:
cd /usr/local/mysql-cluster/bin

Thực hiện lệnh sau để khởi động Manager Node
Code:
./ndb_mgmd --initial --configdir=/var/lib/mysql-mgmd-config-cache --config-file=/var/lib/mysql-mgmd-data/config.ini

Hiện thông báo như hình dưới là bạn đã tạo Manager Node thành công


Step 2: Cấu hình Storage Node
Copy file mysql cluster vào folder /usr/local
Thực hiện lệnh sau
Code:
groupadd mysql 
useradd -g mysql mysql

Code:
cd /usr/local
tar -zxvf mysql-cluster-gpl-7.1.24-linux-x86_64-glibc23.tar.gz
ln -s mysql-cluster-gpl-7.1.14-linux-i686-glibc23 mysql-cluster

Code:
cd mysql-cluster
chown -R mysql:mysql /usr/local/mysql-cluster/

Thực hiện lệnh kết nối tới Manager Node
Code:
scripts/mysql_install_db --user=mysql --datadir=/var/lib/mysql-ndb-data
bin/ndbd  --ndb-connectstring=192.168.2.52:2205

Thấy xuất hiện như thế này là đã connect thành công


Lập lại lệnh trên đối với các node data còn lại
Xong thì bạn login vô manager node để kiểm tra xem các data node này đã kết nối hay chưa
Code:
cd /usr/local/mysql-cluster
bin/ndb_mgm --ndb-connectstring=192.168.2.52:2205
show

Step 3: Cấu hình cho các SQL Node
Copy file mysql cluster vào folder /usr/local
Thực hiện các lệnh sau:
Code:
groupadd mysql 
useradd -g mysql mysql

Code:
cd /usr/local
tar -zxvf mysql-cluster-gpl-7.1.24-linux-x86_64-glibc23.tar.gz
ln -s mysql-cluster-gpl-7.1.14-linux-i686-glibc23 mysql-cluster
cd mysql-cluster
chown -R mysql:mysql /usr/local/mysql-cluster/


Code:
scripts/mysql_install_db --user=mysql --datadir=/var/lib/mysql-node-data --basedir=/usr/local/mysql-cluster

Code:
apt-get install libaio1

Định nghĩa file kết nối Manager Node
Code:
cat >> /etc/mysqld-cluster.cf <<EOF
[mysqld]
ndbcluster
ndb-connectstring=192.168.2.52:2205
EOF

Thực hiện lệnh kết nối tới Manager Node
Code:
bin/mysqld_safe --defaults-extra-file=/etc/mysqld-cluster.cf --user=mysql --datadir=/var/lib/mysql-node-data --basedir=/usr/local/mysql-cluster &

Xong thì bạn login vô manager node để kiểm tra xem các sql node này đã kết nối hay chưa
Hiện như hình dưới là ok


*. Cấu hình password cho mysql server
Code:
/usr/local/mysql-cluster# bin/mysqladmin -u root password 'PaSSw0rd'

*. Đăng nhập
Code:
root@ubuntu:/usr/local/mysql-cluster# bin/mysql -u root -p

*. Shutdown sql node an toàn
Code:
root@ubuntu:/usr/local/mysql-cluster# ./bin/mysqladmin -u root -pPaSSw0rd shutdown

Lưu ý: để có thể đồng bộ hóa các bảng giữa 2 SQL Node thì tất cả các table phải thay đổi engine từ MyISAM hay InoDB sang engine NDBCLUSTER. Thao tác này có thể sử dụng lệnh alter table.
alter table tên_bảng engine=ndbcluster;
Ví dụ 1 câu lệnh tạo bảng mẫu:
create table mytable(col1 int not null primary key auto_increment, col2 varchar(100))engine=NDBCLUSTER;

Hết phần 1
Mình mới viết bài lần đầu, nên có gì sai và thiếu sót mong mọi người nhắc nhở>
[Up] [Print Copy]
  [Article]   Xây dựng hệ thống HA Load Balancer Mysql Cluster 30/11/2012 12:33:23 (+0700) | #2 | 271471
ngocson2vn
Member

[Minus]    0    [Plus]
Joined: 28/04/2007 03:45:55
Messages: 16
Location: Phú Thọ
Offline
[Profile] [PM] [Yahoo!]
Cảm ơn bạn ngtrongtri!

Mình xin có một góp ý nhỏ như sau:
Sẽ dễ hiểu hơn cho những ai chưa xây dựng hệ thống kiểu như thế này bao giờ nếu bạn cung cấp thêm một hình vẽ và giải thích về vai trò và data flow giữa các server. Chẳng hạn như Manager Node, SQL Node và Storage Node chúng có vai trò như thế nào và đứng ở vị trí nào trong data flow.

Mong chờ các phần tiếp theo của bạn.

Cảm ơn!
[Up] [Print Copy]
  [Article]   Xây dựng hệ thống HA Load Balancer Mysql Cluster 12/12/2012 07:28:45 (+0700) | #3 | 271767
tuanksor
Member

[Minus]    0    [Plus]
Joined: 01/11/2011 02:44:03
Messages: 50
Offline
[Profile] [PM]
Bạn ngtrongtri có thời gian thì viết tiếp bài 2 nhé, để mọi người đọc nửa chừng rồi trốn thế.
[Up] [Print Copy]
  [Article]   Xây dựng hệ thống HA Load Balancer Mysql Cluster 12/12/2012 16:50:52 (+0700) | #4 | 271786
[Avatar]
ngtrongtri
Member

[Minus]    0    [Plus]
Joined: 27/03/2012 22:54:13
Messages: 114
Offline
[Profile] [PM]
Phần 2: Load Balancer Mysql Cluster

I. Setup HAProxy server
1. Cài đặt, chuẩn bị
Chúng ta cài đặt trên HAProxy server
Code:
apt-get install haproxy

2. Cấu hình
Backup lại file /etc/haproxy/haproxy.cfg
Cấu hình như sau:
nano /etc/haproxy/haproxy.cfg
Code:
# this config needs haproxy-1.4.20 
global 
        log 127.0.0.1   local0 
        log 127.0.0.1   local1 notice 
stats socket /var/run/haproxy.stat mode 600 
        maxconn 4096 
#        uid 99 
#        gid 99 
        daemon 
        #debug 
        #quiet 
defaults 
        log     global 
        mode    http 
        option  tcplog 
        option  dontlognull 
 
 
        retries 3 
        option        redispatch 
        maxconn 2000 
        contimeout      5000 
        clitimeout      50000 
        srvtimeout      50000 
 
listen mysql-cluster 0.0.0.0:3306 
    mode tcp 
    balance roundrobin 
   # option mysql-check user root 
#    listen webcluster *:80 
#    stats   enable 
#    stats   auth admin:admin 
   option httpchk 
    server db01 192.168.2.53:3306 check port 9200 
    server db02 192.168.2.54:3306 check port 9200

3. Config tiếp
Code:
nano /etc/default/haproxy

ENABLED=1
4. Xong restart haproxy
II. Cài đặt xinetd script trên SQL Node
Chúng ta thực hiện các bước sau trên 2 SQL Node
Đầu tiên cài đặt xinetd
Code:
apt-get install xinetd

Step 1: Trên con mysql server, ta tạo file /opt/mysqlchk_status

Code:
#!/bin/bash 
MYSQL_HOST="localhost" 
MYSQL_PORT="3306" 
MYSQL_USERNAME="ngtrongtri" 
MYSQL_PASSWORD="ngtrongtri" 
ERROR_MSG=`/usr/local/mysql-cluster/bin/mysql  --host=$MYSQL_HOST --port=$MYSQL_PORT --user=$MYSQL_USERNAME --password=$MYSQL_PASSWORD -e "show databases;" 2>/dev/null` 
if [ "$ERROR_MSG" != "" ] 
then 
        # mysql is fine, return http 200         
/bin/echo -e "HTTP/1.1 200 OK\r\n"         
/bin/echo -e "Content-Type: Content-Type: text/plain\r\n"         
/bin/echo -e "\r\n"         
/bin/echo -e "MySQL is running.\r\n"         
/bin/echo -e "\r\n" 
else         
# mysql is fine, return http 503         
/bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"         
/bin/echo -e "Content-Type: Content-Type: text/plain\r\n"         
/bin/echo -e "\r\n"         
/bin/echo -e "MySQL is *down*.\r\n"         
/bin/echo -e "\r\n" 
fi


Step 2: Trên mysql server, thực hiện lệnh sau
Code:
GRANT ALL PRIVILEGES ON *.* TO 'ngtrongtri'@'localhost' IDENTIFIED BY 'ngtrongtri';



Step 3:
Code:
chown nobody /opt//mysqlchk_status  
chmod 744 /opt//mysqlchk_status


Step 4: Check
Code:
root@server02:~# /opt/mysqlchk_status 
HTTP/1.1 200 OK 
Content-Type: Content-Type: text/plain 
MySQL is running.


Step 5: Thêm dòng sau đây vào /etc/services vào cuối
Code:
mysqlchk_status         9200/tcp                        # mysqlchk

Step 6: Tạo file sau /etc/xinetd.d/mysqlchk_status
Code:
# default: on 
# description: mysqlchk 
service mysqlchk_status 
{ 
        flags           = REUSE 
        socket_type     = stream 
        port            = 9200 
        wait            = no 
        user            = nobody 
        server          = /opt/mysqlchk_status 
        log_on_failure  += USERID 
        disable         = no 
        only_from       = 0.0.0.0/0 # recommended to put the IPs that need 
 
 
                                    # to connect exclusively (security purposes) 
        per_source      = UNLIMITED # Recently added (May 20, 2010) 
                                    # Prevents the system from complaining 
                                    # about having too many connections open from 
                                    # the same IP. More info: 
                                    # http://www.linuxfocus.org/English/November2000/article175.shtml 
}

Step 7: restart xinetd
Code:
/etc/init.d/xinetd restart

Step 8: check
Code:
root@server02:~# netstat --inet -nlp | grep :9200 
tcp        0      0 0.0.0.0:9200            0.0.0.0:*               LISTEN      6498/xinetd     
root@server02:~# telnet localhost 9200 
Trying ::1... 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
HTTP/1.1 200 OK 
 
Content-Type: Content-Type: text/plain 
 
MySQL is running. 
 
Connection closed by foreign host.


Ta telnet tới server HAProxy thử
Code:
root@server02:~# telnet 192.168.2.58 3306 
Trying 192.168.2.58... 
Connected to 192.168.2.58. 
Escape character is '^]'. 
K 
5.1.63-ndb-7.1.24-cluster-gpl]GM,2WA~ceQFJ#lw5=tQ

Vậy là bạn đã cấu hình Load Balancer thành công.
Hết phần 2.
[Up] [Print Copy]
  [Article]   Xây dựng hệ thống HA Load Balancer Mysql Cluster 21/02/2013 13:52:15 (+0700) | #5 | 273525
tuanksor
Member

[Minus]    0    [Plus]
Joined: 01/11/2011 02:44:03
Messages: 50
Offline
[Profile] [PM]
Còn phần nữa làm nốt đi ngtrongtri
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|