負載均衡的mariadb集羣搭建

集羣介紹:node

Galera是一個MySQL(也支持MariaDB,Percona)的同步多主集羣軟件,目前只支持InnoDB引擎。 mysql

主要功能:linux

  • 同步複製
  • 真正的multi-master,即全部節點能夠同時讀寫數據庫
  • 自動的節點成員控制,失效節點自動被清除
  • 新節點加入數據自動複製
  • 真正的並行複製,行級
  • 用戶能夠直接鏈接集羣,使用感覺上與MySQL徹底一致

優點:redis

  • 由於是多主,因此不存在Slave lag(延遲)
  • 不存在丟失交易的狀況
  • 同時具備讀和寫的擴展能力
  • 更小的客戶端延遲
  • 節點間數據是同步的,而Master/Slave模式是異步的,不一樣slave上的binlog多是不一樣的

實現技術:算法

Galera集羣的複製功能基於Galera library實現,爲了讓MySQL與Galera library通信,特別針對MySQL開發了wsrep API。sql

      

實踐操做:負載均衡集羣搭建數據庫

  

 

1 .下載mariadb集羣ubuntu

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

 

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

相關文章
相關標籤/搜索