集羣介紹:node
Galera是一個MySQL(也支持MariaDB,Percona)的同步多主集羣軟件,目前只支持InnoDB引擎。 mysql
主要功能:linux
優點:redis
實現技術:算法
Galera集羣的複製功能基於Galera library實現,爲了讓MySQL與Galera library通信,特別針對MySQL開發了wsrep API。sql
實踐操做:負載均衡集羣搭建數據庫
1 .下載mariadb集羣ubuntu
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