MySQL Cluste—分佈式數據庫集羣搭建

一、爲什麼要用MySQL Cluset分佈式集羣?

大家可以看這兩位大佬的文章:
https://blog.csdn.net/qq_15092079/article/details/82665307
https://www.cnblogs.com/jesselzj/p/5609705.html

二、環境說明

2.1 系統環境

服務器 角色 環境說明
192.168.1.97 管理節點 系統:Ubuntu 16.04.6
192.168.1.99 數據節點 系統:Ubuntu 16.04.6
192.168.1.98 SQL節點 系統:Ubuntu 16.04.4
192.168.1.94 SQL節點 系統:Ubuntu 16.04.4

2.2 軟件環境
mysql cluster 集羣版本:mysql-cluster-gpl-7.6.12-linux-glibc2.12-x86_64
可到官網下載:https://dev.mysql.com/downloads/cluster/

三、 安裝MySQL Cluster

所有服務器均需執行執行以下操作

注意:在安裝mysql cluster之前,必須得先檢查該服務器上是否已安裝了普通mysql,若安裝了則需先把mysql刪除乾淨,因爲mysql cluster就包括了普通版mysql;

 1. 刪除mysql   

  a. sudo apt-get autoremove --purge mysql-server-5.0(版本可不寫5.0)
  b. sudo apt-get remove mysql-server
  c. sudo apt-get autoremove mysql-server
  d. sudo apt-get remove mysql-common (必須)

 2. 清理緩存數據
  dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P

在安裝管理節點、數據節點和sql節點時,最好以root用戶登錄執行,否則有一些步驟需要用到sudo命令來執行。
3.1、開始安裝

第一步:
	tar -xavf mysql-cluster-gpl-7.6.12-linux-glibc2.12-x86_64\ .tar.gz
第二步,解壓過後:
	sudo mkdir /usr/local/mysql
