Mysql8 NDB集群二进制方式免安装配置图解
? ? ? ? ? ? ? ? ? ? ? Mysql8 NDB集群二進制解壓安裝配置圖解
聲明與簡介
本文的數據來自網絡,部分代碼也有所參照,這里做了注釋和延伸,旨在技術交流,如有冒犯之處請聯系博主及時處理。本文主要介紹mysql的NDB集群的配置及操作。
注:1 當前的NDB SQL節點采用二進制的方式(免安裝)安裝在VVMware虛擬機內。
? ? ? ?2 當前虛擬機內mysql運行在Linux的Centos 8內,版本號是 8.0.23、端口號3306。
? ? ? ?3 host_128是管理節點、Host_131、host_132是SQL節點、Host_129、host_130 是數據節點
NDB官方介紹
- NDBCLUSTER?(又稱NDB)是一個內存存儲引擎具有高可用性和數據持久性的特征。
- Management node:?管理節點在集群中擔當管理角色。它主要提供配置數據節點、啟動、關閉節點和備份等方面的功能。.
- Data node:?數據節點擔當存儲角色。針對NoOfReplicas參數如果它為2,則會對應4個數據節點,通過數據的冗余(存儲更多數據鏡像)來達到可高用的目的。
- SQL node:?通過SQL節點客戶端可以訪問集群數據,區別于傳統mysql server,這里的存儲引擎是NDBCLUSTER,即可該節點的啟動方式里帶了NDB集群參數。
NDB工作流程
MySQL NDB Cluster Workflow:
SQL節點安裝
下載mysql-cluster二進制包
下載mysql-cluster-8.0.23并傳送到CentOS服務器內。當前執行環境是其中一個SQL節點host_132。
解壓mysql-cluster二進制包
# 切換到二進制包的目錄并解壓 cd /root/softwares/mysql/mysqlcluster tar –zxvf mysql-cluster-8.0.23-linux-glibc2.12-x86_64.tar.gz配置mysql環境變量
#為方便mysql相關命令的引用,配置環境變量 vi /etc/profile #export MYSQL_CLUSTER_HOME=/root/softwares/mysql/mysqlcluster/mysql-cluster-8.0.23-linux-glibc2.12-x86_64 #${MYSQL_CLUSTER_HOME}/bin 為新增部分,原有的保留 #export PATH=${JAVA_HOME}/bin:$PATH:${KETTLE_HOME}:${MYSQL_CLUSTER_HOME}/bin初始化mysql
# 切換到mysql-cluster主目錄初始化mysql cd mysql-cluster-8.0.23-linux-glibc2.12-x86_64/bin # mysqld --initialize --user=mysql mysqld --initialize --user=mysql --datadir=/data/mysql/ #臨時密碼要么在控制臺要么在/var/log/mysqld.log內修改配置文件
這里 /etc/my.cnf需要配置
#目錄位置供參考,修改需根據自己實際情況。
basedir=/root/softwares/mysql/mysqlcluster/mysql-cluster-8.0.23-linux-glibc2.12-x86_64/
datadir=/data/mysql/
log-error=/var/log/mysqld.log
pid-file=/data/pid/mysqld/mysqld.pid
#basedir=<path-to-mysql-installation-directory>,即mysql二進制文件的解壓目錄、
其中datadir、log-error、pid-file三個文件夾mysql用戶都得有權限。以pid-file參數為例:
#創建pid目錄和文件并賦權于mysql用戶 mkdir -p /data/pid/mysqld chown mysql:mysql /data/pid/mysqld chmod +755 /data/pid/mysqld配置mysql服務
#配置成linux 服務 cp ../support-files/mysql.server /etc/init.d/mysqld service mysqld start配置libtinfo.so鏈接
#鏈接libtinfo.so.5 ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5客戶端修改初始密碼
#客戶端登入并修改初始密碼 mysql –uroot -p 'xG1m:9lsw3V;' alter user root@localhost identified by 'root1234';注:同理配置另外個SQL節點(即host_131)重復以上操作。
#SCP到其它SQL節點(當前演示環境指的是host_131),做以上類似操組。 scp -r mysql-cluster-8.0.23-linux-glibc2.12-x86_64 root@host_132:/root/softwares/mysql/mysqlcluster/Data數據節點安裝
拷貝數據節點命令
#Data 節點數據節點,每個data節點上都要執行以下操作。當前執行環境為sql節點的host_132。 scp -r ./ndbd root@host_129:/usr/local/bin/ scp -r ./ndbmtd root@host_129:/usr/local/bin/management 節點安裝
拷貝管理節點命令
#拷貝管理節點命令,當前執行環境為host_132 scp -r ./ndb_mgm* root@host_128:/usr/local/bin/配置NDB集群
配置SQL數據節點my.cnf
數據節點、SQL節點里的/etc/my.cnf里新增ndbcluser相關配置。這里的ndb-connectstring即對應管理節點IP即host_128。
ndbcluster
[mysql_cluster]
ndb-connectstring=192.168.111.128
如果數據節點無/etc/my.cnf,需要手動創建。該文件的權限見:
配置management 節點
#創建配置NDB管理節點配置文件 mkdir /var/lib/mysql-cluster cd /var/lib/mysql-cluster vi config.ini #詳細見下文[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=1??? # Number of fragment replicas
DataMemory=98M??? # How much memory to allocate for data storage
[ndb_mgmd]
# Management process options:
HostName=192.168.111.128????????? # Hostname or IP address of management node
DataDir=/var/lib/mysql-cluster? # Directory for management node log files
[ndbd]
# Options for data node "A":
??????????????????????????????? # (one [ndbd] section per data node)
HostName=192.168.111.129????????? # Hostname or IP address
NodeId=2????????? ??????????????# Node ID for this data node
DataDir=/data/mysql?? # Directory for this data node's data files
[ndbd]
# Options for data node "B":
HostName=192.168.111.130????????? # Hostname or IP address
NodeId=3??????????????????????? # Node ID for this data node
DataDir=/data/mysql?? # Directory for this data node's data files
[mysqld]
# SQL node options:
HostName=192.168.111.131????????? # Hostname or IP address
??????????????????????????????? # (additional mysqld connections can be
???????????????????? ???????????# specified for this node for various
??????????????????????????????? # purposes such as running ndb_restore)
[mysqld]
# SQL node options:
HostName=192.168.111.132?? ???????# Hostname or IP address
配置libtinfo.so鏈接
#登入host_128管理節點,鏈接libtinfo.so.5 ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5啟動管理節點
啟動管理節點
#啟動管理節點host_128上啟動管理進程 cd /usr/local/bin ./ndb_mgmd --initial -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/ ##查看管理節點相關進程已啟動 ps aux|grep ndb_mgmd啟動數據節點
#host_129、host_130兩數據節點上啟動進程。 cd /usr/local/bin ./ndbd啟動SQL 節點
#host_131、host_132兩sql節點啟動服務 service mysqld start管理節點查看狀態
#host_128管理節點查看NDB集群狀態 cd /usr/local/bin ./ndb_mgm; Show;注:這里因為防火墻的原因,集群的數據節點和SQL節點并未加入。
關閉管理節點數據節點防火墻
#關閉防火墻或考慮永久關閉 systemctl stop firewalld.service關閉管理節點、數據節點的防火墻后再查看NDB集群的狀態。
驗證NDB集群
數據庫同步
-- 在一個sql節點上創建數據庫和表,在另外個sql節點上查看。比如這里在host_131上創建數據test_ndb,并在當前節點host_131上查詢系統表。CREATE DATABASE test_ndb CHARACTER SET utf8 COLLATE utf8_general_ci; SELECT @@hostname,SCHEMA_NAME AS `Database` FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='test_ndb'; -- 在另外個sql節點host132上執行數據庫系統表查詢,可見元數據已同步。 SELECT @@hostname,SCHEMA_NAME AS `Database` FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='test_ndb';NDB引擎表
-- 在一個Sql節點Host_132上執行表創建和插入操作,當前表的存儲引擎是NDB CREATE TABLE `City_NDB` (`ID` int(11) NOT NULL auto_increment,`Name` char(35) NOT NULL default '',`CountryCode` char(3) NOT NULL default '',`District` char(20) NOT NULL default '',`Population` int(11) NOT NULL default '0',PRIMARY KEY? (`ID`) ) ENGINE=NDBCLUSTER DEFAULT CHARSET=utf8;INSERT INTO `City_NDB ` VALUES (1,'Kabul','AFG','Kabol',1780000); INSERT INTO `City_NDB M` VALUES (2,'Qandahar','AFG','Qandahar',237500); INSERT INTO `City_NDB ` VALUES (3,'Herat','AFG','Herat',186800); Use test_ndb; -- 分別在兩個SQL節點執行數據檢索,會看到表數據會同步。 SELECT @@hostname,A.* FROM City_NDB A;注:表的引擎也可以通過修改的方式更新成NDBCLUSTER。如:
-- 修改表的存儲引擎為NDBCLUSTER的示例 ALTER TABLE City ENGINE=NDBCLUSTER;非NDB引擎表?
-- 僅在一個sql節點host_130上執行表創建,這里的引擎指定為MyISAM CREATE TABLE `City_MyISAM` (`ID` int(11) NOT NULL auto_increment,`Name` char(35) NOT NULL default '',`CountryCode` char(3) NOT NULL default '',`District` char(20) NOT NULL default '',`Population` int(11) NOT NULL default '0',PRIMARY KEY (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `City_MyISAM` VALUES (1,'Kabul','AFG','Kabol',1780000); INSERT INTO `City_MyISAM` VALUES (2,'Qandahar','AFG','Qandahar',237500); INSERT INTO `City_MyISAM` VALUES (3,'Herat','AFG','Herat',186800);-- 分別在兩個SQL節點執行數據檢索 SELECT @@hostname,A.* FROM City_MyISAM A;Host_131上執行結果:?
Host_132上執行則報錯,因為非NDB引擎,表的元數據無法同步。
節點故障
假設下線sql節點host_131,查看下集群狀態,此時只有host_132可以訪問。
#sql節點host_131上執行服務停止命令 service mysqld stop; -- 另一sql節點host_132通過客戶端訪問 SELECT @@hostname,A.* FROM City_NDB A;?同理數據節點也有類似結論。
關閉集群
如果是shell環境則可以通過如下命令關閉
#關閉管理節點 ndb_mgm -e shutdown如果已經進入ndb_mgm則輸入shutdown即可。該命令會停止管理節點和數據節點的NDB的相關進程。而SQL節點則需要手動的可通過如下命令停止:
#關閉mysql 服務 mysqladmin shutdown #service mysqld stop開啟集群
#Step 1: 啟動management管理節點(host_128) cd /usr/local/bin ./ndb_mgmd --initial -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/#Step 2: 啟動data數據節點(host_129、host_130) cd /usr/local/bin ./Ndbd#啟動sql節點(host_131、host_132) mysqld_safe & #service mysqld start總結
以上是生活随笔為你收集整理的Mysql8 NDB集群二进制方式免安装配置图解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信闪住怎么看额度
- 下一篇: 其他应收款贷方余额表示什么