標籤:com 資料庫表 地理位置 manage 安裝mysql defaults 表示 速度 dex
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版本安裝準備
[[email protected] ~]# tar -xvf MySQL-Cluster-gpl-7.3.7-1.el6.x86_64.rpm-bundle.tar
[[email protected] yy]# tar -xvf MySQL-Cluster-gpl-7.3.7-1.el6.x86_64.rpm-bundle.tar
3.建立檔案夾
(分如下3個類來建立對應的檔案夾)
資料結點存放資料,: [[email protected] ~]# mkdir /var/lib/mysql
管理節點: [[email protected] ~]# mkdir /var/lib/mysql-cluster SQL節點:可不用 檔案夾授權
進程DIR: [[email protected] ~]# mkdir /var/run/mysqld
[[email protected] yy]# mkdir /var/run/mysqld
4.安裝mysql叢集軟體包
[[email protected] ~]# rpm -ivh MySQL-Cluster-server-gpl-7.3.7-1.el6.x86_64.rpm
[[email protected] ~]# rpm -ivh MySQL-Cluster-client-gpl-7.3.7-1.el6.x86_64.rpm
[[email protected] yy]# rpm -ivh MySQL-Cluster-server-gpl-7.3.7-1.el6.x86_64.rpm
[[email protected] yy]# rpm -ivh MySQL-Cluster-client-gpl-7.3.7-1.el6.x86_64.rpm
注意:當安裝完畢MySQL-Cluster-server-gpl包後,將出現如下提示資訊,提醒我們整個cluster安裝後的初次超級賬戶密碼存在/root/.mysql_secret這個檔案當中。
5.賦許可權
[[email protected] ~]# chown mysql:mysql -R /var/lib/mysql
[[email protected] ~]# chown mysql:mysql -R /var/lib/mysql-cluster/
[[email protected] ~]# chown mysql:mysql -R /usr/mysql-cluster/
[[email protected] ~]# chown mysql:mysql -R /var/run/mysqld/
[[email protected] ~]# chown mysql:mysql -R /usr/mysql-cluster/
[[email protected] yy]# chown mysql:mysql -R /var/run/mysqld
搭建mysql叢集
[[email protected] ~]# 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節點配置文檔 + 主從同步
[[email protected] ~]# 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
[[email protected] 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啟動
[[email protected] ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini
[[email protected] ~]# ndbd --initial 第一次啟動加--initial
[[email protected] yy]# ndbd --initial
啟動SQL結點服務
[[email protected] yy]# mysqld_safe --defaults-file=/etc/my.cnf &
[[email protected] ~]# mysqld_safe --defaults-file=/etc/my.cnf &
設定密碼及相關mysql設定
[[email protected] ~]# cat /home/yy/.mysql_secret
[[email protected] ~]# mysql_secure_installation
[[email protected] yy]# cat /root/.mysql_secret
[[email protected] yy]# mysql_secure_installation
查看mysql 叢集狀態:
[[email protected] ~]# ndb_mgm
130
mysql> grant replication slave on *.* to [email protected] 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;
關閉服務
[[email protected] ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> shutdown
ndb_mgm> exit
[[email protected] ~]# ps -axu | grep ndbd #查看不到,說明資料節點已經被關
[[email protected] ~]# kill -9 pid號
[[email protected] yy]# ps -axu | grep ndbd #查看不到,說明資料節點已經被關
[[email protected] yy]# kill -9 pid號
啟動服務
[[email protected] ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini
[[email protected] ~]# ndbd
[[email protected] yy]# ndbd
[[email protected] yy]# mysqld_safe --defaults-file=/etc/my.cnf &
[[email protected] ~]# mysqld_safe --defaults-file=/etc/my.cnf &
備忘:叢集做了資料庫的同步,沒有做資料庫表的同步,具體還是沒有理解這樣做的意義,如果叢集不能主從同步,那麼之前畫的那個圖就不準確。
因此這裡自訂加的資料庫表的同步:採用主從同步的方式。
後期做成M-s s-M,這樣無論修改哪一邊的資料,都能同步了。
mysql 叢集+主從同步