SQL節點: 給上層應用層提供sql訪問。
管理節點(MGM): 管理整個集群。 啟動,關閉集群。 通過ndb_mgmd命令啟動集群
存儲/數據節點: 保存cluster中的數據。 數據節點,可以提供副本。實現數據冗余。
NDB引擎:是一種 “內存中”的存儲引擎 , 它具有可用性高和數據一致性好的特點。
缺陷
- 基於內存,數據庫的規模受集群總內存的大小限制
- 基於內存,斷電后數據可能會有數據丟失,這點還需要通過測試驗證。
- 多個節點通過網絡實現通訊和數據同步、查詢等操作,因此整體性受網絡速度影響,因此速度也比較慢
2.2 優點
- 多個節點之間可以分布在不同的地理位置,因此也是一個實現分布式數據庫的方案。
- 擴展性很好,增加節點即可實現數據庫集群的擴展。
- 冗余性很好,多個節點上都有完整的數據庫數據,因此任何一個節點宕機都不會造成服務中斷。
Mysql cluster的下載地址:http://dev.mysql.com/downloads/cluster/
在我們做的實驗中mysql cluster集群各機器角色如下分配:
mysql管理結點:xuegod63.cn IP:192.168.31.130
mysql 數據結點:xuegod63.cn IP:192.168.31.130
mysql 數據結點:xuegod64.cn IP:192.168.31.131
msyql SQL結點:xuegod63.cn IP:192.168.31.130
msyql SQL結點:xuegod64.cn IP:192.168.31.131
將MySQL-Cluster-gpl-7.3.7-1.el6.x86_64.rpm-bundle.tar上傳到130,131主機
實戰:MySQL集群搭建
1.mysql舊版本清除
yum -y remove mysql
rpm -qa | grep mysql*
對於找到的2個剩余mysql包,請按照如下的命令格式予以刪除:
rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64
2.mysql cluster版本安裝准備
[root@ygy130 ~]# tar -xvf MySQL-Cluster-gpl-7.3.7-1.el6.x86_64.rpm-bundle.tar
[root@yu131 yy]# tar -xvf MySQL-Cluster-gpl-7.3.7-1.el6.x86_64.rpm-bundle.tar
3.創建文件夾
(分如下3個類來創建對應的文件夾)
數據結點存放數據,: [root@ygy130 ~]# mkdir /var/lib/mysql
管理節點: [root@ygy130 ~]# mkdir /var/lib/mysql-cluster SQL節點:可不用 文件夾授權
進程DIR: [root@ygy130 ~]# mkdir /var/run/mysqld
[root@yu131 yy]# mkdir /var/run/mysqld
4.安裝mysql集群軟件包
[root@ygy130 ~]# rpm -ivh MySQL-Cluster-server-gpl-7.3.7-1.el6.x86_64.rpm
[root@ygy130 ~]# rpm -ivh MySQL-Cluster-client-gpl-7.3.7-1.el6.x86_64.rpm
[root@yu131 yy]# rpm -ivh MySQL-Cluster-server-gpl-7.3.7-1.el6.x86_64.rpm
[root@yu131 yy]# rpm -ivh MySQL-Cluster-client-gpl-7.3.7-1.el6.x86_64.rpm
注意:當安裝完畢MySQL-Cluster-server-gpl包后,將出現如下提示信息,提醒我們整個cluster安裝后的初次超級賬戶密碼存在/root/.mysql_secret這個文件當中。
5.賦權限
[root@ygy130 ~]# chown mysql:mysql -R /var/lib/mysql
[root@ygy130 ~]# chown mysql:mysql -R /var/lib/mysql-cluster/
[root@ygy130 ~]# chown mysql:mysql -R /usr/mysql-cluster/
[root@ygy130 ~]# chown mysql:mysql -R /var/run/mysqld/
[root@ygy130 ~]# chown mysql:mysql -R /usr/mysql-cluster/
[root@yu131 yy]# chown mysql:mysql -R /var/run/mysqld
搭建mysql集群
[root@ygy130 ~]# vim /var/lib/mysql-cluster/config.ini
[ndbd default]
NoOfReplicas=2 #數據寫入數量。2表示兩份
DataMemory=200M
IndexMemory=100M #索引給100M
[ndb_mgmd]
id=1
datadir=/var/lib/mysql-cluster # 管理結點的日志
HostName=192.168.31.130 #管理結點的IP地址。本機IP
###### data node options:
[ndbd]
HostName=192.168.31.130
DataDir=/var/lib/mysql #mysql數據存儲路徑
id=2
[ndbd]
HostName=192.168.31.131
DataDir=/var/lib/mysql
id=3
# SQL node options: #關於SQL結點
[mysqld]
HostName=192.168.31.130
id=4
[mysqld]
HostName=192.168.31.131
id=5
~
數據節點+SQL節點配置文檔 + 主從同步
[root@ygy130 ~]# vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql #mysql數據存儲路徑 數據節點(配置要加)
ndbcluster #啟動ndb引擎
ndb-connectstring=192.168.31.130 # 管理節點IP地址
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=192.168.31.130 #管理節點IP地址
[mysqld]
log-bin=mysql-bin-master #配置主從同步
server-id = 10
[root@yu131 yy]# vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
ndbcluster
ndb-connectstring=192.168.31.130
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=192.168.31.130
[mysqld]
log-bin=mysql-bin-slave
server-id = 11
~
MySQL Cluster啟動
[root@ygy130 ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini
[root@ygy130 ~]# ndbd --initial 第一次啟動加--initial
[root@yu131 yy]# ndbd --initial
啟動SQL結點服務
[root@yu131 yy]# mysqld_safe --defaults-file=/etc/my.cnf &
[root@ygy130 ~]# mysqld_safe --defaults-file=/etc/my.cnf &
設置密碼及相關mysql設置
[root@ygy130 ~]# cat /home/yy/.mysql_secret
[root@ygy130 ~]# mysql_secure_installation
[root@yu131 yy]# cat /root/.mysql_secret
[root@yu131 yy]# mysql_secure_installation
查看mysql 集群狀態:
[root@ygy130 ~]# ndb_mgm
130
mysql> grant replication slave on *.* to slave@192.168.31.131 identified by "123456";
mysql> flush privileges;
131
mysql>change master to master_host='192.168.31.130',master_user='slave',master_password='123456';
mysql> start slave;
mysql> show slave status\G 查看狀態
130
mysql> create database yy;
mysql> use yy
mysql> create table tt(id int);
mysql> insert into tt values(11);
131
mysql> use yy
mysql> select * from tt;
關閉服務
[root@ygy130 ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> shutdown
ndb_mgm> exit
[root@ygy130 ~]# ps -axu | grep ndbd #查看不到,說明數據節點已經被關
[root@ygy130 ~]# kill -9 pid號
[root@yu131 yy]# ps -axu | grep ndbd #查看不到,說明數據節點已經被關
[root@yu131 yy]# kill -9 pid號
啟動服務
[root@ygy130 ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini
[root@ygy130 ~]# ndbd
[root@yu131 yy]# ndbd
[root@yu131 yy]# mysqld_safe --defaults-file=/etc/my.cnf &
[root@ygy130 ~]# mysqld_safe --defaults-file=/etc/my.cnf &
備注:集群做了數據庫的同步,沒有做數據庫表的同步,具體還是沒有理解這樣做的意義,如果集群不能主從同步,那么之前畫的那個圖就不准確。
因此這里自定義加的數據庫表的同步:采用主從同步的方式。
后期做成M-s s-M,這樣無論修改哪一邊的數據,都能同步了。