Chinaunix首页 | 论坛 | 博客
  • 博客访问: 292919
  • 博文数量: 84
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: -10
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-05 09:11
文章分类
文章存档

2015年(1)

2014年(6)

2013年(8)

2012年(1)

2011年(6)

2010年(2)

2009年(16)

2008年(44)

我的朋友

分类: Mysql/postgreSQL

2013-12-22 07:42:48

 mysql集群安装配置 2010-01-07 11:28:25

分类: LINUX


看网上很多人说mysql集群不是很稳定,因此这2天做了下mysql的集群,打算配置没有什么问题了,过2天做下相关的性能测试,我的配置环境如下:
 
操作系统:
     Centos5.2
  
软件包:
     mysql-cluster-gpl-7.0.8a-linux-i686-glibc23.tar.gz
 
数据库管理节点: 192.168.100.151
数据库数据节点: 192.168.100.65,192.168.100.58
数据库sql节点: 192.168.100.65,192.168.100.58
 
我这里数据节点和sql节点用相同的2台机器承担.
 
1.管理节点的安装
  #groupadd mysql
  #useradd mysql -g mysql
  #mv mysql-cluster-gpl-7.0.8a-linux-i686-glibc23.tar.gz /usr/local/
  #cd /usr/local/
  #tar zxvf mysql-cluster-gpl-7.0.8a-linux-i686-glibc23.tar.gz
  #rm -f mysql-cluster-gpl-7.0.8a-linux-i686-glibc23.tar.gz
  #mv mysql-cluster-gpl-7.0.8a-linux-i686-glibc23 mysql
  #chown -R mysql:mysql mysql
  #cd mysql
  #scripts/mysql_install_db --user=mysql
 
2.管理节点的配置
  #mkdir /var/lib/mysql-cluster
  #cd /var/lib/mysql-cluster
  #vi config.ini                //这里需要手动添加如下内容
 
  [ndbd default]
  NoOfReplicas=2
  DataMemory=80M
  IndexMemory=18M                  
//这里有很多参数,大家可以自己找下相关资料
  [ndb_mgmd]
  Id=1
  Hostname=10.10.1.151             //管理节点IP
  datadir=/usr/local/mysql/logs
  [ndbd]
  Id=2
  Hostname=10.10.1.65              //数据节点IP   
  datadir=/usr/local/mysql/data/   
//数据节点的数据目录,这里要与数据节点的配置文件my.cnf
                                     的数据指定相同
  [ndbd]
  Id=3
  Hostname=10.10.1.58            //数据节点IP   
  datadir=/usr/local/mysql/data/
  [MYSQLD]
  [MYSQLD]
 
3.安装和配置数据节点
 
  这里2台机器数据节点安装是相同的.
  #groupadd mysql
  #useradd mysql -g mysql
  #mv mysql-cluster-gpl-7.0.8a-linux-i686-glibc23.tar.gz /usr/local/
  #cd /usr/local/
  #tar zxvf mysql-cluster-gpl-7.0.8a-linux-i686-glibc23.tar.gz
  #rm -f mysql-cluster-gpl-7.0.8a-linux-i686-glibc23.tar.gz
  #mv mysql-cluster-gpl-7.0.8a-linux-i686-glibc23 mysql
  #chown -R mysql:mysql mysql
  #cd mysql
  #scripts/mysql_install_db --user=mysql
  #cp support-files/my-medium.cnf /etc/my.cnf
  #cp support-files/mysql.server /etc/init.d/mysqld
  #vi /etc/my.cnf         //这里需要手动添加如下的内容
 
  datadir=/usr/local/mysql/data/       //这里要与管理节点的config.ini相同
  ndbcluster
  ndb-connectstring=10.10.1.151
  [ndbd]
  connect-string=10.10.1.151
  [mysql_cluster]
  ndb-connectstring=10.10.1.151
  [ndb_mgm]
  connect-string=192.168.1.151
  [ndb_mgmd]
  config-file=/var/lib/mysql-cluster/config.ini  //这里要指定管理节点配置文件路径
 
4.启动相关服务
 
  在管理节点启动相关服务:
  #/usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
  #netstat -lntpu
  tcp        0      0 0.0.0.0:1186            0.0.0.0:*                
  LISTEN   22907/ndb_mgmd
  
  看到1186端口开放了说明启动是正常的.
 
  在数据节点启动相关服务:
  #/usr/local/mysql/bin/ndbd --initial
  #netstat -lntpu
  tcp        0      0 10.10.1.65:32975            0.0.0.0:*                    LISTEN      1901/ndbd                  
