負載均衡的mariadb叢集搭建

郭遠威發表於2015-05-17

叢集介紹:

Galera是一個MySQL(也支援MariaDB,Percona)的同步多主叢集軟體,目前只支援InnoDB引擎。 

主要功能:

  • 同步複製
  • 真正的multi-master,即所有節點可以同時讀寫資料庫
  • 自動的節點成員控制,失效節點自動被清除
  • 新節點加入資料自動複製
  • 真正的並行複製,行級
  • 使用者可以直接連線叢集,使用感受上與MySQL完全一致

優勢:

  • 因為是多主,所以不存在Slave lag(延遲)
  • 不存在丟失交易的情況
  • 同時具有讀和寫的擴充套件能力
  • 更小的客戶端延遲
  • 節點間資料是同步的,而Master/Slave模式是非同步的,不同slave上的binlog可能是不同的

實現技術:

Galera叢集的複製功能基於Galera library實現,為了讓MySQL與Galera library通訊,特別針對MySQL開發了wsrep API。

      

實踐操作:負載均衡叢集搭建

  

 

1 .下載mariadb叢集

 wget http://mirrors.opencas.cn/mariadb/mariadb-galera-10.0.17/bintar-linux-x86_64/mariadb-galera-10.0.17-linux-x86_64.tar.gz

 

2. 新增mariadb使用者和組

  groupadd mariadb

  useradd -g mariadb mariadb

3. 將下載的檔案拷貝到目錄/usr/src下

4. 解壓並拷貝解壓後的檔案到/usr/local/mysql下

   root@ubuntu:/usr/src# tar -zxvf mariadb-galera-10.0.17-linux-x86_64.tar.gz

   root@ubuntu:/usr/local# cp -R mariadb-galera-10.0.17-linux-x86_64 /usr/local/mysql

5. 修改資料夾的所屬使用者和組

   root@ubuntu:/usr/local# chown -R mariadb:mariadb mysql/

6. 安裝mariadb字典資料庫,確保資料庫安裝成功

  mariadb@ubuntu:/usr/local/mysql$ ./scripts/mysql_install_db

  在資料庫中建立一個專門用來在各節點間進行復制的節點

7. 配置叢集中節點1的啟動引數檔案,my1.cnf

   主要在[mysqld]選項下面,加入如下配置:

   log-bin=mysql-bin

binlog_format = ROW

server-id       = 1

innodb_autoinc_lock_mode = 2

wsrep_provider = /usr/local/mysql/lib/libgalera_smm.so

wsrep_cluster_name = "my_mariadb_cluster"

wsrep_cluster_address="gcomm://"

wsrep_node_name = "cluster_node1"

wsrep_node_address = 127.0.0.1:4406

啟動節點1:

./bin/mysqld --defaults-file=my1.cnf --wsrep-new-cluster

 

8. 配置叢集中節點2的啟動引數檔案,my2.cnf

   主要在[mysqld]選項下面,加入如下配置:

log-bin=mysql-bin

binlog_format = ROW

datadir = /usr/local/mysql/data1

server-id   = 2

innodb_autoinc_lock_mode = 2

wsrep_provider = /usr/local/mysql/lib/libgalera_smm.so

wsrep_cluster_name = "my_mariadb_cluster"

wsrep_cluster_address="gcomm://127.0.0.1:4406"

wsrep_node_name = "cluster_node2"

wsrep_node_address = 127.0.0.1:4407

 

9. 配置叢集中節點3的啟動引數檔案,my3.cnf

   主要在[mysqld]選項下面,加入如下配置: 

    log-bin=mysql-bin

binlog_format = ROW

datadir = /usr/local/mysql/data2

server-id  = 3

innodb_autoinc_lock_mode = 2

wsrep_provider = /usr/local/mysql/lib/libgalera_smm.so

wsrep_cluster_name = "my_mariadb_cluster"

wsrep_cluster_address="gcomm://127.0.0.1:4407"

wsrep_node_name = "cluster_node3"

wsrep_node_address = 127.0.0.1:4408

 

10. 檢查並測試叢集是否啟動成功

觀察命令show status like 'wsrep%'; 的輸出資訊,看是否有3個節點。

連線到叢集中的任何一個節點:

./bin/mysql --host 127.0.0.1 --port 3307 -umycluster -p123456

在test資料庫下建立一個表goods

create table goods (id int(11) not null, name varchar(20));

插入一條記錄:

insert into goods(id,name) value(1,'iphone7');

然後登入到另外一個節點檢查剛才建立的表和記錄是否存在:

./bin/mysql --host 127.0.0.1 --port 3306 -umycluster -p12345

MariaDB [test]> select * from goods;

+----+---------+

| id | name    |

+----+---------+

|  1 | iphone7 |

+----+---------+

我們看到記錄已經存在,再次證明叢集已經搭配好。

 

11.配置haproxy

 下載:wget http://down1.chinaunix.net/distfiles/haproxy-1.4.21.tar.gz

 編譯:make TARGET=linux26 PREFIX=/usr/local/haproxy

 安裝:make install PREFIX=/usr/local/haproxy

在/usr/local/haproxy下新增配置檔案haproxy.cfg

    修改配置檔案內容如下:

global

        log            127.0.0.1        local0

        log            127.0.0.1        local1 notice

        #log loghost    local0 info

        maxconn         4096

        user            haproxy      #所屬執行的使用者

        group           haproxy      #所屬執行的組

        nbproc          1

        pidfile         /usr/local/haproxy/haproxy1.pid

        #debug

        #quiet

 

defaults

        log            global

        option         tcplog

        option         dontlognull

        retries         3

        option          redispatch

        maxconn         4096

        timeout         connect  50000ms

        timeout         client   50000ms

        timeout         server   50000ms

 

listen  mariadb-galera

        bind 127.0.0.1:3399  #客戶端監聽埠

        mode tcp

        balance  leastconn  #最少連線的負載均衡演算法

        server   db1  127.0.0.1:3306 check

        server   db1  127.0.0.1:3307 check

        server   db1  127.0.0.1:3308 check

 

啟動haproxy:

./sbin/haproxy -f haproxy.cfg

 

根據最少連線的負載均衡演算法,haproxy將讀寫請求重定向到最少連線的資料庫伺服器上。

檢查haproxy是否配置正確:

 

先連線上: mariadb@ubuntu:/usr/local/mysql$ ./bin/mysql --host 127.0.0.1 --port 3399 -umycluster -p123456 #注意連線埠為3399,是haproxy伺服器的監聽埠

 

插入一條記錄試試:insert into goods(id,name) value (2,'lumia');

Query OK, 1 row affected (0.19 sec)

成功,說明haproxy配置ok

相關文章