文章目录
环境说明
节点分布情况:
MGM1:10.1.1.50,
MGM2:10.1.1.51,
MGM3:10.1.1.52
NDBD1:10.1.1.53
NDBD2:10.1.1.56
NDBD2:10.1.1.57
SQL1:10.1.1.50,
SQL2:10.1.1.51,
SQL3:10.1.1.52
下载安装包
先官网下载页面 http://dev.mysql.com/downloads/cluster/ ,选择 Linux - Generic mysql-cluster-gpl-7.3.5-linux-glibc2.5-x86_64.tar.gz
环境清理(在各台服务器上都要执行)
清除MySQL旧版本:
首先使用如下命令来清理之前操作系统自带的MySQL安装:
yum -y remove mysql
然后使用如下命令:
[root@localhost src]# rpm -qa | grep mysql*
mysql-libs-5.1.61-4.el6.i686
apr-util-mysql-1.3.9-3.el6_0.1.i686
对于找到的2个剩余MySQL包,按照如下的命令格式予以删除:
rpm -e --nodeps mysql-libs-5.1.61-4.el6.i686
rpm -e --nodeps apr-util-mysql-1.3.9-3.el6_0.1.i686
软件准备(在各台服务器上都要执行)
将安装包 上传到各服务器的某个目录下(如 /usr/local/src ) 下面,然后解压并移到 /usr/local/mysql 目录下
tar -xzvf /usr/local/src/mysql-cluster-gpl-7.3.5-linux-glibc2.5-i686.tar.gz
mv /usr/local/src/mysql-cluster-gpl-7.3.5-linux-glibc2.5-i686/* /usr/local/mysql
新建mysql用户及用户组:
groupadd mysql
useradd -g mysql -s /usr/sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql
安装 My Cluster:
在sql节点上创建目录
cd /home
mkdir mysql
cd mysql
mkdir sql_node sql_node/data sql_node/share
文件权限参考
(444 r--r--r-- 600 rw------- 644 rw-r--r-- 666 rw-rw-rw-
700 rwx------ 744 rwxr--r-- 755 rwxr-xr-x 777 rwxrwxrwx)
chmod 775 -R ./
安装数据库
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql/sql_node/data
basedir:MYSQL安装文件的目录
datadir:存储数据库文件的目录
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld.service
chkconfig iptables off
关闭 selinux
vim /etc/selinux/config #(改为SELINUX=disabled)保存退出,
重启服务器
reboot
配置管理节点(192.168.137.101)
rm -rf /etc/my.cnf
vim /etc/config.ini
创建目录并设置权限
cd /home/mysql
mkdir manager manager/data ndb ndb/data
chmod 775 -R ./
config.ini内容如下:
[ndb_mgmd default]
DataDir = /home/mysql/manager/data
[ndbd default]
NoOfReplicas = 3
DataMemory = 2500M
IndexMemory = 800M
DataDir = /home/mysql/ndb/data
StringMemory = 50
MaxNoOfTables = 4096
MaxNoOfOrderedIndexes = 2048
MaxNoOfUniqueHashIndexes = 1024
MaxNoOfAttributes = 24576
MaxNoOfTriggers = 10240
MaxNoOfConcurrentTransactions = 409600
MaxNoOfConcurrentOperations = 3276800
TimeBetweenGlobalCheckpoints = 1000
TimeBetweenEpochs = 100
TimeBetweenWatchdogCheckInitial = 60000
TransactionBufferMemory = 20M
DiskCheckpointSpeed = 20M
DiskCheckpointSpeedInRestart = 100M
TimeBetweenLocalCheckpoints = 20
SchedulerSpinTimer = 400
SchedulerExecutionTimer = 100
RealTimeScheduler = 1
BackupMaxWriteSize = 2M
BackupDataBufferSize = 32M
BackupLogBufferSize = 8M
BackupMemory = 40M
MaxNoOfExecutionThreads = 4
TransactionDeadLockDetectionTimeOut = 15000
BatchSizePerLocalScan = 512
LongMessageBuffer = 16M
HeartbeatIntervalDbDb = 15000
HeartbeatIntervalDbApi = 15000
FragmentLogFileSize = 256M
NoOfFragmentLogFiles = 16
[mysqld default]
[ndb_mgmd]
NodeId = 1
HostName = 10.1.1.50
[ndb_mgmd]
NodeId = 2
HostName = 10.1.1.51
[ndb_mgmd]
NodeId = 3
HostName = 10.1.1.52
[ndbd]
NodeId = 11
HostName = 10.1.1.53
[ndbd]
NodeId = 12
HostName = 10.1.1.56
[ndbd]
NodeId = 13
HostName = 10.1.1.57
[mysqld]
NodeId = 20
HostName = 10.1.1.50
[mysqld]
NodeId = 21
HostName = 10.1.1.51
[mysqld]
NodeId = 22
HostName = 10.1.1.52
配置数据节点
vim /etc/my.cnf
[mysqld]
ndbcluster
ndb-connectstring = 10.1.1.50,10.1.1.51,10.1.1.52
[mysql_cluster]
ndb-connectstring = 10.1.1.50,10.1.1.51,10.1.1.52
配置SQL节点创建文件
cd /home/mysql
mkdir sql_node sql_node/data ndb ndb/data
chmod 775 -R ./
开机启动
cp -rf /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
###systemctl enable mysqld
vim /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /home/mysql/sql_node/data
default-storage-engine = ndbcluster
slow-query-log = on
slow_query_log_file = /home/mysql/sql_node/data/slow-query.log
long_query_time = 5
skip-external-locking
key_buffer_size = 600M
max_allowed_packet = 100M
table_open_cache = 2048
sort_buffer_size = 1024M
net_buffer_length = 8K
read_buffer_size = 400M
read_rnd_buffer_size = 200M
lower_case_table_names =1
back_log = 384
thread_stack = 256K
join_buffer_size = 500M
thread_cache_size = 200
query_cache_size = 640M
tmp_table_size = 256M
max_connections = 5000
max_connect_errors = 10000000
wait_timeout = 2880000
interactive_timeout = 2880000
thread_concurrency = 8
max_connections=1000
bind-address=0.0.0.0
skip-name-resolve
ndbcluster
ndb-connectstring = 10.1.1.50,10.1.1.51,10.1.1.52
[mysql_cluster]
ndb-connectstring = 10.1.1.50,10.1.1.51,10.1.1.52
启动节点
启动需要按照如下顺序进行:
Management Node > Data Node > SQL Node
启动管理节点
–initial 首次加载、/usr/local/mysql/etc/config.ini文件有改变,其它时候不要加,除非是在备份、恢复或配置变化后重启时,其他时候不要加,不然数据就清空。。。
/usr/local/mysql/bin/ndb_mgmd -f /etc/config.ini --initial
正常启动方式
/usr/local/mysql/bin/ndb_mgmd -f /usr/local/mysql/etc/config.ini
#查看ndb_mgmd是否启动
[root@localhost mysql]# ps -ef | grep ndb_mgmd
root 2948 1 1 23:47 ? 00:00:03 /usr/local/mysql/bin/ndb_mgmd -f /usr/local/mysql/etc/config.ini
root 2984 2073 0 23:52 pts/0 00:00:00 grep ndb_mgmd
#ndb_mgmd默认启动 1186 端口
[root@localhost mysql]# netstat -ntlp | grep ndb_mgmd
tcp 0 0 0.0.0.0:1186 0.0.0.0:* LISTEN 2948/ndb_mgmd
#查看集群状态
[root@localhost mysql]# /usr/local/mysql/bin/ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=11 (not connected, accepting connect from 192.168.137.102)
id=12 (not connected, accepting connect from 192.168.137.103)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.137.101 (mysql-5.6.17 ndb-7.3.5)
[mysqld(API)] 3 node(s)
id=81 (not connected, accepting connect from 192.168.137.104)
id=82 (not connected, accepting connect from 192.168.137.105)
id=83 (not connected, accepting connect from any host)
启动数据节点
只是在第一次启动或在备份/恢复或配置变化后重启ndbd时,才加–initial参数!
/usr/local/mysql/bin/ndbd --initial
正常启动方式
/usr/local/mysql/bin/ndbd
查看 ndbd 启动状态
[root@localhost ~]# ps -ef | grep ndbd
root 2373 1 0 18:11 ? 00:00:00 /usr/local/mysql/bin/ndbd
root 2377 1985 0 18:11 pts/0 00:00:00 grep ndbd
启动SQL节点
启动 SQL 节点
systemctl start mysqld
如果报
Failed to start mysqld.service: Unit not found
则这样起动:/usr/local/mysql/support-files/mysql.server start
关闭 SQL 节点
systemctl stop mysqld
重启 SQL 节点
systemctl stop mysqld
检验mysql是否运行
systemctl status mysqld
为sql指定密码
/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
/usr/local/mysql/bin/mysqladmin -u root -h 'host' password 'new-password'
授权
/usr/local/mysql/bin/mysql -u root -p
grant all privileges on *.* to 'root'@'%' identified by 'xjkjt@mysql';
flush privileges;
启动命令行窗口
/usr/local/mysql/bin/mysql -u root -p
java连接
jdbc:mysql:loadbalance://10.10.10.176:3306,10.10.10.177:3306/mysq_bb?roundRobinLoadBalance=true
问题
确保每个相关节点的机器的1186,2202,3306能telnet
程序都监听ip4
制作开机启动
非集群的表迁移时将引擎换成
ndbcluster
备份与恢复
备份
采用ndb_mgm管理客户端来备份,在管理节点执行ndb_mgm即可进入管理命令行,输入start backup开始备份所有节点,如果后面还跟着对应数据节点的id就只备份对应的数据节点,在数据节点会生成BACKUP文件目录
/usr/local/mysql/bin/ndb_mgm
start backup
恢复
单表还原
在某个节点上删除一张表后进行还原
/usr/local/mysql/bin/ndb_mgm
##还原单个表,需要一次在每个数据节点运行以下命令。
ndb_restore [...] --include-databases=db1,db2 --include-tables=db3.t1,db3.t2
##在后续节点上还原时就不需要指定-m选项来还原metadata,否则还原时会报Restore: Failed to restore table: testdb/def/dept ... Exiting错误
整库还原
#USER MODE 9表示只有一个还原程序通过nodeid为9的api节点连接。
ndb_mgm> ENTER SINGLE USER MODE 9
ndb_mgm> EXIT SINGLE USER MODE
#只有第一个节点还原时要使用-m命令
ndb_restore -c 192.168.1.131 -n 1 -b 1 -m -r --backup_path=/opt/backupfiles/BACKUP-1/1
ndb_restore -c 192.168.1.131 -n 2 -b 1 -r --backup_path=/opt/backupfiles/BACKUP-1/1
ndb_restore -c 192.168.1.131 -n 3 -b 1 -r --backup_path=/opt/backupfiles/BACKUP-1/1
ndb_restore -c 192.168.1.131 -n 4 -b 1 -r --backup_path=/opt/backupfiles/BACKUP-1/1
MySQLClster在线添加节点
增加或减少数据节点的数量和NoOfReplicas有关,一般来说NoOfReplicas是2,那么增加或减少的数量也应该是成对的,否则要设置另外的NoOfReplicas。
1.首先是在配置文件中添加两个节点的设置,如下:
2。用ndb_mgm工具,停掉管理节点,然后重新启动管理节点
3.执行ndb_mgm进入管理命令界面,找到管理节点的id,然后执行管理节点id stop,退出
执行
4./usr/bin/ndb_mgmd-f /usr/local/mysql/mysql-cluster/config.ini --reload 重新启动管理节点
5.登陆上去用show命令查看,是否出现了新添加的两个节点!
6.重新分配cluster的数据
SELECTTABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE =‘NDBCLUSTER’;
ALTERONLINE TABLE table_nameREORGANIZE PARTITION;
alteronline table card_packagereorganize partition;
7.然后通过show命令或者使用ndb_desc命令查看
ndb_desc-c 10.80.30.39 -dbgcarddbcard_package-p
•-c后面跟管理节点的ip,-d跟数据库的名字,table_name为表名,-p输出分区的详细信息
MySQLClster用户权限共享
•在sql节点41上面执行mysql -uroot-p < /usr/local/mysql/share/ndb_dist_priv.sql
•
•在mysql终端调用名字为mysql_cluster_move_privileges的存储过程,这个存储过程的功能是备份权限表,然后将表的存储引擎转换为ndbcluster引擎。
mysql>CALLmysql.mysql_cluster_move_privileges();
•
•自动备份权限表
shell>mysqldumpmysql userdbtables_privcolumns_privprocs_priv>backup_file.sql
•验证权限表
mysql>show create tablemysql.user;看engine是否为ndbcluster。
•在41上面加测试账号
mysql>grant all on . to test@‘10.100.200.%’ identified by ‘test123’;
[root@banggo~]#mysql-h10.100.200.39 -utest-ptest123 -P3307;
OK,能连上,测试成功!