1MySQL集群简介
1.1什么是MySQL集群
MySQL集群是一个无共享的(shared-nothing)、分布式节点架构的存储方案,其目的是提供容错性和高性能。
数据更新使用读已提交隔离级别(read-committedisolation)来保证所有节点数据的一致性,使用两阶段提交机制(two-phasedcommit)保证所有节点都有相同的数据(如果任何一个写操作失败,则更新失败)。
无共享的对等节点使得某台服务器上的更新操作在其他服务器上立即可见。传播更新使用一种复杂的通信机制,这一机制专用来提供跨网络的高吞吐量。
通过多个MySQL服务器分配负载,从而最大程序地达到高性能,通过在不同位置存储数据保证高可用性和冗余。
了解更多:
http://www.mysql.com/why-mysql/white-papers/guide-to-optimizing-performance-of-the-mysql-cluster/
1.2集群 MySQL中名称概念
1)Sql 结点(SQL node—下图对应为 mysqld):分布式数据库。包括自身数据和查询中心结点数据
2)数据结点(Data node – ndbd):集群共享数据(内存中)
3)管理服务器(Management Server – ndb_mgmd):集群管理 SQL node,Data node
详情见下图:
1.3 环境配置
1)至少2台Linux服务器,后面的例子是3台Linux服务器
A:192.168.1.179 Management Server
B:192.168.1.136 Data node、SQL node
C:192.168.1.10 Data node、SQL node
如果只有2台的话,那么其中一台机器就要多一个角色:Management Server
2)MySQL集群版本安装程序,分32位和位版本,最新版本请在http://www.mysql.com/downloads/里面下载
2安装
不管是Management Server,还是Data node、SQL node,都需要先安装MySQL集群版本,然后根据不用的配置来决定当前服务器有哪几个角色。
安装之前准备好mysql用户和mysql用户组,相关命令:
groupadd mysql
useradd mysql -g mysql
确定相关机器的防火墙已关闭(或者设置防火墙这几台机器之间的网络连接是畅通无阻的),相关命令:
chkconfig iptables off
service iptables stop
2.1安装MySQL集群版本
1)把mysql-cluster-advanced-7.3.2-linux-glibc2.5-i686.tar.gz(这是32位安装版,位安装版:mysql-cluster-advanced-7.3.2-linux-glibc2.5-x86_.tar.gz)上传到/usr/local
2)解压:tar zxvf mysql-cluster-advanced-7.3.2-linux-glibc2.5-i686.tar.gz
3)重命名:mv mysql-cluster-advanced-7.3.2-linux-glibc2.5-i686 mysql
4)授权:chown -R mysql:mysql mysql
5)切换到mysql用户:su – mysql
6)切换目录到mysql:/usr/local/mysql
7)安装mysql:scripts/mysql_install_db --user=mysql
2.2配置Management Server
1)使用root账号创建目录:mkdir /var/lib/mysql-cluster
2)新建文件config.ini然后上传到mysql-cluster里面:
[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
[ndb_mgmd]
Hostname=192.168.2.128
datadir=/var/lib/mysql-cluster
[ndbd]
Hostname=192.168.2.129
datadir=/usr/local/mysql/data/
[ndbd]
Hostname=192.168.2.24
datadir=/usr/local/mysql/data/
[MYSQLD]
Hostname=192.168.2.24
[MYSQLD]
Hostname=192.168.2.129
[MYSQLD]
3)授权:chown -R mysql:mysql /var/lib/mysql-cluster
4)切换到mysql用户:su – mysql
5)启动管理服务:/usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
6)查看服务是否正常启动:netstat –lntpu
打印:
tcp 0 0 0.0.0.0:1186 0.0.0.0:* LISTEN 2437/ndb_mgmd
看到1186端口开放了说明启动是正常的
2.3配置Data Node
1)新建文件my.cnf然后上传到/etc里面:
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#basedir = /usr/local/mysql/
datadir = /usr/local/mysql/data
#user = mysql
#port = 3306
#socket = /tmp/mysql.sock
ndbcluster
ndb-connectstring=192.168.2.128
[mysql_cluster]
ndb-connectstring=192.168.2.128
(*网上有些资料是直接改/usr/local/mysql/my.cnf,我试了一下,无法启动,估计程序默认是读取/etc/my.cnf)
2)切换到mysql用户:su – mysql
3)启动数据节点服务:/usr/local/mysql/bin/ndbd –initial
第一次启动需要加参数:–initial,以后就不用加了,直接运行:/usr/local/mysql/bin/ndbd
4)查看服务是否正常启动:netstat –lntpu
打印:
tcp 0 0 192.168.2.24:56806 0.0.0.0:* LISTEN 4949/ndbd
tcp 0 0 192.168.2.24:444 0.0.0.0:* LISTEN 4949/ndbd
tcp 0 0 192.168.2.24:50531 0.0.0.0:* LISTEN 4949/ndbd
看到ndbd了说明启动是正常的
2.4配置SQL Node
1)新建文件my.cnf然后上传到/etc里面,和上面的Data Node里面的配置一样,如果上面的步骤已经做了,略去此步骤。
2)切换到mysql用户:su – mysql
3)设置管理员密码:
/usr/local/mysql/bin/mysqladmin -u root password '123'
/usr/local/mysql/bin/mysqladmin -u root -h LINUX129 password '123'
上面的命令行里面的123是新密码,LINUX129是机器名,这2条命令来自于安装mysql执行:scripts/mysql_install_db --user=mysql 后的打印日志
4)复制mysqld到系统服务里面去:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
如果权限不够,可以先使用root用户授权:
chown -R mysql:mysql /etc/init.d/mysqld
5)启动SQL节点服务:service mysqld start
或者/etc/init.d/mysqld start
或者/usr/local/mysql/bin/mysqld_safe --user=mysql &
6)查看服务是否正常启动:netstat –lntpu
打印:
tcp 0 0 :::3306 :::* LISTEN 2590/mysqld
看到3306端口开放了说明启动是正常的
3常用命令或问题
1)ndb_mgmd管理命令:/usr/local/mysql/bin/ndb_mgm
执行之后就是管理控制台了,里面可以继续输入命令。
查看集群里面的全部节点的状态:show
2)停止集群服务器的命令:/usr/local/mysql/bin/ndb_mgm -e shutdown
或者在 ndb_mgm 下查看服务ID show 看到相应的ID号 使用 ID STOP停止服务
如果集群配置有更新了:rm /usr/local/mysql/mysql-cluster/ndb_1_config.bin.1
3)停止SQL节点的命令:/usr/local/mysql/bin/mysqladmin -uroot shutdown
4)SQL Node上连接MySQL:/usr/local/mysql/bin/mysql -u root –p
执行之后就是MySQL控制台了,里面可以继续输入命令。
测试集群环境:
mysql> show databases;
打印:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| ndb_2_fs |
| test |
+--------------------+
mysql> create database aa;
mysql> use aa
mysql> CREATE TABLE ctest2 (i INT primary key) ENGINE=NDB; //1.每个MySQL集群表都需要主键.如果没有定义主键,则 NDB 存储引擎会自动创建一个,并且不是指定 USING HASH 的方式;2.这里必须指定数据库表的引擎为NDB(或者NDBCLUSTER),否则同步失败
mysql> INSERT INTO ctest2 () VALUES (1);
mysql> SELECT * FROM ctest2;
打印:
+------+
| i |
+------+
| 1 |
+------+
同样方式在另外一台SQL Node上连接MySQL,查看数据库、表、记录是否已同步过去。
5)解决MySQL客户端工具连接SQL Node出现1130的异常,在MySQL控制台下执行:
●如果你想myuser使用mypassword从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
●如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
●如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器的dk数据库,并使用mypassword作为密码
GRANT ALL PRIVILEGES ON dk.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
6)使用MySQL客户端工具创建表时选择引擎:NDBCLUSTER,如下图:
LVS配置
lvs是在linux操作系统基础上建立虚拟服务器,实现服务节点之间的负载均衡。它是基于linux内核实现的。2.6.X内核默认集成了lvs模块。
lvs常用负载均衡的实现是基于ip协议的,所以一般称为ipvs。ipvs有三种实现方式,最常用、性能最好的是Direct routing(简称DR)。
Ubuntu9.10已经用了2.6的内核,所以不需要再编译内核了,为了检测一下,可以在命令行执行:modprobe -l | grep ipvs
会出现:
kernel/net/netfilter/ipvs/ip_vs.ko
kernel/net/netfilter/ipvs/ip_vs_rr.ko
kernel/net/netfilter/ipvs/ip_vs_wrr.ko
kernel/net/netfilter/ipvs/ip_vs_lc.ko
kernel/net/netfilter/ipvs/ip_vs_wlc.ko
kernel/net/netfilter/ipvs/ip_vs_lblc.ko
kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
kernel/net/netfilter/ipvs/ip_vs_dh.ko
kernel/net/netfilter/ipvs/ip_vs_sh.ko
kernel/net/netfilter/ipvs/ip_vs_sed.ko
kernel/net/netfilter/ipvs/ip_vs_nq.ko
kernel/net/netfilter/ipvs/ip_vs_ftp.ko
说明内核已经集成了ipvs模块
我的机器三台机器分别是192.168.1.10,192.168.1.9,192.168.1.136。虚拟IP为192.168.1.222其中192.168.1.9作为负载均衡器使用,首先需要安装ipvsadm。
执行:apt-get install ipvsadm
安装完成后执行:ipvsadm
会看到提示:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
说明已经安装成功。
接下来就是配置lvs,其实很简单,就是在负载均衡器建一个虚拟ip,然后用ipvsadm建立转发规则
配置虚拟IP:
ifconfig eth0:0 192.168.1.222 netmask 255.255.255.0 broadcast 192.168.1.222
echo "1">/proc/sys/net/ipv4/ip_forward (此指令暂没发现有啥用处)
使用ipvsadm安装LVS服务:
ipvsadm -A -t 192.168.1.222:3306 -s wrr ##注意3306为MYSQL服务端口,如果是其它服务可修改端口号
增加真实服务器:
ipvsadm -a -t 192.168.1.222:3306 -r 192.168.1.10 -g -w 1 ###最后面是数字“一”不是“L”
ipvsadm -a -t 192.168.1.222:3306 -r 192.168.1.136 -g -w 1
sudo ipvsadm -a -t 192.168.1.222:3306 -r 192.168.1.121 -g -w 3
真实服务器的配置:
ifconfig lo:0 192.168.1.222 netmask 255.255.255.255 broadcast 192.168.1.222
route add -host 192.168.1.222 dev lo:0 (此指令暂没发现有啥用处)
echo "1">/proc/sys/net/ipv4/ip_forward (此指令暂没发现有啥用处)
我自己还尝试成功的指令:
LBServer:
ifconfig eth0:0 192.168.1.222 netmask 255.255.252.0 broadcast 192.168.1.222
真实服务器:
ifconfig eth0:0 192.168.1.222 netmask 255.255.252.0 broadcast 192.168.1.222
我只需要建立一个eth0:0就可以了。。。与实际不同的在于子网掩码的第三段(255 vs 252)
在负载均衡服务器用ipvsadm --list查看:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.222:3306 wrr
-> 192.168.1.10:3306 Route 1 0 0
-> 192.168.1.136:3306 Route 1 0 0
接着是做ARP Hidden,不同的linux系统指令有所区别,Ubuntu系统的指令为:
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
这时就可以访问虚拟IP(192.168.1.222)端口还是3306,访问MYSQLCLUSTER,注意 ,使用的用户必需要在所有MYSQL节点建立并且密码一至,否则无法登陆。
最后可以在负载均衡服务器上用ipvsadm --list查看:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.222:3306 wrr
-> 192.168.1.10:3306 Route 1 2 0
-> 192.168.1.136:3306 Route 1 2 0
确实大功告成。不过如果机器重启的话,这些配置就没了,需要重新设置哦,另外还有个ipvsadm -C的指令是用于清除ipvsadm配置的,可能会有用处。
Ubuntu下部署Keepalived
Ubuntu下部署Keepalived
Keepalived是一种防止单点故障的高可用解决方案。
首先下载:
cd /usr
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
解压:
tar zxvf keepalived-1.2.7.tar.gz
编译之前需要安装几个程序库
[plain]
apt-get install libssl-dev
apt-get install openssl
apt-get install libpopt-dev
然后运行
./configure --prefix=/usr
得到如下结果:
Keepalived configuration
------------------------
Keepalived version : 1.2.7
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
IPVS use libnl : No
Use VRRP Framework : Yes
Use VRRP VMAC : Yes
SNMP support : No
Use Debug flags : No
编译吧:
make
make install
程序安装到下面几个目录:
/usr/sbin中包含可执行程序keepalived
/usr/etc/keepalived/ 中包含了配置文件和例子
/usr/etc/rc.d/init.d/keepalived 是可以作为service的脚本文件,复制到/etc/init.d目录下
修改三处:
[plain]
#. /etc/rc.d/init.d/functions
. /lib/lsb/init-functions
[plain]
#. /etc/sysconfig/keepalived
. /usr/etc/sysconfig/keepalived
因为redhat之外的Linux没有上面两处目录。
下面也要修改,将${..} 直接用start替换。
[plain]
start() {
echo -n $"Starting $prog: "
#daemon keepalived ${KEEPALIVED_OPTIONS}
daemon keepalived start
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
}
还要创建目录
[plain]
mkdir -p /var/lock/subsys
现在设置为系统服务
[plain]
update-rc.d keepalived default
安装daemon服务。
apt-get install daemon
配置keepalived.conf
vi /etc/keepalived/keepalived.conf
添加如下内容:
global_defs {
router_id HaMySQL_1
}
vrrp_sync_group VGM {
group {
VI_MYSQL
}
}
vrrp_instance VI_MYSQL {
state MASTER
interface eth0
virtual_router_id 100
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.222/24 dev etho label eth0:1
}
}
virtual_server 192.168.1.222 3306 {
delay_loop 6
lb_algo rr
lb_kind DR
# nat_mask 255.255.0.0
#persistence_timeout 50
protocol TCP
real_server 192.168.1.10 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
real_server 192.168.1.136 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
global_defs {
router_id HaMySQL_1
}
vrrp_sync_group VGM {
group {
VI_MYSQL
}
}
vrrp_instance VI_MYSQL {
state MASTER
interface eth1
virtual_router_id 100
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.100.100.251/24 etho label eth0:1
}
}
virtual_server 172.100.100.251 3306 {
delay_loop 6
lb_algo rr
lb_kind DR
# nat_mask 255.255.0.0
#persistence_timeout 50
protocol TCP
real_server 172.16.48.206 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
real_server 172.16.48.207 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
real_server 172.16.48.208 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
real_server 172.16.48.211 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
4.sql服务节点的配置
vi /etc/rc.d/init.d/realserver.sh 添加如下配置:
#!/bin/bash
# description: Config realserver lo and apply noarp
SNS_VIP=192.168.1.222
/etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
#!/bin/bash
# description: Config realserver lo and apply noarp
SNS_VIP=172.100.100.251
/etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
添加加可执行的权限
chmod +x /etc/rc.d/init.d/realserver.sh
注:四台sql节点都要进行此步操作
五、启动LVS节点(mysql cluster中的sql节点)
/etc/rc.d/init.d/realserver.sh start
六、启动调度器(keepalived的服务器端启动)
/etc/rc.d/init.d/keepalived start
启动后可以用命令 tail -f /var/log/messages 进行查看
若看到如下提示,则表示配置成功。
1.[root@sg204 mysql-cluster]# tail -f /var/log/messages
2.May 29 17:21:01 sg204 Keepalived_vrrp: Opening file '/etc/keepalived/keepalived.conf'.
3.May 29 17:21:01 sg204 Keepalived_vrrp: Configuration is using : 63921 Bytes
4.May 29 17:21:01 sg204 Keepalived_healthcheckers: Using LinkWatch kernel netlink reflector...
5.May 29 17:21:01 sg204 Keepalived_vrrp: Using LinkWatch kernel netlink reflector...
6.May 29 17:21:01 sg204 Keepalived_healthcheckers: Activating healtchecker for service [172.16.48.206:3306]
7.May 29 17:21:01 sg204 Keepalived_healthcheckers: Activating healtchecker for service [172.16.48.207:3306]
8.May 29 17:21:01 sg204 Keepalived_healthcheckers: Activating healtchecker for service [172.16.48.208:3306]
9.May 29 17:21:01 sg204 Keepalived_healthcheckers: Activating healtchecker for service [172.16.48.211:3306]
10.May 29 17:21:01 sg204 Keepalived_vrrp: VRRP sockpool: [ifindex(3), proto(112), fd(10,11)]
11.May 29 17:21:02 sg204 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) Transition to MASTER STATE
12.May 29 17:21:03 sg204 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) Entering MASTER STATE
13.May 29 17:21:03 sg204 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) setting protocol VIPs.
14.May 29 17:21:03 sg204 Keepalived_healthcheckers: Netlink reflector reports IP 172.100.100.251 added
15.May 29 17:21:03 sg204 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) Sending gratuitous ARPs on eth1 for 172.100.100.251
16.May 29 17:21:03 sg204 Keepalived_vrrp: VRRP_Group(VGM) Syncing instances to MASTER state
17.May 29 17:21:03 sg204 avahi-daemon[4768]: Registering new address record for 172.100.100.251 on eth1.
18.May 29 17:21:03 sg204 Keepalived_vrrp: Netlink reflector reports IP 172.100.100.251 added
19.May 29 17:21:08 sg204 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) Sending gratuitous ARPs on eth1 for 172.100.100.251
好了,终于可以正常启动了。
service keepalived start
关闭用
service keepalived stop
架构图
这里调度器只用了一个节点,没有设置Backup
双管理节点修改配置文件步骤:
1修改节点一配置文件, 并在配置文件中注释掉管理节点二的相关信息;
2在MGM管理程序中停止管理节点一的管理服务;删除/usr/local/mysql/mysql-cluster下面的两个文件;并且使用命令:/usr/local/mysql/bin/ndb_mgmd –f /var/lib/mysql-cluster/config.ini --reload命令重启管理服务;
3按照步骤1 2修改管理节点二的配置文件,并重启管理节点二的管理服务;
4停止管理节点一的管理服务,并修改其配置文件,将节点二的注释取消,并重启管理节点一的管理服务;管理节点二重复管理节点一的步骤;些时查看服务正常,并且修改信息已经更新。
注:如果直接修改配置文件,不注销掉其它管理节点信息,将会报错:ERROR Message: The cluster configuration is not yet confirmed by all defined management servers. This management server is still waiting for node 1 to connect.
Could not get configuration
* 4012: Failed to get configuration
* The cluster configuration is not yet confirmed by all defined management servers. This management server is still waiting for node 1 to connect.
--------------------------------------------------添加新的SQL节点
注意:所有配置文件修改完成之后,SQL节点启动,需要在NDB_MGM中重启NDB数据节点,否则无法识别新的SQL节点。
另外:需要把其它SQL节点 /usr/local/mysql/data目录下的文件复制到新添加的节点本地目录下,并将来的数据删除。
添加数据节点:
在配置文件中添加新的数据节点信息;数据节点安装相关插件并修改参数文件 /etc/my.cnf文件之后,启动NDBD服务加参数—initial;注意,本地的DATA目录的文件删除,并且不需要复制其它节点的数据文件,DATA目录一定保持干净,当然加入集群之后自动同步的数据文件不算。在数据节点启动NDBD服务之后,管理节点是无法识别新的数据节点,必需分别重启数据节点及SQL节点,注意:为保证服务的高可用,节点重启时,必要一个节点一个节点的重启。下载本文