1. 程式人生 > >Haproxy+mysql cluster( MySQL 叢集) 配置

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登入

wKioL1R8RuOwLCEWAAYmE9A0L_4625.jpg

三、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 

wKiom1R9M53gIIoEAAFvaL4okmM280.jpg

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  ]

wKioL1R9OILyn6L2AAXs559Vej8749.jpgwKiom1R9OEfyn9AzAAF8FYaGkuk795.jpg

mysql 服務 1.1.1.11:3306 依然可以正常使用。