Установка и настройка MySQL кластера

У меня имелось 4 сервера для создания кластера ( node0 (ip: 192.168.174.193) и node1 (ip: 192.168.174.129) – так называемые Data Nodes, на которых и хранятся файлы баз данных, а также node2 (I) и node3 (ip: 192.168.174.196) – управляющие ноды).

Задача: обеспечить полную работоспособность при выходе одного из серверов из строя.

Схема работы кластера MySQL

Рис.1 Схема работы кластера MySQL

На рис.1 представлена схема работы MySQL кластера. MySQL Cluster состоит из набора компьютеров, каждый выполняет ряд процессов, включая сервер MySQL, узлы хранения для NDB, сервер управления и (возможно) специализированные программы доступа к данным. Все эти программы работают вместе, чтобы формировать MySQL Cluster. Когда данные сохранены в NDB Cluster, таблицы сохранены в узлах памяти для NDB Cluster. Такие таблицы непосредственно доступны со всех других серверов MySQL в кластере. Таким образом, в прикладной программе, сохраняющей данные в кластере, если одна прикладная программа что-то модифицирует, все другие серверы, которые сделают запрос, эти данные могут увидеть измененными немедленно.

Нужно отметить, что для корректной работы необходимо наличие как минимум 3-х серверов (одного управляющего и двух серверов с данными). На самом деле, управляющий сервер нужен только при запуске кластера, потом его можно отключить, хотя это крайне не рекомендуется, потому что, если произойдёт сбой, то для того, чтобы включить этот нод снова в кластер, опять будет необходим управляющий нод.

Скачиваем MySQL 5.0 для FreeBSD отсюда: http://dev.mysql.com/downloads/mysql/5.0.html#freebsd

На нодах с данными (node0 и node1) распаковываем скачанный архив и начинаем установку:

[nikita@node0 ~]$ su

node0# cp mysql-5.0.45-freebsd6.0-i386.tar.gz /usr/local/
node0# cd /usr/local/
node0# tar -zxvf mysql-5.0.45-freebsd6.0-i386.tar.gz
node0# rm -r mysql-5.0.45-freebsd6.0-i386.tar.gz
node0# ln -s mysql-5.0.45-freebsd6.0-i386/ mysql

добавляем пользователя mysql:

node0# adduser
 
Username: mysql
Full name:
Uid (Leave empty for default):
Login group [mysql]:
Login group is mysql. Invite mysql into other groups? []:
Login class [default]:
Shell (sh csh tcsh bash nologin) [sh]: nologin
Home directory [/home/mysql]:
Use password-based authentication? [yes]: no
Lock out the account after creation? [no]:
Username : mysql
Password :
Full Name :
Uid : 1003

Class :
Groups : mysql
Home : /home/mysql
Shell : /usr/sbin/nologin
Locked : no
OK? (yes/no): yes

adduser: INFO: Successfully added (mysql) to the user database.
Add another user? (yes/no): no
Goodbye!

и заканчиваем установку:

node0# cd mysql/

node0# scripts/mysql_install_db –user=mysql

При удачной установке должен появиться следующий текст:

Installing MySQL system tables...
OK
Filling help tables...
OK
 
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

 
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
 
To do so, start the server, then issue the following commands:
 
./bin/mysqladmin -u root password 'new-password'

./bin/mysqladmin -u root -h node0.beltadmn password 'new-password'
 
See the manual for more instructions.

 
You can start the MySQL daemon with:
 
cd . ; ./bin/mysqld_safe &
 
You can test the MySQL daemon with mysql-test-run.pl
 

cd mysql-test ; perl mysql-test-run.pl
 
Please report any problems with the ./bin/mysqlbug script!
 
The latest information about MySQL is available on the web
 at http://www.mysql.com

 
Support MySQL by buying support/licenses at http://shop.mysql.com

Устанавливаем необходимые права на каталоги и файлы, запускаем сервер и добавляем скрипты запуска в /etc/rc.local для автоматического старта:

node0# chown -R root .
node0# chown -R mysql data

node0# chgrp -R mysql .
node0# cp support-files/mysql.server /usr/local/etc/rc.d/mysql.server
node0# /usr/local/etc/rc.d/mysql.server start
node0# echo "/usr/local/mysql/bin/ndbd --initial" >> /etc/rc.local
node0# echo "/usr/local/etc/rc.d/mysql.server start" >> /etc/rc.local

На управляющих нодах устанавливаем только сервер управления (ndb_mgmd) и консоль (ndb_mgm):

node2# tar -xzvf mysql-5.0.45-freebsd6.0-i386.tar.gz

node2# cp mysql-5.0.45-freebsd6.0-i386/bin/ndb_mgm /usr/local/bin/
node2# cp mysql-5.0.45-freebsd6.0-i386/bin/ndb_mgmd /usr/local/bin/
node2# rm -r mysql-5.0.45-freebsd6.0-i386/
node2# mkdir /var/lib
node2# mkdir /var/lib/mysql-cluster
node2# cd /var/lib/mysql-cluster

Создадим файл настройки config.ini для ndb_mgmd:

node2# vi config.ini
node2# cat config.ini

На node2 он у меня получился таким:

[nikita@node2 ~]$ cat /var/lib/mysql-cluster/config.ini
[NDBD DEFAULT]

NoOfReplicas=2
#MaxNoOfConcurrentOperations= 2000000
#DataMemory= 280M
#IndexMemory= 110M
TimeBetweenWatchDogCheck= 30000
MaxNoOfOrderedIndexes= 512

 
[MYSQLD DEFAULT]
 
[NDB_MGMD DEFAULT]
 
[TCP DEFAULT]
 
# Management Server
[NDB_MGMD]
HostName=192.168.174.247 # IP address of this server

