本文詳解Ubuntu上配置MySQL集群的方法。
介紹網絡環境:
測試環境:
Server1: ndbd 192.168.245.11
Server2: ndbd 192.168.245.12
Server3: MySQLd –ndb-cluster 192.168.245.13
ndbd: 數據庫節點。
MySQLd –ndb-cluster: MySQL服務器節點,程序直接訪問的是這台機器的IP。默認端口仍是3306。
ndbd_mgm ndbd_mgmd:管理節點。管理/查看各庫節點和服務器節點的狀態。
二、集群方案
1.管理節點:server3(192.168.245.13)
2.存儲節點:server1(192.168.245.11),server2(192.168.245.12)
3.SQL節點:server1(192.168.245.11),server2(192.168.245.12),server3(192.168.245.13)
三、MySQL安裝和配置
1.安裝,sudo apt-get install MySQL-server
2.配置這三台服務器上配置my.cnf,這三台服務器都要配置
- vim /etc/MySQL/my.cnf
- —————————————–my.cnf開始——————————————–
- Ubuntu@ubuntu:~___FCKpd___0nbsp;cat /etc/MySQL/my.cnf
- #
- # The MySQL database server configuration file.
- #
- # You can copy this to one of:
- # - “/etc/MySQL/my.cnf” to set global options,
- # - “~/.my.cnf” to set user-specific options.
- #
- # One can use all long options that the program supports.
- # Run program with –help to get a list of available options and with
- # –print-defaults to see which it would actually understand and use.
- #
- # For explanations see # http://dev.mysql.com/doc/MySQL/en/serve ... ables.Html
- # This will be passed to all MySQL clIEnts
- # It has been reported that passWords should be enclosed with ticks/quotes
- # escpecially if they contain “#” chars…
- # Remember to edit /etc/MySQL/debian.cnf when changing the socket location. [clIEnt] port = 3306 socket = /var/run/mysqld/MySQLd.sock
- # Here is entrIEs for some specific programs
- # The following values assume you have at least 32M ram
- # This was formally known as [safe_mysqld]. Both versions are currently parsed. [MySQLd_safe] socket = /var/run/mysqld/MySQLd.sock nice = 0 [MySQLd]
- #
- # * Basic Settings
- #
- #
- # * IMPORTANT
- # If you make changes to these settings and your system uses apparmor, you may
- # also need to also adjust /etc/apparmor.d/usr.sbin.MySQLd.
- # user = MySQL pid-file = /var/run/mysqld/MySQLd.pid socket = /var/run/mysqld/MySQLd.sock port = 3306 basedir = /usr datadir = /var/lib/MySQL tmpdir = /tmp language = /usr/share/MySQL/english skip-external-locking
- #
- # Instead of skip-networking the default is now to listen only on
- # localhost which is more compatible and is not less secure.
- # bind-address = 127.0.0.1
- #
- # * Fine Tuning
- # key_buffer = 16M max_allowed_packet = 16M thread_stack = 128K thread_cache_size = 8
- #max_connections = 100 #table_cache = 64 #thread_concurrency = 10
- #
- # * Query Cache Configuration
- # query_cache_limit = 1M query_cache_size = 16M
- #
- # * Logging and Replication
- #
- # Both location gets rotated by the cronjob.
- # Be aware that this log type is a performance killer.
- #log = /var/log/mysql/MySQL.log
- #
- # Error logging goes to syslog. This is a Debian improvement
- #
- # Here you can see querIEs with especially long duration #log_slow_querIEs = /var/log/mysql/MySQL-slow.log
- #long_query_time = 2
- #log-querIEs-not-using-indexes
- #
- # The following can be used as easy to replay backup logs or for replication.
- # note: if you are setting up a replication slave, see README.Debian about
- # other settings you may need to change.
- #server-id = 1
- #log_bin = /var/log/mysql/MySQL-bin.log expire_logs_days = 10 max_binlog_size = 100M
- #binlog_do_db = include_database_name
- #binlog_ignore_db = include_database_name
- #
- # * BerkeleyDB
- #
- # Using BerkeleyDB is now discouraged as its support will cease in 5.1.12. skip-bdb
- #
- # * MyISAM
- #
- # MyISAM is enabled by default with a 10MB datafile in /var/lib/MySQL/.
- # Read the manual for more MyISAM related options. There are many!
- # You might want to disable MyISAM to shrink the MySQLd process by circa 100MB.
- #skip-innodb
- #
- # * Security Features
- #
- # Read the manual, too, if you want chroot!
- # chroot = /var/lib/MySQL/
- #
- # For generating SSL certificates I recommend the OpenSSL GUI “tinyca”.
- #
- # ssl-ca=/etc/MySQL/cacert.pem
- # ssl-cert=/etc/MySQL/server-cert.pem
- # ssl-key=/etc/MySQL/server-key.pem ndbcluster ndb-connectstring=192.168.245.13 [MySQLdump] quick quote-names max_allowed_packet = 16M [MySQL]
- #no-auto-rehash
- # faster start of MySQL but no tab completition [isamchk] key_buffer = 16M
- #
- # * NDB Cluster
- #
- # See /usr/share/doc/MySQL-server-*/README.Debian for more information.
- #
- # The following configuration is read by the NDB Data Nodes (ndbd processes)
- # not from the NDB Management Nodes (ndb_mgmd processes).
- # [MySQL_CLUSTER] ndb-connectstring=192.168.245.13
- #
- # * IMPORTANT: Additional settings that can override those from this file!
- # The files must end with ‘.cnf’, otherwise they’ll be ignored.
- # !includedir /etc/MySQL/conf.d/
- Ubuntu@ubuntu:~___FCKpd___0nbsp;
- ———————————my.cnf結束———————————————————
主要在:[MySQLd]下添加:
ndbcluster
ndb-connectstring=192.168.245.13
和添加
[MySQL_CLUSTER]
ndb-connectstring=192.168.245.13
上面三台服務器都要一樣
2.配置ndb_mgmd.cnf(192.168.245.13服務器上配置)
復制/usr/share/doc/mysql-server-5.0/examples/ndb_mgmd.cnf到/etc/MySQL/ndb_mgmd.cnf
編輯ndb_mgmd.cnf
- ——————-開始————
- Ubuntu@ubuntu:~___FCKpd___1nbsp;
- cat /etc/MySQL/ndb_mgmd.cnf [NDBD DEFAULT]
- NoOfReplicas=2
- DataMemory=10MB
- IndexMemory=25MB
- MaxNoOfTables=256
- MaxNoOfOrderedIndexes=256
- MaxNoOfUniqueHashIndexes=128
- [MySQLD DEFAULT]
- [NDB_MGMD DEFAULT]
- [TCP DEFAULT] [NDB_MGMD]
- Id=1 # the NDB Management Node (this one)
- HostName=192.168.245.13
- DataDir= /var/lib/MySQL-cluster
- [NDBD] Id=2 # the first NDB Data Node
- HostName=192.168.245.11
- DataDir= /var/lib/MySQL-cluster
- [NDBD] Id=3 # the second NDB Data Node
- HostName=192.168.245.12
- DataDir=/var/lib/MySQL-cluster
- [MySQLD] Id=4 # the first SQL node
- HostName=192.168.245.13
- [MySQLD] Id=5 # the first SQL node
- HostName=192.168.245.11
- [MySQLD] Id=6 # the first SQL node
- HostName=192.168.245.12
- Ubuntu@ubuntu:~___FCKpd___1nbsp;
- ——————-結束————
先啟動13服務器:
sudo /etc/init.d/MySQL-ndb-mgm start
然後啟動11.12服務器:
sudo /etc/init.d/MySQL-ndb start
最後啟動,13.11.12服務器MySQL服務:
sudo /etc/init.d/MySQL start
測試:
13服務器上:
neo@mgm:~$ 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 @192.168.245.11 (Version: 5.0.51, Nodegroup: 0)
id=3 @192.168.245.12 (Version: 5.0.51, Nodegroup: 0, Master)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.245.13 (Version: 5.0.51) [MySQLd(API)] 2 node(s)
id=4 @192.168.245.13 (Version: 5.0.51)
id=5 @192.168.245.11 (Version: 5.0.51)
id=5 @192.168.245.12 (Version: 5.0.51)
ndb_mgm>
與沒有使用簇的MySQL相比,在MySQL簇內操作數據的方式沒有太大的區別。neo@sql:~$ MySQL -uroot -p
Enter passWord:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 7
Server version: 5.0.51a-3Ubuntu5.1 (Ubuntu)
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.
MySQL> create database cluster;
Query OK,
1 row affected (0.00 sec)
MySQL> use cluster
Database changed
MySQL> create table city( id mediumint unsigned not null auto_increment primary key, name varchar(20) not null default ” ) engine = ndbcluster default charset utf8;
Query OK,
0 rows affected (1.07 sec)
MySQL> insert into city values(1, ‘Shenzhen’);
Query OK,
1 row affected (0.12 sec)
MySQL> insert into city values(2, ‘Guangdong’);
Query OK,
1 row affected (0.00 sec)
SQL Node 2
neo@sql:~$ MySQL -uroot -p
Enter passWord:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 7
Server version: 5.0.51a-3Ubuntu5.1 (Ubuntu)
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.
MySQL> show databases;
——————–
| Database |
——————–
| information_schema |
| example |
| mydb |
| MySQL |
| neo |
——————–
6 rows in set (0.13 sec)
MySQL> create database cluster;
Query OK,
1 row affected (0.00 sec)
MySQL> show databases;
——————–
| Database |
——————–
| information_schema |
| cluster |
| example |
| mydb |
| MySQL |
| neo |
——————–
6 rows in set (0.13 sec)
MySQL> use cluster;
Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A
Database changed
MySQL> show tables;
——————-
| Tables_in_cluster |
——————-
| city |
——————-
1 row in set (0.01 sec)
MySQL> select * from city;
—- ———–
| id | name |
—- ———–
| 1 | Shenzhen |
| 2 | Guangdong |
—- ———–
2 rows in set (0.03 sec)
MySQL>
執行這類操作時應記住三點
1.表必須用ENGINE=NDB或ENGINE=NDBCLUSTER選項創建,或用ALTER TABLE選項更改,以使用NDB Cluster存儲引擎在 Cluster內復制它們。如果使用MySQLdump的輸出從已有數據庫導入表,可在文本編輯器中打開SQL腳本,並將該選項添加到任何表創建語句,或用這類選項之一替換任何已有的ENGINE(或TYPE)選項。
2.另外還請記住,每個NDB表必須有一個主鍵。如果在創建表時用戶未定義主鍵,NDB Cluster存儲引擎將自動生成隱含的主鍵。(注釋:該隱含 鍵也將占用空間,就像任何其他的表索引一樣。由於沒有足夠的內存來容納這些自動創建的鍵,出現問題並不罕見)。
3.當你在一個節點上運行create database mydb;你去其他sql node上執行show databases;將不能看到mydb,你需要創建它,然後use mydb; show tables;你將看到同步的表。
SQL Node 1