叢集介紹:
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叢集
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