DataDir= /var/lib/mysql-cluster
 
[NDB_MGMD]
HostName=192.168.174.196
DataDir= /var/lib/mysql-cluster

 
# Storage Nodes
[NDBD]
HostName=192.168.174.129 # IP address of storage-node-1
DataDir= /var/lib/mysql-cluster

 
[NDBD]
HostName=192.168.174.193 # IP address of storage-node-2
DataDir=/var/lib/mysql-cluster
 
# Setup node IDs for mySQL API-servers (clients of the cluster)

[MYSQLD]
[MYSQLD]
[MYSQLD]
[MYSQLD]

На node3:

[nikita@node3 ~]$ cat /var/lib/mysql-cluster/config.ini

[NDBD DEFAULT]
NoOfReplicas=2
#MaxNoOfConcurrentOperations= 2000000
#DataMemory= 280M
#IndexMemory= 110M
TimeBetweenWatchDogCheck= 30000
MaxNoOfOrderedIndexes= 512

 
[MYSQLD DEFAULT]
 
[NDB_MGMD DEFAULT]
 
[TCP DEFAULT]
 
# Management Server
[NDB_MGMD]
HostName=192.168.174.196 # IP address of this server

DataDir= /var/lib/mysql-cluster
 
[NDB_MGMD]
HostName=192.168.174.247
DataDir= /var/lib/mysql-cluster

 
# Storage Nodes
[NDBD]
HostName=192.168.174.129 # IP address of storage-node-1
DataDir= /var/lib/mysql-cluster

 
[NDBD]
HostName=192.168.174.193 # IP address of storage-node-2
DataDir=/var/lib/mysql-cluster
 
# Setup node IDs for mySQL API-servers (clients of the cluster)

[MYSQLD]
[MYSQLD]
[MYSQLD]
[MYSQLD]

Теперь можно стартовать ndb_mgmd на node0 и node1. По умолчанию он пытается прочитать файл config.ini в текущей директории.

node2# ndb_mgmd

Чтобы запускать ndb_mgmd из любого места используется:

node2# ndb_mgmd -f /var/lib/mysql-cluster/config.ini

Можно добавить эту команду в /etc/rc.local, чтобы управляющая программа стартовала автоматически:

[nikita@node2 ~]$ cat /etc/rc.local
/usr/local/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini

Теперь попробуем проверить состояние кластера (хоть пока он ещё не создан, но управление им уже начало свою работу):

node2# ndb_mgm
ndb_mgm> show

После запуска команды show должно выдаться примерно следующее:

ndb_mgm> show

 
Connected to Management Server at: localhost:1186
 
Cluster Configuration
 
---------------------
 
[ndbd(NDB)] 2 node(s)

 
id=3 (not connected, accepting connect from 192.168.174.129)
 
id=4 (not connected, accepting connect from 192.168.174.193)
 
[ndb_mgmd(MGM)] 1 node(s)

 
id=1 @192.168.174.247 (Version: 5.0.45)
 
id=2 @192.168.174.196 (Version: 5.0.45)

 
[mysqld(API)] 4 node(s)
 
id=5 (not connected, accepting connect from any host)
 

id=6 (not connected, accepting connect from any host)
 
id=7 (not connected, accepting connect from any host)
 
id=8 (not connected, accepting connect from any host)

Теперь настраиваем и запускаем mysql сервера на node1 и node0:

[root@node0 ~]# cat /etc/my.cnf
 
[mysqld]

ndbcluster
ndb-connectstring='host=192.168.174.247:1186' # IP address of the management server
ndb-connectstring='host=192.168.174.196:1186' # IP address of the management server
 
[mysql_cluster]
ndb-connectstring='host=192.168.174.247:1186' # IP address of the management server

ndb-connectstring='host=192.168.174.196:1186' # IP address of the management server
 
[DB DEFAULT]
DataMemory: 500M
IndexMemory: 100M
 
[root@node1 /usr/local/mysql]# mkdir /var/lib

[root@node1 /usr/local/mysql]# mkdir /var/lib/mysql-cluster
[root@node1 /usr/local/mysql]# /usr/local/mysql/bin/ndbd --initial

[root@node1 /usr/local/mysql]# /usr/local/etc/rc.d/mysql.server start

Запускаем проверяем состояние кластера через консоль управления (на node2):

node2# ndb_mgm
ndb_mgm> show
 
Cluster Configuration
 
---------------------
 
[ndbd(NDB)] 2 node(s)

 
id=3 @192.168.174.129 (Version: 5.0.45, Nodegroup: 0, Master)
 
id=4 @192.168.174.193 (Version: 5.0.45, Nodegroup: 0)

 
[ndb_mgmd(MGM)] 2 node(s)
 
id=1 @192.168.174.247 (Version: 5.0.45)

 
id=2 @192.168.174.196 (Version: 5.0.45)
 
[mysqld(API)] 4 node(s)

 
id=5 @192.168.174.193 (Version: 5.0.45)
 
id=6 @192.168.174.129 (Version: 5.0.45)

 
id=7 (not connected, accepting connect from any host)
 
id=8 (not connected, accepting connect from any host)

На node0 и node1 добавляем в /etc/rc.local:

/usr/local/mysql/bin/ndbd --initial
/usr/local/etc/rc.d/mysql.server start

[nikita@node0 ~]$ su

node0# cp mysql-5.0.45-freebsd6.0-i386.tar.gz /usr/local/

node0# cd /usr/local/

node0# tar -zxvf mysql-5.0.45-freebsd6.0-i386.tar.gz

node0# rm -r mysql-5.0.45-freebsd6.0-i386.tar.gz

node0# ln -s mysql-5.0.45-freebsd6.0-i386/ mysql

Установка и настройка MySQL кластера
Tagged on:             

Добавить комментарий