您好,登錄后才能下訂單哦!
MySQL集群搭建實現高可用
MySQL Cluster是MySQL適合于分布式計算環境的高實用、高冗余版本。Cluster的漢語是"集群"的意思。它采用了NDB Cluster 存儲引擎,允許在1個 Cluster 中運行多個MySQL服務器。
MySQL Cluster 是一種技術,該技術允許在無共享的系統中部署"內存中"數據庫的 Cluster 。通過無共享體系結構,系統能夠使用廉價的硬件,而且對軟硬件無特殊要求。此外,由于每個組件有自己的內存和磁盤,不存在單點故障。
SQL節點: 給上層應用層提供sql訪問。
存儲/數據節點: 保存cluster中的數據。 數據節點,可以提供副本。實現數據冗余。
管理節點(MGM): 管理整個集群。 啟動,關閉集群。 通過ndb_mgmd命令啟動集群
在我們做的實驗中mysql cluster集群各機器角色如下分配:
mysql 管理結點:xuegod63.cn IP:192.168.1.63 (安裝server、client) mysql 數據結點:xuegod64.cn IP:192.168.1.64 (安裝server、client) mysql 數據結點:xuegod65.cn IP:192.168.1.65 (安裝server、client) msyql SQL結點:xuegod66.cn IP:192.168.1.66 (安裝server、client) msyql SQL結點:xuegod67.cn IP:192.168.1.67 (安裝server、client) |
Mysql cluster的下載地址:https://dev.mysql.com/downloads/cluster/
這一部分雖然是初始過程但是比較復雜,請大家耐心配置。
所有主機上執行下面內容:
首先我們要清除舊版本,然后安裝mysql cluster,最后是文件權限管理。
1.mysql舊版本清除
首先使用如下命令來清理之前操作系統自帶的mysql安裝:
yum -y remove mysql
yum –y remove maridb*(centos7)
然后使用如下命令:
rpm -qa | grep mysql
rpm -qa | grep maridb
對于找到的2個剩余mysql包,請按照如下的命令格式予以刪除:
rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64
最后刪掉下列文件:
rm -rf /var/lib/mysql/*
rm -rf /etc/my.cnf
rm -rf /etc/init.d/mysqld
vim /etc/profile 刪除與mysql相關內容
2. mysql cluster 7.5版本安裝
2.1上傳并安裝最新的EPEL源 和 mysql社區版源安裝包
[root@xuegod63 ~]# rpm -ihv epel-release-7-10.noarch.rpm
[root@xuegod63 ~]# rpm -ihv mysql57-community-release-el7-11.noarch.rpm
2.2開啟mysql cluster 源
[root@xuegod63 ~]# sed -i "55s/0/1/g" /etc/yum.repos.d/mysql-community.repo
2.3刷新yum源緩存
[root@xuegod63 ~]# yum clean all && yum list
2.4安裝解決Cluster的依賴包
[root@xuegod63 ~]# yum install -y perl perl-Class-MethodMaker perl-DBI libaio numactl
2.5安裝Mysql Cluster
[root@xuegod63 ~]# yum install -y mysql-cluster-community-server
2.6查看安裝路徑
[root@xuegod63 ~]# rpm -ql mysql-cluster-community-server
其他4臺主機上重復2.1—2.5的步驟
3.數據節點主機都要安裝數據節點的相關包(2臺)
[root@xuegod64 ~]# yum install -y mysql-cluster-community-data-node
[root@xuegod65 ~]# yum install -y mysql-cluster-community-data-node
4. 管理節點安裝management管理包
[root@xuegod63~]# yum -y install mysql-cluster-community-management-server
5.創建文件夾
管理節點創建配置目錄:
[root@xuegod63~]# mkdir -p /usr/mysql-cluster/
1.1 各個機器上的配置
我們先將需求配置到各臺機器上
1.xuegod63創建管理節點上配置文件
[root@xuegod63 ~]vim /usr/mysql-cluster/config.ini #寫入以下內容
[ndbd default] NoOfReplicas=2 #數據寫入數量。2表示兩份 DataMemory=200M #配置數據存儲可使用的內存 IndexMemory=100M #索引給100M [ndb_mgmd] nodeid=1 datadir=/var/lib/mysql #管理結點的日志 HostName=192.168.1.63 #管理結點的IP地址。本機IP ###### data node options: #存儲結點 [ndbd] HostName=192.168.1.64 DataDir=/var/lib/mysql #mysql數據存儲路徑 nodeid=2 [ndbd] HostName=192.168.1.65 DataDir=/var/lib/mysql #mysql數據存儲路徑 nodeid=3 # SQL node options: #關于SQL結點 [mysqld] HostName=192.168.1.66 nodeid=4 [mysqld] HostName=192.168.1.67 nodeid=5 |
在這個文件里,分別給五個節點分配了ID,這有利于更好的管理和區分各個節點。當然,要是不指定,MySQL也會動態分配一個
2.xuegod64、xuegod65數據節點
[root@xuegod64 /]# vim /etc/my.cnf #請配置xuegod65一樣
[root@xuegod65 /]# vim /etc/my.cnf
[mysqld] datadir=/var/lib/mysql #mysql數據存儲路徑 ndbcluster #啟>動ndb引擎 ndb-connectstring=192.168.1.63 # 管理節點IP地址 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [mysql_cluster] ndb-connectstring=192.168.1.63 #管理節點IP地址 |
3. SQL節點配置文檔:
[root@xuegod66~]#vim /etc/my.cnf #請配置xuegod67一樣
[root@xuegod67~]#vim /etc/my.cnf
[mysqld] ndbcluster #啟動ndb引擎 ndb-connectstring=192.168.1.63 #管理節點IP地址 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [mysql_cluster] ndb-connectstring=192.168.1.63 #管理節點IP地址 |
說明:數據節點和SQL結點配置文件區別 ,就多一行
數據結點有:datadir=/var/lib/mysql #mysql數據存儲路徑。
而SQL節點上沒有。
1.2 MySQL Cluster啟動
初次啟動命令以及用戶密碼更改調整:(請嚴格按照次序啟動)
先啟動:管理結點服務->數據結點服務->sql結點服務
關閉:關閉管理結點服務,關閉管理結點服務后,nbdb數據結點服務會自動關閉->手動把sql結點服務關了。
執行初次啟動前請先確認 將兩臺機器的防火墻關閉(service iptables stop 或者 設定 防火墻端口可通,兩個端口即通訊端口1186、數據端口3306 )
[root@xuegod67 ~]#ndb_mgmd --ndb_nodeid=1 --initial -f /usr/mysql-cluster/config.ini
#盡量不要把 管理結點、 數據結點、存儲結點 配置在同一臺機子上,否則一個掛了,就全掛了。
查看端口號:
[root@xuegod63~]# netstat -antup | grep 1186
tcp 0 0 0.0.0.0:1186 0.0.0.0:* LISTEN 7057/ndb_mgmd
tcp 0 0 127.0.0.1:1186 127.0.0.1:60324 ESTABLISHED 7057/ndb_mgmd
tcp 0 0 127.0.0.1:60324 127.0.0.1:1186 ESTABLISHED 7057/ndb_mgmd
2. xuegod64和xuegod65啟動數據節點服務
[root@xuegod68 ~]# ndbd --initial
[ndbd] INFO -- Angel connected to '10.10.10.67: 1186'
[ndbd] INFO -- Angel allocated nodeid: 2
[root@xuegod69 ~]# ndbd --initial
[ndbd] INFO -- Angel connected to '10.10.10.67: 1186'
[ndbd] INFO -- Angel allocated nodeid: 3
3. xuegod66、xuegod67啟動SQL結點服務
[root@xuegod66~]#systemctl start mysqld
[root@xuegod66 ~]#systemctl start mysqld
4. 查看mysql 集群狀態:
[root@xuegod67 ~]#ndb_mgm
ndb_mgm> show
Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 @192.168.1.64 (mysql-5.7.22 ndb-7.5.10, Nodegroup: 0, *) id=3 @192.168.1.65 (mysql-5.7.22 ndb-7.5.10, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s) id=1 @192.168.1.63 (mysql-5.7.22 ndb-7.5.10)
[mysqld(API)] 2 node(s) id=4 @192.168.1.66 (mysql-5.7.22 ndb-7.5.10) id=5 @192.168.1.67 (mysql-5.7.22 ndb-7.5.10) |
5. 數據同步實驗測試
我們就需要在此之前改一下兩臺機器mysql的密碼。
查看mysql root用戶密碼 注意:我們只需修改sql節點的密碼
[root@xuegod66 ~]# grep password /var/log/mysqld.log
2018-07-02T16:01:46.008448Z 1 [Note] A temporary password is generated for root@localhost: lCUouyg(k2?F
在my.cnf文件中mysqld下面添加 validate-password=off
重啟mysql
[root@xuegod66 ~]# systemctl restart mysqld
[root@xuegod66 ~]# mysql -u root -p'lCUouyg(k2?F'
mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.7.22-ndb-7.5.10-cluster-gpl
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. |
mysql> set password for 'root'@'localhost'=password('123456');
mysql> grant all privileges on *.* to cluster@"%"identified by "123456"; #授權
mysql> flush privileges;
另一臺sql節點也是一樣操作
6. 模擬外部機器的一個客戶端插入數據:
mysql -ucluster -p123456 -h 192.168.1.66
注意:創建表的時候使用ndb引擎
mysql> create database db;
mysql> use db;
mysql> create table test(id int) engine=ndb;
mysql> insert into test values(1000);
mysql> select * from test;
登陸另一臺sql節點查看
mysql -ucluster -p123456 -h 192.168.1.67
mysql> use db;
mysql> select * from test;
停掉一個sql節點測試
[root@xuegod66 ~]# mysqladmin -uroot -p123456 shutdown
ndb_mgm> show 查看狀態
Connected to Management Server at: localhost:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 @192.168.1.64 (mysql-5.7.22 ndb-7.5.10, Nodegroup: 0, *) id=3 @192.168.1.65 (mysql-5.7.22 ndb-7.5.10, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s) id=1 @192.168.1.63 (mysql-5.7.22 ndb-7.5.10)
[mysqld(API)] 2 node(s) id=4 (not connected, accepting connect from 192.168.1.66) id=5 @192.168.1.67 (mysql-5.7.22 ndb-7.5.10) #發現少了一個sql 節點 |
7. 關閉服務
關閉mysql集群順序: 關閉管理節點服務-》 關閉管理節點時,數據結點服務自動關閉 –》 需要手動關閉SQL結點服務
關閉mysql的管理節點
[root@xuegod63 /] # ndb_mgm
-- NDB Cluster -- Management Client –
ndb_mgm> shutdown
Node 2: Cluster shutdown initiated Node 3: Cluster shutdown initiated Node 2: Node shutdown completed. Node 3: Node shutdown completed. 3 NDB Cluster node(s) have shutdown. Disconnecting to allow management server to shutdown. |
ndb_mgm> exit
ps -axu | grep ndbd #查看不到,說明數據節點已經被關
手動關閉SQL節點服務···
Xuegod66和xuegod67上,手動關閉SQL節點服務
[root@xuegod66 ~]# mysqladmin -uroot -p123456 shutdown
[root@xuegod67 ~]# mysqladmin -uroot -p123456 shutdown
或者:方法二 kill掉
[root@xuegod66 ~]# ps -axu | grep mysql
[root@xuegod66 ~]# kill -9 7617
[root@xuegod66 ~]# kill -9 7743
[root@xuegod66~]# ps -axu | grep mysql #xuegod67同樣kill掉
8. 總結
再次啟動,mysql集群啟動:
[root@xuegod63 /]# ndb_mgmd --ndb_nodeid=1 --initial -f /usr/mysql-cluster/config.ini
[root@xuegod64/]#ndbd
[root@xuegod65 /]#ndbd
[root@xuegod66 /]# systemctl restart mysqld
[root@xuegod67 /]# systemctl restart mysqld
查看mysql 集群狀態:
[root@xuegod63 ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @10.10.10.68 (mysql-5.7.20 ndb-7.5.8, Nodegroup: 0, *)
id=3 @10.10.10.69 (mysql-5.7.20 ndb-7.5.8, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.10.10.67 (mysql-5.7.20 ndb-7.5.8)
[mysqld(API)] 2 node(s)
id=4 @10.10.10.70 (mysql-5.7.20 ndb-7.5.8)
id=5 @10.10.10.71 (mysql-5.7.20 ndb-7.5.8)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。