tcp        0      0 10.10.1.65:32976            0.0.0.0:*                   LISTEN      1901/ndbd           
tcp        0      0 10.10.1.65:32977            0.0.0.0:*                   LISTEN      1901/ndbd  
 
#service mysqld start
#netstat -lntpu
tcp        0      0 :::3306                     :::*                        LISTEN      2258/mysqld 
 
可以看到相关的ndbd服务以及mysql已经启动ok了.
 
5.功能测试
 
  到管理节点查看下相关服务状态
 # ndb_mgm
 ndb_mgm> show
 Connected to Management Server at: localhost:1186
 Cluster Configuration
 ---------------------
 [ndbd(NDB)]     2 node(s)
 id=2    @10.10.1.65  (mysql-5.1.37 ndb-7.0.8, Nodegroup: 0, Master)
 id=3    @10.10.1.58  (mysql-5.1.37 ndb-7.0.8, Nodegroup: 0)
 [ndb_mgmd(MGM)] 1 node(s)
 id=1    @10.10.1.151  (mysql-5.1.37 ndb-7.0.8)
 [mysqld(API)]   2 node(s)
 id=4    @10.10.1.65  (mysql-5.1.37 ndb-7.0.8)
 id=5    @10.10.1.58  (mysql-5.1.37 ndb-7.0.8)
 
 可以看到这里的数据节点、管理节点、sql节点都是正常的.
 
 现在我们在其中一个数据节点上进行相关数据库的创建,然后到另外一个数据节点上看看数据是否同步
 
 # /usr/local/mysql/bin/mysql -u root -p
 mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
| ndb_2_fs           | 
| test               | 
+--------------------+
mysql> create database aa;
mysql> use aa
mysql> CREATE TABLE ctest2 (i INT) ENGINE=NDB; //这里必须指定数据库表的引擎为NDB,否则同
                                                 步失败
mysql> INSERT INTO ctest2 () VALUES (1);
mysql> SELECT * FROM ctest2;
+------+
| i    |
+------+
|    1 | 
+------+
 
现在到另外一个数据节点查看下aa数据库是否同步过来了.
 
#/usr/local/mysql/bin/mysql -u root -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| aa                 | 
| bb                 | 
| mysql              | 
| ndb_3_fs           | 
| test               | 
+--------------------+
mysql> use aa
mysql> select * from ctest2;
+------+
| i    |
+------+
|    1 | 
+------+
 
从上面可以看到数据已经同步了,mysql集群环境已经搭建完成.
 
6.破坏性测试
  
  大家在上面可以看到10.10.1.65作为主的数据节点,我现在把10.10.1.65这台机器关闭,看下有什么结果
  ndb_mgm> show
  Cluster Configuration
  ---------------------
  [ndbd(NDB)]     2 node(s)
  id=2 (not connected, accepting connect from 10.10.1.65)
  id=3    @10.10.1.58  (mysql-5.1.37 ndb-7.0.8, Nodegroup: 0, Master)
  [ndb_mgmd(MGM)] 1 node(s)
  id=1    @10.10.1.151  (mysql-5.1.37 ndb-7.0.8)
  [mysqld(API)]   2 node(s)
  id=4 (not connected, accepting connect from any host)
  id=5    @10.10.1.58  (mysql-5.1.37 ndb-7.0.8)
 
  从上面可以发现现在10.10.1.65这台机器的数据节点和sql节点已经连接不上了,10.10.1.58成为了主数
  据节点,我们现在在10.10.1.58数据节点上创建一个表,然后恢复10.10.1.65的数据节点,看下它是否
  把数据同步过来了.
 
  先在10.10.1.58数据节点做如下操作:
  mysql> create table ctest3(id int(11)) engine=NDB;
  mysql> show tables;
+--------------+
| Tables_in_aa |
+--------------+
| ctest2       | 
| ctest3       | 
+--------------+
mysql> insert into ctest3 values(1);
mysql> select * from ctest3;
+------+
| id   |
+------+
|    1 | 
+------+
 
然后我们恢复10.10.1.65数据节点,查看下ctest3数据是否同步过来了.
 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| aa                 | 
| bb                 | 
| mysql              | 
| ndb_2_fs           | 
| test               | 
+--------------------+
mysql> use aa
mysql> show tables; 
+--------------+
| Tables_in_aa |
+--------------+
| ctest        | 
| ctest2       | 
| ctest3       | 
+--------------+
mysql> select * from ctest3;
+------+
| id   |
+------+
|    1 | 
+------+
 
