標籤:mysql cluster
一. MySQL叢集簡介
MySQL群集技術在分布式系統中為MySQL資料提供了冗餘特性,增強了安全性,使得單個MySQL伺服器故障不會對系統產生巨大的負面效應,系統的穩定性得到保障。
MySQL群集需要有一組電腦,每台電腦的角色可能是不一樣的。MySQL群集中有三種節點:管理節點、資料節點和SQL節點。群集中的某電腦可能是某一種節點,也可能是兩種或三種節點的集合。這三種節點只是在邏輯上的劃分,所以它們不一定和實體電腦是一一對應的關係。
管理節點(也可以稱管理伺服器)主要負責管理資料節點和SQL節點,還有群集設定檔和叢集記錄檔檔案。它監控其他節點的工作狀態,能夠啟動、關閉或重啟某個節點。其他節點從管理節點檢索配置資料,當資料節點有新事件時就把事件資訊發送給管理節點並寫入叢集記錄檔。
資料節點用於儲存資料。
SQL節點跟一般的MySQL伺服器是一樣的,我們可以通過它進行SQL操作。
中畫出了三種叢集節點及應用程式間的關係:
二. 部署過程
從上面的簡介可知,MySQL群集中有三種節點:管理節點、資料節點和SQL節點;所以,如果要實現高可用冗餘叢集,至少需要6台主機。
我們這裡把資料節點和SQL節點放在同一台主機上,使用舞台主機,主機資訊如下:
10.10.91.71 node1 # mgmd節點
10.10.91.72 node2 # sql和data節點
10.10.91.75 node3 # sql和data節點
10.10.91.77 node4 # mgmd節點
1. 初始化系統
每個節點都操作
# systemctl disable firewalld # vi /etc/selinux/config SELINUX=disabled # hostnamectl set-hostname xxx# cd/usr/local/# wget http://mirrors.sohu.com/mysql/MySQL-Cluster-7.5/mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz # 可根據時間情況下載,從其他鏡像源或官方下載# tar -zxf mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz && mv mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz /usr/local/mysql# cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin/# chmod +x /usr/local/bin/ndb_mgm*# chmod +x /usr/local/mysql/bin/# echo "export PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile# reboot
2. 在node1和node4上組態管理節點
# mkdir /var/lib/mysql-cluster# vi /var/lib/mysql-cluster/config.ini
node1
[ndbd default]NoOfReplicas=2DataMemory=512MIndexMemory=18M[ndb_mgmd]NodeId=1HostName=10.10.91.71DataDir=/var/lib/mysql-cluster[ndb_mgmd]NodeId=6HostName=10.10.91.77DataDir=/var/lib/mysql-cluster[ndbd]NodeId=2HostName=10.10.91.72DataDir=/usr/local/mysql/data[ndbd]NodeId=3HostName=10.10.91.75DataDir=/usr/local/mysql/data[mysqld]NodeId=4HostName=10.10.91.72[mysqld]NodeId=5HostName=10.10.91.75
node4
[ndbd default]NoOfReplicas=2DataMemory=512MIndexMemory=18M[ndb_mgmd]NodeId=6HostName=10.10.91.77DataDir=/var/lib/mysql-cluster[ndb_mgmd]NodeId=1HostName=10.10.91.71DataDir=/var/lib/mysql-cluster[ndbd]NodeId=2HostName=10.10.91.72DataDir=/usr/local/mysql/data[ndbd]NodeId=3HostName=10.10.91.75DataDir=/usr/local/mysql/data[mysqld]NodeId=4HostName=10.10.91.72[mysqld]NodeId=5HostName=10.10.91.75
3. 在node2/node3上配置資料節點和sql節點
# groupadd mysql && useradd -g mysql mysql# vi /etc/my.cnf
node2
[client]socket=/usr/local/mysql/mysql.sock[mysqld]basedir=/usr/local/mysqldatadir=/usr/local/mysql/datasocket=/usr/local/mysql/mysql.sockuser=mysqlsymbolic-links=0ndbclusterndb-connectstring=10.10.91.71,10.10.91.77[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid[mysql_cluster]ndb-connectstring=10.10.91.71,10.10.91.77
node3
[client]socket=/usr/local/mysql/mysql.sock[mysqld]basedir=/usr/local/mysqldatadir=/usr/local/mysql/datasocket=/usr/local/mysql/mysql.sockuser=mysqlsymbolic-links=0ndbclusterndb-connectstring=10.10.91.71,10.10.91.77[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/usr/local/mysql/mysqld.pid[mysql_cluster]ndb-connectstring=10.10.91.71,10.10.91.77
# cd /usr/local/mysql# bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data# chown -R mysql.mysql /usr/local/mysql# cp mysql/support-files/mysql.server /etc/rc.d/init.d/# chmod +x /etc/rc.d/init.d/mysql.server# chkconfig --add mysql.server
4. Mysql Cluster叢集的啟動
# 啟動管理節點,初次開機需要+ --initial# ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial # 啟動資料節點,初次開機需要+ --initial# /usr/local/mysql/bin/ndbd --initial # 啟動 SQL 節點# /usr/local/mysql/bin/mysqld_safe --user=mysql &
# 查看叢集狀態
# 管理節點上操作:
[[email protected] local]# ndb_mgm-- NDB Cluster -- Management Client --ndb_mgm> showConnected to Management Server at: localhost:1186Cluster Configuration---------------------[ndbd(NDB)]2 node(s)id=2@10.10.91.72 (mysql-5.7.17 ndb-7.5.5, Nodegroup: 0, *) # dbdb節點id=3@10.10.91.75 (mysql-5.7.17 ndb-7.5.5, Nodegroup: 0)[ndb_mgmd(MGM)]2 node(s)id=1@10.10.91.71 (mysql-5.7.17 ndb-7.5.5) # mgmd節點id=6@10.10.91.77 (mysql-5.7.17 ndb-7.5.5)[mysqld(API)]2 node(s)id=4@10.10.91.72 (mysql-5.7.17 ndb-7.5.5) # mysqld節點id=5@10.10.91.75 (mysql-5.7.17 ndb-7.5.5)
5. 測試
# 先將 SQL 節點的資料庫密碼修改為相同的
# /usr/local/mysql/bin/mysql_secure_installation # 該命令為MySQL初始化命令操作或使用如下方法修改密碼mysql -u root -p; 隨機密碼(具體請參見/root/.mysql_secret檔案擷取),進入後使用如下指令修改密碼:SET PASSWORD = PASSWORD('新密碼');
# SQL 節點 1 上建立庫,並插入資料
# mysql -uroot -pmysql> create database aa;mysql> use aa;mysql> create table student(id int(10) primary key auto_increment,name varchar(30),age tinyint(2)) engine=ndb; # 資料庫表的引擎必須為NDB,不然就同步失敗了,可以用 show create table 表名; 來查看引擎mysql> insert into student (id,name,age) value(321281,"mzh",18);mysql> quit
# SQL 節點 2 查看是否同步
mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || aa || mysql || ndbinfo || performance_schema || sys |+--------------------+6 rows in set (0.00 sec)mysql> use aa;mysql> show tables;+--------------+| Tables_in_aa |+--------------+| student |+--------------+1 row in set (0.01 sec) mysql> select * from student;+--------+------+------+| id | name | age |+--------+------+------+| 321281 | mzh | 18 |+--------+------+------+1 row in set (4.27 sec) # 做到這裡,已經看到可以同步了。然後我們再類比SQL節點1宕機了,在SQL2上插入新的資料,再SQL1開機,查看資料是否會同步。
# 在SQL 1上操作:# /etc/rc.d/init.d/mysql.server stop# ps -ef| grep mysql # 在 SQL 2 操作:mysql> insert into student (id,name,age) value(12121,"hp",19);mysql> select * from student;+--------+------+------+| id | name | age |+--------+------+------+| 12121 | hp | 19 || 321281 | mzh | 18 |+--------+------+------+2 rows in set (0.00 sec) # 再在 SQL1 上查看是否同步# /etc/rc.d/init.d/mysql.server startmysql> select * from student;+--------+------+------+| id | name | age |+--------+------+------+| 12121 | hp | 19 || 321281 | mzh | 18 |+--------+------+------+2 rows in set (0.00 sec)
6. Mysql Cluster關閉和啟動
管理節點操作:# ndb_mgm -e shutdown # 關閉# ndb_mgmd -f /var/lib/mysql-cluster/config.ini # 啟動# /usr/local/mysql-cluster/ndb_mgm -e exit # 退出# /usr/local/mysql-cluster/ndb_mgm -e show # 查看和管理資料節點:# /usr/local/mysql/bin/ndbd # 啟動,資料節點和管理節點沒有啟動指令碼,可以自己手動編寫或將加到系統的起動機指令碼中SQL 節點操作:# /etc/rc.d/init.d/mysql.server stop/start/restart# chkconfig mysql.server # 添加到開機啟動
Mysql Cluster叢集配置詳解