MYSQL集群

介绍:
MySQL集群是一种分布式设计,目标是要达到没有任何单点故障点。因此,任何组成部分都应该拥有自己的内存和磁盘。通过这种冗余设计,MySQL声称数据的可用度可以达到99。999%。
实际上,MySQL集群是把一个叫做NDB的内存集群存储引擎集成与标准的MySQL服务器集成。它包含一组计算机,每个都跑一个或者多个进程,这可能包括一个MySQL服务器,一个数据节点,一个管理服务器和一个专有的一个数据访问程序。它们之间的关系如下图所示:
安装
准备:实验环境:rhel5.3(5台)
机器: 全部安装Red Hat Linux AS 5且关闭防火墙
软件: mysql-cluster-gpl-6.3.20-linux-i686-glibc23.tar.gz
四台机器分别分配如下IP及用途:
IP
Description
192.168.99.80
Management Node
192.168.99.87
SQL Node
192.168.99.88
SQL Node
192.168.99.89
Data Node
192.168.99.90
Data Node
安装节点,四台机器,需要重复四次:(管理节点不用安装mysql-cluster-gpl-6.3.20-linux-i686-glibc23.tar.gz,可以从其他4台机器拷贝出ndbd_mgmd,ndbd_mgm两个程序。)
[root@candyshop ~]#groupadd mysql
[root@candyshop ~]#useradd –g mysql mysql
[root@candyshop ~]#tar zxvf mysql-cluster-gpl-6.3.20-linux-i686-glibc23.tar.gz
[root@candyshop ~]#chown mysql:mysql mysql-cluster-gpl-6.3.20-linux-i686-glibc23
[root@candyshop ~]#mv mysql-cluster-gpl-6.3.20-linux-i686-glibc23 /usr/local/mysql
上述命令先创建mysql组和mysql用户,并且把mysql分配到mysql组,然后将安装文件解压,把它放置到/usr/local/mysql目录。
配置
配置管理节点[192.168.99.80]:
创建以下文件/usr/local/mysql/cluster-conf/config.ini,并且放置如下内容:
# Options affecting ndbd processes on all data nodes:
[ndbd default]
NoOfReplicas=2 # Number of replicas
DataMemory=80M # How much memory to allocate for data storage
IndexMemory=18M # How much memory to allocate for index storage
# For DataMemory and IndexMemory, we have used the
# default values. Since the "world" database takes up
# only about 500KB, this should be more than enough for
# this example Cluster setup.
# Management process options:
[ndb_mgmd]
id=1
hostname=192.168.99.80 # Hostname or IP address of management node
datadir=/var/lib/mysql-cluster # Directory for management node log files
目录不存在手动创建。
# Options for data node "A":
[ndbd]
Id=2
Hostname=192.168.99.89 # Hostname or IP address
Datadir=/usr/local/mysql/ndbdata # Directory for this data node's data files
目录不存在手动创建
# Options for data node "B":
[ndbd]
Id=3
Hostname=192.168.99.90 # Hostname or IP address
Datadir=/usr/local/mysql/ndbdata # Directory for this data node's data files
# SQL node options:
[mysqld]
Id=4
Hostname=192.168.99.87 # Hostname or IP address
# (additional mysqld connections can be
# specified for this node for various
# purposes such as running ndb_restore)
[mysqld]
Id=5
Hostname=192.168.99.88
在这个文件里,我们分别给五个节点分配了ID,这有利于更好的管理和区分各个节点。当然,要是不指定,MySQL也会动态分配一个。上述几个Datadir如果还不存在的需要手动创建。用mkdir –p命令即可。
配置数据节点[192.168.99.89, 192.168.99.90]:
创建/etc/my.cnf文件,内容如下
# Options for mysqld process:
[mysqld]
Datadir=/usr/local/mysql/ndbdata
ndbcluster # run NDB storage engine
ndb-connectstring=192.168.99.80 # location of management server
# Options for ndbd process:
[mysql_cluster]
ndb-connectstring=192.168.99.80 # location of management server
配置SQL节点[192.168.99.87,192.168.99.88]
创建/etc/my.cnf文件,内容如下
# Options for mysqld process:
[mysqld]
ndbcluster # run NDB storage engine
ndb-connectstring=192.168.99.80 # location of management server
# Options for ndbd process:
[mysql_cluster]
ndb-connectstring=192.168.99.80 # location of management server
[root@server88 mysql]# ./scripts/mysql_install_db --user=mysql
在sql节点上初始化数据库。
Installing MySQL system tables...
OK
Filling help tables...
OK
到这里,所有配置已经完成了。
启动
启动管节点[192.168.99.80]:
[root@candyshop mysql]# ./bin/ndb_mgmd -f cluster-conf/config.ini
[root@candyshop mysql]# ./bin/ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: 192.168.99.80:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 192.168.99.89)
id=3 (not connected, accepting connect from 192.168.99.90)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.99.80 (mysql-5.1.30 ndb-6.3.20)
[mysqld(API)] 1 node(s)
id=4 (not connected, accepting connect from 192.168.99.87)
[mysqld(API)] 1 node(s)
id=5 (not connected, accepting connect from 192.168.99.88)
我们可以看到集群的状态都还没有启动,都是not connected状态。
启动数据节点[192.168.99.89, 192.168.99.90]:不用启动mysql。
[root@server89 ~]#cd /usr/local/mysql
[root@server89 mysql]#./bin/ndbd
启动SQL节点[192.168.99.87,192.168.99.88]:
[root@server88 mysql]# ./bin/mysqld_safe –user=mysql &
至此,所有节点已经启动完成,让我们来查看系统状态:
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.99.89 (mysql-5.1.30 ndb-6.3.20, Nodegroup: 0, Master)
id=3 @192.168.99.90 (mysql-5.1.30 ndb-6.3.20, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.99.80 (mysql-5.1.30 ndb-6.3.20)
[mysqld(API)] 1 node(s)
id=4 @192.168.99.87 (mysql-5.1.30 ndb-6.3.20)
id=5 @192.168.99.88 (mysql-5.1.30 ndb-6.3.20)
在SQL节点[192.168.99.87,192.168.99.88]上创建数据库且插入数据
1. mysql> create database world;
2. Query OK, 1 row affected (0.09 sec)
3.
4. mysql> use world;
5. Database changed
6.
7. mysql> CREATE TABLE `City` (
8. -> `ID` int(11) NOT NULL auto_increment,
9. -> `Name` char(35) NOT NULL default '',
10. -> `CountryCode` char(3) NOT NULL default '',
11. -> `District` char(20) NOT NULL default '',
12. -> `Population` int(11) NOT NULL default '0',
13. -> PRIMARY KEY (`ID`)
14. -> ) ENGINE=NDBCLUSTER DEFAULT CHARSET=utf8;
15.Query OK, 0 rows affected (0.93 sec)
16.
17.mysql> INSERT INTO `City` VALUES (1,'Kabul','AFG','Kabol',1780000);
18.Query OK, 1 row affected (0.00 sec)
19.
20.mysql> INSERT INTO `City` VALUES (2,'Qandahar','AFG','Qandahar',237500);
21.Query OK, 1 row affected (0.00 sec)
22.
23.mysql> INSERT INTO `City` VALUES (3,'Herat','AFG','Herat',186800);
24.Query OK, 1 row affected (0.00 sec)
25.
26.
27.
28.
29.mysql> select * from City;
30.+----+----------+-------------+----------+------------+
31.| ID | Name | CountryCode | District | Population |
32.+----+----------+-------------+----------+------------+
33.| 3 | Herat | AFG | Herat | 186800 |
34.| 1 | Kabul | AFG | Kabol | 1780000 |
35.| 2 | Qandahar | AFG | Qandahar | 237500 |
36.+----+----------+-------------+----------+------------+
37.3 rows in set (0.00 sec)
1. [root@candyshop mysql]# ./bin/mysql -u root
2. Welcome to the MySQL monitor. Commands end with ; or \g.
3. Your MySQL connection id is 2
4. Server version: 5.1.30-ndb-6.3.20-cluster-gpl MySQL Cluster Server (GPL)
5.
6. Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
7.
8. mysql> show databases;
9. +--------------------+
10.| Database |
11.+--------------------+
12.| information_schema |
13.| mysql |
14.| test |
15.| world |
16.+--------------------+
17.4 rows in set (0.00 sec)
18.
19.mysql> select * from world.City;
20.+----+----------+-------------+----------+------------+
21.| ID | Name | CountryCode | District | Population |
22.+----+----------+-------------+----------+------------+
23.| 1 | Kabul | AFG | Kabol | 1780000 |
24.| 2 | Qandahar | AFG | Qandahar | 237500 |
25.| 3 | Herat | AFG | Herat | 186800 |
26.+----+----------+-------------+----------+------------+
27.3 rows in set (0.07 sec)
发现之前在另外一个SQL节点[192.168.99.87]创建的数据库也出现在节点5[192.168.99.88]上面了。
这样整个安装和测试都完结了。
在sql节点创建的数据会保存在数据节点上,所以一个mysql宕机了不影响数据的存储。

原文地址:http://bbs.coderli.com/thread-246-1-1.html

你可能感兴趣的:(服务器,mysql集群,服务器集群)