可以看到10.10.1.65数据节点已经把10.10.1.58数据节点的数据同步过来了,说明mysql集群是没有问题的了.随后做下mysql性能相关的测试.


=====================================================
来源: ChinaUnix博客  日期: 2008.08.06 23:38 (共有条评论) 
 
一.下面假设这3台服务的情况: 
Server1: 172.18.3.205 
Server2: 172.18.3.207 
Server3: 172.18.3.208 
Servers1和Server2作为实际配置MySQL集群的服务器。对于作为管理节点的Server3则要求较低,只需对Server3的系统进行很小的调整并且无需安装MySQL,Server3可以使用一台配置较低的计算机并且可以在Server3同时运行其他服务。
====================================



二、在Server1和Server2上安装MySQL 


上下载mysql-max-4.1.22-pc-linux-gnu-i686.tar.gz
注意:必须是max版本的MySQL,Standard版本不支持集群部署! 

以下步骤需要在Server1和Server2上各做一次 
# cd /usr/local/ 
# groupadd mysql 
# useradd -g mysql mysql 
# tar -zxvf mysql-max-4.1.22-pc-linux-gnu-i686.tar.gz 
# mv mysql-max-4.1.22-pc-linux-gnu-i686
# cd mysql 
# scripts/mysql_install_db --user=mysql 
# chown -R root . 
# chown -R mysql data 
# chgrp -R mysql . 

此时不要启动MySQL!
========================================================


三、安装并配置管理节点服务器(Server3) 
# tar -zxvf mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz 
# rm mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz 
# cd mysql-max-4.1.9-pc-linux-gnu-i686 
# mv bin/ndb_mgm /usr/bin/  
# mv bin/ndb_mgmd /usr/bin/ 
#cd /usr/bin
# chmod +x ndb_mg* 


现在开始为这台管理节点服务器建立配置文件: 
# mkdir /var/lib/mysql-cluster 
# cd /var/lib/mysql-cluster 
# vi config.ini 
[NDBD DEFAULT]
NoOfReplicas=2
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# Managment Server
[NDB_MGMD]
HostName=172.18.3.208
# Storage Engines 
[NDBD]
HostName=172.18.3.205
DataDir=/var/lib/mysql-cluster
[NDBD]
HostName=172.18.3.207
DataDir=/var/lib/mysql-cluster
[MYSQLD] 
[MYSQLD]
保存退出后,启动管理节点服务器Server3: 
/usr/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini

注释: Cluster管理节点的默认端口是1186,数据节点的默认端口2202。从MySQL 5.0.3开始,该限制已被放宽, Cluster能够根据空闲的端口自动地为数据节点分配端口。如果你的版本低于5.0.22,请注意这个细节。

启动管理节点后应该注意,这只是管理节点服务,并不是管理终端。因而你看不到任何关于启动后的输出信息。 
=============================================================

四、配置集群服务器并启动MySQL 
在Server1和Server2中都需要进行如下改动:

[root@localhost local]# cat /etc/my.cnf 
[mysqld] 
ndbcluster 
ndb-connectstring=172.18.3.208  
[mysql_cluster] 
ndb-connectstring=172.18.3.208 

保存退出后,建立数据目录并启动MySQL
# mkdir /var/lib/mysql-cluster 
# cd /var/lib/mysql-cluster 
# /usr/local/mysql/bin/ndbd --initial 


注意,仅应在首次启动ndbd时,或在备份/恢复数据或配置文件发生变化后重启ndbd时使用“--initial”参数。因为该参数会使节点删除由早期ndbd实例创建的、用于恢复的任何文件,包括用于恢复的日志文件。
如果不是第一次启动,直接运行如下命令即可


=============================================

在 server1 server2 启动mysql
/usr/local/mysql/bin/mysqld_safe --skip-grant-tables &



==================================
注: /usr/local/mysql/bin/mysqld_safe &  这样起有问题
[root@localhost ~]# tail -f /usr/local/mysql/data/localhost.localdomain.err
070723 21:49:58  mysqld started
070723 21:50:00  InnoDB: Started; log sequence number 0 43634
070723 21:50:00 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
070723 21:50:00  mysqld ended
============================================

测试:在server1上执行
# /usr/local/mysql/bin/mysql -u root -p 
> use test; 
> CREATE TABLE ctest (i INT) ENGINE=NDBCLUSTER; 
> INSERT INTO ctest () VALUES (1); 
> SELECT * FROM ctest; 
在server2查询有该记录.证明配置成功




