Haproxy+mysql cluster( MySQL 叢集) 配置
一、準備
1、準備伺服器
建立有2個節點的MySQL CLuster體系,使用6臺伺服器建立Haproxy+mysql cluster( MySQL 叢集) 體系
節點 | 對應的IP和埠 |
Haproxy負載均衡(1個) centos 6.3 | 1.1.1.11 |
管理節點(1個) centos 6.3 | 1.1.1.30 |
SQL節點 (2個) centos 6.3 | 1.1.1.21 |
1.1.1.22 | |
資料節點 (2個) centos 6.3 | 1.1.1.31 |
1.1.1.32 |
二、Haproxy負載均衡安裝配置
[[email protected] ~]# yum install haproxy*
在/etc/haproxy/目錄下建立haproxy.cfg配置檔案
--------------------------------------------------------------------------------
[[email protected] ~]# vim /etc/haproxy/haproxy.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log 127.0.0.1 local0 info #日誌相關
log 127.0.0.1 local1 notice
maxconn 4096
chroot /usr/local/haproxy
uid root
gid root
daemon
#debug
#quiet
pidfile /usr/local/haproxy/haproxy.pid
defaults
log global
mode http
#option httplog
option dontlognull
retries 3
option redispatch
maxconn 8000
contimeout 3000
clitimeout 30000
srvtimeout 30000
listen mysql
bind 0.0.0.0:3306 #代理埠
mode tcp #模式 TCP
option mysql-check #user haproxy #mysql健康檢查 haproxy為mysql登入使用者名稱,無密碼
balance roundrobin #排程演算法
server mysql1 1.1.1.21:3306 check port 3306#weight 1 check inter 1s rise 2 fall 2 #健康檢查加上check
server mysql2 1.1.1.22:3306 check port 3306#weight 1 check inter 1s rise 2 fall 2
listen stats #監控
mode http
bind 0.0.0.0:8888
stats enable
stats uri /dbs
stats realm Global\ statistics
stats auth admin:hello123
------------------------
--------------------
不少同學應該不知道如何建立無密碼的haproxy使用者,這裡提供方法如下:
create user [email protected]'%' identified by '';
如果要授權,命令如下
grant all on testdb.* to [email protected]'%'
flush privileges;
------------------------------------------------------------------------------
啟動服務:/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg
登入瀏覽器檢視: 輸入admin hello123登入
三、mysql cluster安裝
1,mysql cluster 各節點安裝,以管理節點為例
[[email protected] ~]# groupadd mysql
[[email protected] ~]# useradd mysql -g mysql
[[email protected] ~]# tar -xvf mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar.gz
[[email protected] ~]# mv mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64 /usr/local/mysql
[[email protected] ~]# cd /usr/local/
[[email protected] ~]# chown -R mysql:mysql mysql/
[[email protected] ~]# cd mysql/
[[email protected] ~]# scripts/mysql_install_db --user=mysql
2,節點配置
管理節點:
[[email protected] ~]# vi /var/lib/mysql-cluster/config.ini
--------------------------------------------------------------------------------
[NDBD DEFAULT]
NoOfReplicas=2 #副本數量,建議使用預設的2
MaxNoOfConcurrentOperations=10000
DataMemory=1024M #每個資料節點中給資料分配的記憶體
IndexMemory=500M #每個資料節點中給索引分配的記憶體
BackupMemory: 50M
[NDB_MGMD]
#管理節點配置項
Nodeid= 1
HostName=1.1.1.30 #管理節點IP
DataDir=/usr/local/mysql/data #管理節點日誌、配置目錄
ArbitrationRank: 1 #該節點的優先級別等級
[NDBD]
#資料節點配置項
Nodeid = 2 #第一個資料節點
HostName=1.1.1.31 #資料節點IP
DataDir=/usr/local/mysql/data #資料節點存放資料的目錄
[NDBD]
Nodeid = 3 #第二個資料節點
HostName=1.1.1.32
DataDir=/usr/local/mysql/data
[mysqld]
#SQL節點配置項
Nodeid = 4 #第一個SQL節點
HostName=1.1.1.21
[mysqld]
Nodeid = 5 #第二個SQL節點
HostName=1.1.1.22
[mysqld]
Nodeid = 6 #第三個SQL節點
HostName=1.1.1.254
[mysqld]
#建議保留一個SQL節點配置口
--------------------------------------------------------------------------------
資料節點: 兩資料節點配置一樣
[[email protected] ~]# vim /etc/my.cnf
--------------------------------------------------------------------------------
[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local//mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#執行NDB儲存引擎
ndbcluster
#指定管理節點
ndb-connectstring=1.1.1.30:1186
[MYSQL_CLUSTER]
ndb-connectstring=1.1.1.30:1186
[NDB_MGM]
connect-string=1.1.1.30
[mysqld_safe]
log-error=/usr/local/mysql/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
--------------------------------------------------------------------------------
SQL節點配置:
[[email protected] ~]# cd /usr/local/mysql/
[[email protected] ~]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[[email protected] ~]# chmod +x /etc/rc.d/init.d/mysqld
[[email protected] ~]# chkconfig --add mysqld
[[email protected] ~]# vi /etc/my.cnf
--------------------------------------------------------------------------------
[mysqld]
server-id=4
#每個伺服器的id不一樣
datadir=/usr/local/mysql/data
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-bin = /usr/local/mysql/log/mysql-bin.log
max_connections=1000
skip-name-resolve
#以下為mysql 主主模式的配置檔案
# 忽略mysql資料庫複製
binlog-ignore-db=mysql
# 每次增長2
auto-increment-increment = 2
# 設定自動增長的欄位的偏移量,即初始值為2
auto-increment-offset = 1
[mysqld_safe]
log-error=/usr/local/mysql/log/mysqld.log
pid-file=/usr/local/mysql/mysqld.pid
[MYSQLD]
ndbcluster
ndb-connectstring=1.1.1.30
[MYSQL_CLUSTER]
ndb-connectstring=1.1.1.30
[NDB_MGM]
connect-string=1.1.1.30
3,啟動服務
CLUSTER啟動的順序依次為:管理節點—資料節點—SQL節點 關閉順序相反
管理節點啟動:
[[email protected] ~]# /usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
新增新節點後,重新載入管理節點配置資訊:
[[email protected] ~]# /usr/local/mysql/bin/ndb_mgmd -f /etc/config.ini --initial
或
[[email protected] ~]# /usr/local/mysql/bin/ndb_mgmd -f /etc/config.ini --reload
資料節點啟動:
[[email protected] ~]# /usr/local/mysql/bin/ndbd --initial
注意:僅限第一次mysql節點啟動使用–-initial,後面再啟動不需要此引數
SQL節點啟動:
[[email protected] ~]# service mysqld start
四、mysql cluster 測試
1,檢視cluster 資訊
[[email protected] ~]#ndb_mgm -e show
2,測試SQL資料同步
從SQL節點1登入,建立資料庫和表,進行簡單測試。
[[email protected] ~]# mysql -uroot -p
mysql> create database test ;
mysql> use test;
Database changed
mysql> create table test1(id int,name varchar(10)) engine=ndb ;
mysql> insert into test1 values(1,'test');
mysql> select * from test1 ;
+------+---------+
| id | name |
+------+---------+
| 1 | test |
+------+---------+
從SQL節點2登入,檢視效果,庫,表和資料已經同步。
從SQL節點2節點插入一條資料,同樣登陸SQL節點1,也能看到資料已經同步
3,測試HA服務
停止SQL節點2服務檢視
[[email protected] ~]# /etc/init.d/mysqld stop
Shutting down MySQL.... [ OK ]
mysql 服務 1.1.1.11:3306 依然可以正常使用。