第三步:
	sudo cp -r /home/xgp/python_tools/mysql-cluster-gpl-7.6.12-linux-glibc2.12-x86_64/* /usr/local/mysql

每個服務器都需要一份

四、配置安裝管理節點

在服務器 192.168.1.97上執行以下操作。
注意,管理節點的防火牆端口開放,默認是1186。
4.1、 拷貝命令

#將文件ndb_mgm和ndb_mgmd拷貝到/usr/local/bin/目錄下
1:sudo cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin/
2:sudo chmod +x /usr/local/bin/ndb_mgm*

4.2、配置文件

	# 創建數據庫集羣配置文件的目錄
	1:sudo mkdir /var/lib/mysql-cluster
	# 創建並編輯配置文件
	2:sudo vim /var/lib/mysql-cluster/config.ini
	3[ndbd default]
		NoOfReplicas=1
		DataMemory=200M
		IndexMemory=64M

		[ndb_mgmd]
		NodeId=1
		hostname=192.168.1.97
		datadir=/var/lib/mysql-cluster

		[ndbd]
		NodeId=3
		hostname=192.168.1.99
		datadir=/usr/local/mysql/data/

		[mysqld]
		NodeId=4
		hostname=192.168.1.94

		[mysqld]
		NodeId=5
		hostname=192.168.1.98

[NDBD DEFAULT]:表示每個數據節點的默認配置,在每個節點的[NDBD]中不用再寫這些選項,只能有一個。

NoOfReplicas:副本數量,數據節點數必須是副本數的整數倍。

[NDB_MGMD]:表示管理節點的配置,只有一個,默認的對其他節點的端口是1186,故服務器需要開放1186端口。

[NDBD]:表示每個數據節點的配置,可以有多個,分別寫上不同數據節點的IP地址。

[MYSQLD]:表示SQL節點的配置,可以有多個,分別寫上不同SQL節點的IP地址。

4.3、啓動管理節點

# 第一次啓動
sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
# 以後啓動
sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini
# 如果以後修改配置文件
sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini --reload

ndb_mgmd是mysql cluster的管理服務器,後面的-f表示後面的參數是啓動的參數配置文件。
如果在啓動後過了幾天又添加了一個數據節點,這時修改了配置文件啓動時就必須加上--initial參數,
不然添加的節點不會作用在mysql cluster中

五、 配置安裝數據節點

在服務器 192.168.1.99 上執行以下操作。

注意,數據節點的端口開放問題,最好把防火牆關閉,雖然之前版本的默認端口號時2202,但是好像時5.1之後的端口號就沒有限制(看哪個端口空閒就用哪個端口),即與sql節點通信的端口號會隨機變換。若沒有關閉防火牆,後面在管理節點查看集羣狀態的時候,可能會出現mysql節點老是連接不上的問題。
5.1、配置my.cnf文件

sudo vim /etc/my.cnf
[mysqld]
ndbcluster
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
character_set_server=utf8
default-storage-engine=ndbcluster
port=3306
# 以下兩句可要可不要,給單張表添加大小
tmp_table_size = 500M
max_heap_table_size = 500M


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql_cluster]
ndb-connectstring=192.168.1.97:1186

5.2、安裝mysql數據庫

5.2.1 更改權限

	#分別添加mysql組和mysql用戶
	groupadd mysql
	useradd mysql -g mysql
	 
	#進入mysql目錄
	cd /usr/local/mysql/
	 
	#把mysql的目錄設置成所有者爲root
	chown -R root .
	 
	#創建data目錄,並把data目錄設置所有者爲mysql
	mkdir data
	chown -R mysql data
	 
	#把mysql的目錄改成所屬組爲mysql
	chgrp -R mysql .
5.2.2 執行安裝腳本
一:sudo ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
結果如下:
	2019-11-07T10:20:33.970981Z 1 [Note] A temporary password is generated for root@localhost: ,sFna=hgQ3rP # 初始賬號:root,密碼:,sFna=hgQ3rP
5.2.3 修改數據庫密碼
	# 加入到service服務
	sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
	sudo chmod +x /etc/init.d/mysqld
	sudo update-rc.d ./mysqld defaults (/etc/init.d 在這個目錄下操作)
	sudo service mysqld start
5.2.4 進入數據庫
	sudo /usr/local/mysql/bin/mysql -uroot -p # 這裏輸入最開始的原始密碼
	set password=password('新的密碼');
	mysql> show databases;
	# 結果如下:
		+--------------------+
		| Database           |
		+--------------------+
		| information_schema |
		| mysql              |
		| performance_schema |
		| sys                |
		+--------------------+
		4 rows in set (0.00 sec)
5.2.5 開啓遠程
	1,use mysql
	2,update user set host = '%' where user = 'root';
	3,flush privileges;

5.3、啓動數據節點

第一次啓動如下:
	sudo /usr/local/mysql/bin/ndbd --initial
非第一次啓動如下:
	sudo /usr/local/mysql/bin/ndbd

安裝後第一次啓動數據節點時要加上--initial參數。在以後的啓動過程中,
則是不能添加該參數的,否則ndbd程序會清除在之前建立的所有用於恢復的數據文件和日誌文件。

六、配置SQL節點

分別在服務器192.168.1.194192.168.1.98上執行以下操作。

6.1、配置my.cnf文件
mysql服務啓動時會默認加載/etc/my.cnf作爲其配置文件,故需要修改/etc/my.cnf配置文件。

[mysqld]
ndbcluster
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
character_set_server=utf8
default-storage-engine=ndbcluster
port=3306
tmp_table_size = 500M
max_heap_table_size = 500M


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql_cluster]
ndb-connectstring=192.168.1.97:1186

default-storage-engine,數據庫建表時的默認引擎爲ndbcluster,否則數據會同步失敗。
6.2、安裝MySQL數庫 同上:5.2 安裝mysql數據庫步驟
6.3、啓動sql節點

service mysqld start

七、測試

7.1、用管理節點查看

ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)]	1 node(s)
id=3	@192.168.1.99  (mysql-5.7.28 ndb-7.6.12, Nodegroup: 0, *)

[ndb_mgmd(MGM)]	1 node(s)
id=1	@192.168.1.97  (mysql-5.7.28 ndb-7.6.12)

[mysqld(API)]	2 node(s)
id=4 (not connected, accepting connect from 192.168.1.94)  # 因爲 94服務器運維正在維修。
id=5	@192.168.1.98  (mysql-5.7.28 ndb-7.6.12)

7.2、測試數據
連接任何一個sql節點,在此sql節點上操作,創建數據庫、創建表結構、增刪改等操作,在其他的sql節點上也會同步這些操作,使數據保持一致。在 192.168.1.98上進行操作

#登陸數據庫
sudo /usr/local/mysql/bin/mysql -uroot -p
Enter password:輸入密碼
 
#創建數據庫mytest
mysql> create database mytest;
 
#切換到mytest數據庫
mysql> use mytest;
 
#創建表結構sys_myfirst
mysql> create table sys_myfirst(id varchar(36) primary key, name varchar(100), memo varchar(255));
 
#在sys_myfirst中添加幾條數據
mysql> insert into sys_myfirst(id, name, memo) values('1','test1','hello world!');
mysql> insert into sys_myfirst(id, name, memo) values('2','test2','hello world haha!');
mysql> insert into sys_myfirst(id, name, memo) values('3','test3','hello world hehe!');
 
#查看數據
mysql> select * from sys_myfirst;
+----+-------+-------------------+
| id | name  | memo              |
+----+-------+-------------------+
| 2  | test2 | hello world haha! |
| 1  | test1 | hello world!      |
| 3  | test3 | hello world hehe! |
+----+-------+-------------------+
3 rows in set (0.00 sec)

在sql節點192.168.1.94上查看數據

#這裏就省去登陸mysql客戶端的步驟了
#查看數據
mysql> select * from sys_myfirst;
+----+-------+-------------------+
| id | name  | memo              |
+----+-------+-------------------+
| 1  | test1 | hello world!      |
| 3  | test3 | hello world hehe! |
| 2  | test2 | hello world haha! |
+----+-------+-------------------+
3 rows in set (0.00 sec)

以上是從別人的文章直接粘貼過來的,但是自己已經操作過了,是可行的連接如下:
原文鏈接:https://blog.csdn.net/qq_15092079/article/details/82665307

八、啓動和停止集羣

啓動順序:管理節點—數據節點—sql節點

停止順序:管理節點(會同時停止管理節點和數據節點)—sql節點

以上是看網上的人都是這麼說的,但是根據我的實踐,其實sql節點可以一直保持啓動狀態(即使管理節點停止了也沒關係,下次啓動的時候會自動連接上此sql節點),只要第一次啓動的時候遵循上面的順序即可。
8.1、停止管理節點

#第一種方法
ndb_mgm -e shutdown
 
#第二種方法
ndb_mgm
ndb_mgm> shutdown;

8.2、停止sql節點

# 其實就是停止mysql服務
service mysqld stop

以上配置就結束了,參考大佬連接如下:

https://blog.csdn.net/qq_42784891/article/details/86626163
https://blog.csdn.net/qq_15092079/article/details/82665307

九、總結

總體部署起來不算太難,以後用的時候在寫心得

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章