1.1 目的
部署MysqlCluster集群環(huán)境
1.2 MySQL集群Cluster原理
1 數(shù)據(jù)分片
MySQL集群Cluster將數(shù)據(jù)分成多個片段,每個片段存儲在不同的服務(wù)器上。這樣可以將數(shù)據(jù)負(fù)載分散到多個服務(wù)器上,提高系統(tǒng)的性能和可擴展性。
2. 數(shù)據(jù)同步
MySQL集群Cluster使用多個服務(wù)器來存儲數(shù)據(jù),因此需要確保數(shù)據(jù)在不同的服務(wù)器之間同步。MySQL集群Cluster使用多種同步機制,如異步復(fù)制、半同步復(fù)制和全同步復(fù)制等,來確保數(shù)據(jù)的一致性和可靠性。
3. 負(fù)載均衡
MySQL集群Cluster使用負(fù)載均衡算法來分配客戶端請求到不同的服務(wù)器上。這樣可以避免單個服務(wù)器過載,提高系統(tǒng)的性能和可用性。
4. 自動故障轉(zhuǎn)移
MySQL集群Cluster可以自動檢測服務(wù)器的故障,并將故障服務(wù)器上的數(shù)據(jù)轉(zhuǎn)移到其他服務(wù)器上。這樣可以確保系統(tǒng)的高可用性和可靠性。
1.3 NDB引擎介紹
在MySQL實現(xiàn)集群Cluster架構(gòu)中,存儲節(jié)點使用的存儲引擎為NDB引擎。NDB引擎是一種分布式的基于內(nèi)存的引擎,因此作為MySQL集群Cluster架構(gòu)中的存儲節(jié)點,內(nèi)存一定要足夠大。
使用NDB引擎有以下優(yōu)點:
1、基于內(nèi)存存儲,沒有磁盤I/O瓶頸,速度快。
2、擴展性好,增加節(jié)點即可實現(xiàn)數(shù)據(jù)庫集群Cluster的擴展。
3、冗余性好,單個節(jié)點故障,集群還可以提供服務(wù)。
同時,NDB引擎也有以下缺點:
1、由于存儲基于內(nèi)存,因此在設(shè)備斷電后數(shù)據(jù)即丟失。
2、存儲空間大小受內(nèi)存大小限制。
3、多個節(jié)點分布式架構(gòu)整體速度受會網(wǎng)絡(luò)速度影響
1.4 InnoDB存儲引擎
InnoDB是一種支持事務(wù)和行級鎖的崇尚ACID特性的儲存引擎。它是MySQL5.5版本后的默認(rèn)引擎。InnoDB非常適合那些需要頻繁進(jìn)行更新操作的應(yīng)用,比如在線事務(wù)處理系統(tǒng)(OLTP)。
使用InnoDB引擎有以下優(yōu)點:
1、支持事務(wù):InnoDB儲存引擎具有事務(wù)處理的能力,能夠保證數(shù)據(jù)的完整性和一致性。
2、行級鎖:InnoDB通過行級鎖來控制并發(fā)讀寫操作,提高了多用戶環(huán)境下的并發(fā)性能。
3、外鍵約束:InnoDB支持外鍵約束,保證數(shù)據(jù)的完整性。
4、適合OLTP:InnoDB引擎特別適合處理大量的并發(fā)讀寫操作,如OLTP系統(tǒng)。
5、Crash Recovery:InnoDB具備崩潰恢復(fù)的功能,能夠在異常退出后將數(shù)據(jù)恢復(fù)到一致的狀態(tài)。
同時,InnoDB引擎也有以下缺點:
1、 讀寫效率較差。
2、 占用的數(shù)據(jù)空間相對較大。
1.5 MyISAM存儲引擎
MyISAM是MySQL早期的默認(rèn)儲存引擎,它采用表級鎖,適合處理大量的讀操作。然而,它不支持事務(wù)和外鍵約束。
使用MyISAM引擎有以下優(yōu)點:
1、表級鎖:MyISAM采用表級鎖,對于大量更新操作的并發(fā)性能較差。
2、不支持事務(wù):MyISAM不支持事務(wù)處理,因此可能存在數(shù)據(jù)不一致的風(fēng)險。
3、全文索引:MyISAM支持全文索引,適合處理搜索引擎和全文搜索等應(yīng)用。
4、插入性能:MyISAM在插入性能方面較好,對于大量的插入操作,性能較高。
同時,MyISAM引擎也有以下缺點:
1、不支持事務(wù)的完整性和并發(fā)性。
1.6 引擎對比選擇
InnoDB適用于大量的并發(fā)讀寫操作、需要事務(wù)處理和外鍵約束的應(yīng)用;MyISAM適用于大量的讀操作、不需要事務(wù)處理和外鍵約束的應(yīng)用;NDB適用于高并發(fā)、實時性要求高的應(yīng)用。
2. 部署程序
2.1 部署環(huán)境
服務(wù)器作用 服務(wù)器名 服務(wù)器IP 系統(tǒng)版本
管理節(jié)點 master 192.168.186.128 Centos7
數(shù)據(jù)節(jié)點 slave1 192.168.186.129 Centos7
SQL節(jié)點 slave2 192.168.186.130 Centos7
SQL節(jié)點 slave3 192.168.186.130 Centos7
2.2.1 修改四臺主機名和添加hosts
#關(guān)閉防火墻:
systemctl stop firewalld
systemctl disable firewalld
#關(guān)閉selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 臨時
#時間同步
yum install ntpdate -y
ntpdate time.windows.com
hostnamectl set-hostname master && bash #192.168.186.128上操作
hostnamectl set-hostname slave1 && bash #192.168.186.129上操作
hostnamectl set-hostname slave2 && bash #192.168.186.130上操作
hostnamectl set-hostname slave3 && bash #192.168.186.131上操作
#四臺服務(wù)器同時添加內(nèi)容
cat >> /etc/hosts << EOF
192.168.186.128 master
192.168.186.129 slave1
192.168.186.130 slave2
192.168.186.131 slave3
EOF
#所有機器上都操作
ssh-keygen -t rsa #一路回車,不輸入密碼
###把本地的ssh公鑰文件安裝到遠(yuǎn)程主機對應(yīng)的賬戶
for i in master slave1 slave2 slave3;do ssh-copy-id -i .ssh/id_rsa.pub $i ;done
2.3 管理節(jié)點部署
2.3.1 管理節(jié)點原理
顧名思義,管理節(jié)點用來對其它節(jié)點進(jìn)行管理。實際操作中,是通過對一個叫做config.ini的配置文件進(jìn)行維護(hù)而起到管理的作用。該文件可以用來配置有多少需要維護(hù)的副本、需要在每個數(shù)據(jù)節(jié)點上為數(shù)據(jù)和索引分配多少內(nèi)存、數(shù)據(jù)節(jié)點的位置、在每個數(shù)據(jù)節(jié)點上保存數(shù)據(jù)的磁盤位置、SQL節(jié)點的位置等信息。管理節(jié)點只能有一個,配置要求不高。
#關(guān)閉防火墻:
systemctl stop firewalld
systemctl disable firewalld
#關(guān)閉selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 臨時
#時間同步
yum install ntpdate -y
ntpdate time.windows.com
mkdir -p /var/log/mysql-cluster
mkdir -p /etc/mysql-cluster
mkdir -p /usr/local/mysql && cd /usr/local/mysql #上傳安裝包到此路徑下
wget https://downloads.mysql.com/archives/get/p/14/file/mysql-cluster-8.0.25-linux-glibc2.12-x86_64.tar.gz --no-check-certificate
tar -zxvf mysql-cluster-8.0.25-linux-glibc2.12-x86_64.tar.gz #解壓
mv mysql-cluster-8.0.25-linux-glibc2.12-x86_64 mysql-cluster #重命名
touch /etc/mysql-cluster/config.ini
cat > /etc/mysql-cluster/config.ini << EOF
[ndbd default]
#數(shù)據(jù)寫入數(shù)量。1表示一份,1個數(shù)據(jù)節(jié)點
NoOfReplicas=1
[ndb_mgmd]
nodeid=1
#管理結(jié)點的日志
datadir=/var/log/mysql-cluster
#管理結(jié)點的IP地址。本機IP
HostName=192.168.186.128
###### data node options: #存儲結(jié)點
[ndbd]
HostName=192.168.186.129
DataDir=/data/mysql
#mysql數(shù)據(jù)存儲路徑
nodeid=2
# SQL node options: #關(guān)于SQL結(jié)點
[mysqld]
HostName=192.168.186.130
nodeid=3
[mysqld]
HostName=192.168.186.131
nodeid=4
EOF
#初始化管理節(jié)點
/usr/local/mysql/mysql-cluster/bin/ndb_mgmd -f /etc/mysql-cluster/config.ini
#查看集群狀態(tài)
/usr/local/mysql/mysql-cluster/bin/ndb_mgm
ndb_mgm> show
#發(fā)現(xiàn)管理節(jié)點已經(jīng)啟動,當(dāng)數(shù)據(jù)節(jié)點以及SQL節(jié)點未啟動時顯示的是not connected。
2.4 數(shù)據(jù)節(jié)點部署
2.4.1 數(shù)據(jù)節(jié)點原理
用來存放Cluster里面的數(shù)據(jù),可以有多個數(shù)據(jù)節(jié)點。每個數(shù)據(jù)節(jié)點可以有多個鏡像節(jié)點。任何一個數(shù)據(jù)節(jié)點發(fā)生故障,只要它的鏡像節(jié)點正常,Cluster就可以正常運行。
這3種邏輯上不同的節(jié)點物理上可以存放在不同的服務(wù)器上,也可以在同一臺 服務(wù)器上。通過架構(gòu)中各個節(jié)點的介紹,可以總結(jié)一下MySQL Cluter的訪問過程:前臺應(yīng)用利用一定的負(fù)載均衡算法將對數(shù)據(jù)庫的訪問分散到不同的SQL節(jié)點上,然后SQL節(jié)點對數(shù)據(jù)節(jié)點進(jìn)行數(shù)據(jù)訪問并從數(shù)據(jù)節(jié)點返回結(jié)果,最后SQL節(jié)點將收到的結(jié)果返給前臺應(yīng)用。而管理節(jié)點并不參與訪問過長,它只用來對SQL節(jié)點和數(shù)據(jù)節(jié)點進(jìn)行配置管理。
#關(guān)閉防火墻:
systemctl stop firewalld
systemctl disable firewalld
#關(guān)閉selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 臨時
#時間同步
yum install ntpdate -y
ntpdate time.windows.com
mkdir -p /usr/local/mysql && cd /usr/local/mysql
wget https://downloads.mysql.com/archives/get/p/14/file/mysql-cluster-8.0.25-linux-glibc2.12-x86_64.tar.gz --no-check-certificate
tar -zxvf mysql-cluster-8.0.25-linux-glibc2.12-x86_64.tar.gz #解壓
mv mysql-cluster-8.0.25-linux-glibc2.12-x86_64 mysql-cluster #重命名
useradd -M -s /sbin/nologin mysql
mkdir -p /etc/mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql/
cat > /etc/my.cnf << EOF
[mysqld]
#mysql數(shù)據(jù)存儲路徑
datadir=/data/mysql
#啟動ndb引擎
ndbcluster
#管理節(jié)點IP地址
ndb-connectstring=192.168.186.128
[mysql_cluster]
#管理節(jié)點IP地址
ndb-connectstring=192.168.186.128
EOF
#啟動數(shù)據(jù)節(jié)點
/usr/local/mysql/mysql-cluster/bin/ndbd –initial
#檢查數(shù)據(jù)節(jié)點是否啟動
/usr/local/mysql/mysql-cluster/bin/ndb_mgm
ndb_mgm> show
2.5 SQL節(jié)點部署(2臺 SQL服務(wù)器同樣的部署方式)
SQL節(jié)點可以理解為應(yīng)用和數(shù)據(jù)節(jié)點之間的一個橋梁。應(yīng)用不能直接訪問數(shù)據(jù)節(jié)點,只能先訪問SQL節(jié)點,然后SQL節(jié)點再去訪問數(shù)據(jù)節(jié)點來返回數(shù)據(jù)。Cluster中可以有多個SQL節(jié)點,通過每個SQL節(jié)點查詢到的數(shù)據(jù)都是一直的,通常來說,SQL節(jié)點越多,分配到每個SQL節(jié)點的負(fù)載就越少,系統(tǒng)的整體性能就越好。
#關(guān)閉防火墻:
systemctl stop firewalld
systemctl disable firewalld
#關(guān)閉selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 臨時
#時間同步
yum install ntpdate -y
ntpdate time.windows.com
mkdir -p /usr/local/mysql
mkdir -p /etc/mysql
mkdir -p /data/mysql && cd /usr/local/mysql
wget https://downloads.mysql.com/archives/get/p/14/file/mysql-cluster-8.0.25-linux-glibc2.12-x86_64.tar.gz --no-check-certificate
tar -zxvf mysql-cluster-8.0.25-linux-glibc2.12-x86_64.tar.gz #解壓
mv mysql-cluster-8.0.25-linux-glibc2.12-x86_64 mysql-cluster #重命名
chown -R mysql:mysql /data/mysql/
useradd -M -s /sbin/nologin mysql
#創(chuàng)建SQL節(jié)點配置文件
cat > /etc/my.cnf << EOF
[mysqld]
user=mysql
#啟動ndb引擎
ndbcluster
#管理節(jié)點IP地址
ndb-connectstring=192.168.186.128
[mysql_cluster]
#管理節(jié)點IP地址
ndb-connectstring=192.168.186.128
EOF
#配置mysql服務(wù)
cp /usr/local/mysql/mysql-cluster/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
#編輯mysqld服務(wù)
vim /etc/init.d/mysqld
#圖片中的代碼如下:
# Set some defaults
mysqld_pid_file_path=
if test -z "$basedir"
then
basedir=/usr/local/mysql/mysql-cluster
bindir=/usr/local/mysql/mysql-cluster/bin
if test -z "$datadir"
then
datadir=/data/mysql
fi
sbindir=/usr/local/mysql/mysql-cluster/bin
libexecdir=/usr/local/mysql/mysql-cluster/bin
else
bindir="$basedir/bin"
if test -z "$datadir"
then
datadir="$basedir/data"
fi
sbindir="$basedir/sbin"
libexecdir="$basedir/libexec"
fi
#初始化mysql數(shù)據(jù)庫
cd /usr/local/mysql/mysql-cluster/bin
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/mysql-cluster --datadir=/data/mysql/
#啟動mysql
systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld
#兩臺SQL節(jié)點操作相同。
#檢查SQL節(jié)點是否啟動
/usr/local/mysql/mysql-cluster/bin/ndb_mgm
ndb_mgm> show
#2臺 SQL服務(wù)器同樣的部署后,截圖如下:
cp /usr/local/mysql/mysql-cluster/support-files/mysql.server /etc/init.d/mysqld
ln -s /usr/local/tools/mysql/bin/mysql /usr/bin
#登錄數(shù)據(jù)庫
mysql -uroot -p #初始化時候的密碼
alter user user() identified by "Mysql@123"; #修改為新的密碼
flush privileges;
3. 驗證集群
#192.168.5.130上執(zhí)行
mysql -uroot -pMysql@123 #利用修改后的密碼登錄
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| ndbinfo |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.11 sec)
mysql> create database mqq;
Query OK, 1 row affected (0.17 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mqq |
| mysql |
| ndbinfo |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
mysql>
192.168.5.131上驗證
mysql -uroot -pMysql@123 #利用修改后的密碼登錄
mysql> show databases;
可以看到數(shù)據(jù)完成同步。
至此MysqlCluster集群部署完成
4. 集群命令操作
4.1 管理節(jié)點操作
管理節(jié)點關(guān)閉(關(guān)閉管理節(jié)點后會一起關(guān)閉數(shù)據(jù)節(jié)點)
/usr/local/mysql/mysql-cluster/bin/ndb_mgm -e shutdown
rm /usr/local/mysql/mysql-cluster/ndb_1_config.bin.1 #如果集群配置有更新了
4.2 數(shù)據(jù)節(jié)點操作
數(shù)據(jù)節(jié)點(NDB)關(guān)閉
cd /usr/local/mysql/mysql-cluster/bin
./ndbd stop
4.3 SQL節(jié)點操作
SQL節(jié)點關(guān)閉文章來源:http://www.zghlxwxcb.cn/news/detail-784269.html
systemctl stop mysqld
參考地址:https://blog.csdn.net/hanyuce/article/details/134684116?app_version=6.2.2&code=app_1562916241&csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134684116%22%2C%22source%22%3A%22qq_14910065%22%7D&uLinkId=usr1mkqgl919blen&utm_source=app文章來源地址http://www.zghlxwxcb.cn/news/detail-784269.html
到了這里,關(guān)于Mysql分布式集群部署---MySQL集群Cluster將數(shù)據(jù)分成多個片段,每個片段存儲在不同的服務(wù)器上的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!