在管理节点上查看
[root@localhost bin]# /usr/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=2    @172.18.3.205  (Version: 4.1.22, Nodegroup: 0, Master)
id=3    @172.18.3.207  (Version: 4.1.22, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1    @172.18.3.208  (Version: 4.1.22)
[mysqld(API)]   2 node(s)
id=4    @172.18.3.207  (Version: 4.1.22)
id=5    @172.18.3.205  (Version: 4.1.22)
====================================================
五、启动MySQL Cluster
较为合理的启动顺序是,首先启动管理节点服务器,然后启动存储节点服务器,最后才启动SQL节点服务器:
上述配置把存储节点和sql节点放到同台服务器上了。
==================================================

六.

以下配置把存储节点和sql节点分开来配置
172.18.3.208 ----->管理节点
172.18.3.205 ----->存储节点
172.18.3.207 ----->存储节点
172.18.3.209 ----->sql节点
172.18.3.210 ----->sql节点




管理节点 172.18.3.208 
[root@localhost mysql-cluster]# cat /var/lib/mysql-cluster/config.ini 
[NDBD DEFAULT]
NoOfReplicas=2
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# Managment Server
[NDB_MGMD]
HostName=172.18.3.208
# Storage Engines 
[NDBD]
HostName=172.18.3.205
DataDir=/var/lib/mysql-cluster
[NDBD]
HostName=172.18.3.207
DataDir=/var/lib/mysql-cluster
[MYSQLD] 
hostname=172.18.3.209
[MYSQLD] 
hostname=172.18.3.210

启动管理节点 /usr/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini

数据节点 172.18.3.205
[root@localhost ~]# cat /etc/my.cnf
[mysqld] 
ndbcluster 
ndb-connectstring=172.18.3.208  
[mysql_cluster] 
ndb-connectstring=172.18.3.208


数据节点 172.18.3.208
[root@localhost test]# cat /etc/my.cnf
[mysqld]
ndbcluster
ndb-connectstring=172.18.3.208
[mysql_cluster]
ndb-connectstring=172.18.3.208
启动数据节点 /usr/local/mysql/bin/ndbd --initial

sql节点 172.18.3.209
[root@localhost data]# cat /etc/my.cnf
[mysqld]
basedir         = /usr/local/mysql/
datadir         = /usr/local/mysql/data
user            = root
port            = 3306
socket          = /tmp/mysql.sock
ndbcluster
ndb-connectstring=172.18.3.208
[MYSQL_CLUSTER]
ndb-connectstring=172.18.3.208

sql节点 172.18.3.210
[root@localhost data]# cat /etc/my.cnf
[mysqld]
basedir         = /usr/local/mysql/
datadir         = /usr/local/mysql/data
user            = root
port            = 3306
socket          = /tmp/mysql.sock
ndbcluster
ndb-connectstring=172.18.3.208
[MYSQL_CLUSTER]
ndb-connectstring=172.18.3.208


启动sql节点  /usr/local/mysql/bin/mysqld_safe --skip-grant-tables &




在管理节点 172.18.3.208  查看信息
[root@localhost mysql-cluster]# /usr/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=2    @172.18.3.205  (Version: 4.1.22, Nodegroup: 0, Master)
id=3    @172.18.3.207  (Version: 4.1.22, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1    @172.18.3.208  (Version: 4.1.22)
[mysqld(API)]   2 node(s)
id=4    @172.18.3.209  (Version: 4.1.22)
id=5    @172.18.3.210  (Version: 4.1.22)


启动先后顺序:管理节点 数据节点 sql节点


在sql节点172.18.3.209插入如下的数据

[root# mysql -uroot test
mysql> create table city(
mysql> id mediumint unsigned not null auto_increment primary key,
mysql> name varchar(20) not null default ''
mysql> ) engine = ndbcluster default charset utf8;
mysql> insert into city values(1, 'city1');
mysql> insert into city values(2, 'city2');
在172.18.3.210上查询
root# mysql -uroot test
mysql> select * from city;
+-----------+
|id | name  |
+-----------+
|1  | city1 |
+-----------+
|2  | city2 |
+-----------+
七、安全关闭
要想关闭 Cluster,可在MGM节点所在的机器上,在Shell中简单地输入下述命令:root# /usr/local/mysql/ndb_mgm -e shutdown
运行以下命令关闭SQL节点的mysqld服务:
root# /usr/local/mysql/bin/mysqladmin -uroot shutdown

详细参照


阅读(1107) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~