mysql-cluster安装与配置
一、部分理論
sql節點:要求建表時使用ndbcluster存儲引擎,存放表結構,數據保存在內存中。訪問Cluster數據的節點,客戶端節點是使用NDB Cluster存儲引擎的傳統MySQL服務器。
?? ??? ? 通常,SQL節點是使用命令“mysqld –ndbcluster”啟動的,或將“ndbcluster”添加到“my.cnf”后使用“mysqld”啟動
數據節點:保存Cluster的數據,數據節點的數目與副本的數目相關,是片段的倍數。例如,對于兩個副本,每個副本有兩個片段,那么就有4個數據節點,沒有必要設定過多的副本,
?? ??? ? ?在NDB中數據會盡量的保存在內存中。數據節點使用命令“ndbd”(單線程)或"ndbmtd"(多線程)啟動的,NDB存儲引擎是一個內存式存儲引擎
管理節點:管理MySQL Cluster內的其他節點,如提供配置數據,并停止節點,運行備份等。由于這類節點負責管理其他節點的配置,應該在啟動其他節點之前啟動這類節點。MGM節點是用命令“ndb_mgmd”啟動的
由于同步復制一共需要4次消息傳遞,故mysql cluster的數據更新速度比單機mysql要慢。
mysql cluster要求運行在千兆以上的局域網內,節點可以采用雙網卡,節點組之間采用直連方式。
二、mysql 8.0.22單節點安裝
[root@master ~]# tar -xvf mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz -C /opt/
[root@master ~]# cd /opt/
[root@master opt]# mv mysql-8.0.22-linux-glibc2.12-x86_64 mysql
[root@master opt]# mkdir mysql/data
[root@master opt]# mkdir mysql/mysql-files
[root@master opt]# chown mysql:mysql mysql -R
[root@master opt]# chmod 750 mysql/mysql-files
[root@master opt]# cd mysql/
[root@master mysql]# ./bin/mysqld --user=mysql --basedir=/opt/mysql/ --datadir=/opt/mysql/data/ --initialize ? #--defaults-file=etc/my.cnf
2021-03-05T07:05:17.996474Z 0 [System] [MY-013169] [Server] /opt/mysql/bin/mysqld (mysqld 8.0.22) initializing of server in progress as process 8672
2021-03-05T07:05:18.026331Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2021-03-05T07:05:19.078814Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2021-03-05T07:05:19.976142Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: &BqH*6TwoMma
[root@master mysql]# vi /etc/my.cnf
[mysqld]
basedir=/opt/mysql/
datadir=/opt/mysql/data
socket=/opt/mysql/data/mysql.sock
#Disabling symbolic-links is recommended to prevent assorted security risks
#symbolic-links=0 #MySQL數據庫及表(僅MyISAM)支持符號鏈接(symbolic link),即數據庫或表可以存儲在my.cnf中指定datadir之外的分區或目錄。要支持符號鏈接,需要在配置中設置symbolic-links=1(較新的版本為默認開啟)
character-set-server=utf8mb4
port=3306
default_authentication_plugin=mysql_native_password ?#使用以前老版本的加密模式,如果不使用,很多如mycat,hive等鏈接過來都會包密碼錯誤
slow_query_log=1 ?#開啟慢sql查詢日志
slow_query_log_file=/opt/mysql/data/mysql-slow.log #開啟慢sql查詢日志文件
long_query_time=3 ?#定義慢sql時間,單位秒
log_bin_trust_function_creators=1?
log-bin=mysql-bin #主從復制要開啟二進制文件
server-id=1 ?#主從復制要指定一個id
binlog-ignore-db=mysql #不要同步mysql庫 #也可以配置 binlog-do-db=dbname 要配置同步的庫名稱
binlog_ignore_db=information_schema
binlog_ignore_db=performance_schema
#屏蔽同步(其他_>當前)
replicate_ignore_db=mysql
replicate_ignore_db=information_schema
replicate_ignore_db=performance_schema
binlog-format=MIXED ?#默認是STATEMENT #設置二進制文件格式;如果是STATEMENT時并不安全,事務隔離級別為 READ-COMMITTED的InnoDB引擎,配置hive時會報錯
#[mysqld_safe]
#log-error=/opt/mysql/logs3306/mysql_error.log ?#自動在datadir生成 機器名.err
#pid-file=/opt/mysql/logs3306/mysql_pid.pid ?#自動在datadir生成 機器名.pif
[root@master mysql]# bin/mysqld_safe --user=mysql &
[root@master mysql]# mysql -S /opt/mysql/data/mysql.sock -p ?或者使用 mysql -u root -p -h 127.0.0.1 登錄,開啟參數socket=/opt/mysql/data/mysql.sock后本地只能使用此模式登錄
Enter password:
Welcome to the MySQL monitor. ?Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.22
Copyright (c) 2000, 2020, 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> ALTER USER 'root'@'localhost' IDENTIFIED BY 'yehaver';
Query OK, 0 rows affected (0.01 sec)
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> update user set host = '%' WHERE user='root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 ?Changed: 1 ?Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'root'@'%' IDENTIFIED BY 'yehaver';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
增加開機自啟動
[root@master mysql]# cp support-files/mysql.server /etc/init.d/mysql
[root@master mysql]# systemctl daemon-reload
[root@master mysql]# systemctl status mysql
● mysql.service - LSB: start and stop MySQL
? ?Loaded: loaded (/etc/rc.d/init.d/mysql; bad; vendor preset: disabled)
? ?Active: inactive (dead)
? ? ?Docs: man:systemd-sysv-generator(8)
[root@master mysql]# systemctl enable mysql
然后重啟生效
其它學習
1.在一臺Linux服務器上安裝多個MySQL實例(一)--使用mysqld_multi方式
https://www.cnblogs.com/lijiaman/p/12587630.html
2.在一臺Linux服務器上安裝多個MySQL實例(二)--使用單獨的MySQL配置文件
https://www.cnblogs.com/lijiaman/p/12588095.html
三、mysql-cluster集群安裝
機器名?? ?服務器?? ??? ??? ??? ?角色?? ??? ??? ?說明
S2 ??? ?192.168.100.103?? ?管理節點(MGM)?? ?系統 centos 7 64位
MASTER?? ?192.168.100.101?? ?數據節點(NDB)?? ?系統 centos 7 64位
S1?? ??? ?192.168.100.102?? ?數據節點(NDB)?? ?系統 centos 7 64位
MASTER?? ?192.168.100.101?? ?SQL節點?? ??? ??? ?系統 centos 7 64位
S1?? ??? ?192.168.100.102?? ?SQL節點?? ??? ??? ?系統 centos 7 64位
將軟件上傳到服務器并解壓
[root@master ~]# tar -xzvf ?mysql-cluster-gpl-7.6.16-el7-x86_64.tar.gz
#將解壓的文件重命名為mysql,并放到/usr/local/目錄下
[root@master ~]# mv mysql-cluster-gpl-7.6.16-el7-x86_64 /usr/local/mysql
[root@master ~]# scp -r /usr/local/mysql root@192.168.100.102:/usr/local/mysql
[root@master ~]# scp -r /usr/local/mysql root@192.168.100.103:/usr/local/mysql
[root@s2 ~]# ?systemctl stop firewalld
[root@s2 ~]# ?systemctl disable firewalld
#將文件ndb_mgm和ndb_mgmd拷貝到/usr/local/bin/目錄下
[root@s2 ~]# cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin/
#創建數據庫集群配置文件的目錄
[root@s2 ~]# mkdir /usr/local/mysql/mysql-cluster
?
#創建并編輯配置文件
[root@s2 ~]# vi /usr/local/mysql/mysql-cluster/config.ini
[ndbd default] ?
#表示每個數據節點的默認配置,在每個節點的[NDBD]中不用再寫這些選項,只能有一個。
NoOfReplicas=2 ?
#副本數量,數據節點數必須是副本數的整數倍。
DataMemory=200M
[ndb_mgmd] ?
#表示管理節點的配置,只有一個,默認的對其他節點的端口是1186,故服務器需要開放1186端口。
NodeId=1
hostname=192.168.100.103
datadir=/var/lib/mysql-cluster/
[ndbd]
#表示每個數據節點的配置,可以有多個,分別寫上不同數據節點的IP地址。
NodeId=2
hostname=192.168.100.101
datadir=/usr/local/mysql/data/
[ndbd]
NodeId=3
hostname=192.168.100.102
datadir=/usr/local/mysql/data/
[mysqld]
#表示SQL節點的配置,可以有多個,分別寫上不同SQL節點的IP地址。
NodeId=4
hostname=192.168.100.101
[mysqld]
NodeId=5
hostname=192.168.100.102
# ndb_mgmd是mysql cluster的管理服務器,后面的-f表示后面的參數是啟動的參數配置文件。
#如果在啟動后過了幾天又添加了一個數據節點,這時修改了配置文件啟動時就必須加上--initial參數,不然添加的節點不會作用在mysql cluster中。
#初始化管理節點
[root@s2 ~]# ?/usr/local/bin/ndb_mgmd -f /usr/local/mysql/mysql-cluster/config.ini --initial
#驗證初始化管理節點是否啟動成功
[root@s2 mysql]# /usr/local/bin/ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] ? ? 2 node(s)
id=2 (not connected, accepting connect from 192.168.100.101)
id=3 (not connected, accepting connect from 192.168.100.102)
[ndb_mgmd(MGM)] 1 node(s)
id=1 ? ?@192.168.100.103 ?(mysql-5.7.32 ndb-7.6.16)
[mysqld(API)] ? 2 node(s)
id=4 (not connected, accepting connect from 192.168.100.101)
id=5 (not connected, accepting connect from 192.168.100.102)
二、安裝數據節點和sql節點
vi /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
ndbcluster
ndb-connectstring=192.168.100.103
character_set_server=utf8
default-storage-engine=ndbcluster
port=3306
#[mysqld_safe]
#log-error=/var/log/mysqld.log
#pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]
ndb-connectstring=192.168.100.103:1186
#初始化mysql
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
#啟動mysql
/usr/local/mysql/support-files/mysql.server start
#登錄并設置新密碼
mysql -uroot -p
set password=password('yehaver');
#安裝后第一次啟動數據節點時要加上--initial參數。在以后的啟動過程中,則是不能添加該參數的,否則ndbd程序會清除在之前建立的所有用于恢復的數據文件和日志文件。
/usr/local/mysql/bin/ndbd --initial
下次啟動直接
/usr/local/mysql/bin/ndbd
所有服務啟動后運行情況
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] ? ? 2 node(s)
id=2 ? ?@192.168.100.101 ?(mysql-5.7.32 ndb-7.6.16, Nodegroup: 0, *)
id=3 ? ?@192.168.100.102 ?(mysql-5.7.32 ndb-7.6.16, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 ? ?@192.168.100.103 ?(mysql-5.7.32 ndb-7.6.16)
[mysqld(API)] ? 2 node(s)
id=4 ? ?@192.168.100.101 ?(mysql-5.7.32 ndb-7.6.16)
id=5 ? ?@192.168.100.102 ?(mysql-5.7.32 ndb-7.6.16)
三、啟動和停止管理節點
啟動順序:管理節點—數據節點—sql節點(就是啟動服務)
管理節點啟動:/usr/local/bin/ndb_mgmd -f /usr/local/mysql/mysql-cluster/config.ini
數據節點啟動: /usr/local/mysql/bin/ndbd
sql節點啟動:/usr/local/mysql/support-files/mysql.server start
管理節點停止 + 數據節點停止: /usr/local/bin/ndb_mgm -e shutdown
sql節點停止:/usr/local/mysql/support-files/mysql.server stop
四、參考文檔
集群安裝與配置
https://www.cnblogs.com/pinghengxing/p/13682553.html
集群規劃可參考
https://www.cnblogs.com/timePasser-leoli/p/12566256.html
Keepalived和Heartbeat功能相同,實現高可用,Heartbeat早期使用,現在都使用Keepalived
Keepalived:檢測HAproxy集群中服務器的健康狀況,以及實現HAproxy主備之間進行故障轉移,用來防止單點故障的發生,
?? ??? ? ? Keepalived通過請求一個VIP來達到請求真實IP地址的功能,而VIP能夠在一臺機器發生故障時候,自動漂移到另外一臺機器上,從來達到了高可用HA功能。
Heartbeat:可以將資源(ip以及程序服務等資源)從一臺已經故障的計算機快速轉移到另一臺正常運轉的機器上繼續提供服務,一般稱之為高可用服務。參考文檔:https://www.cnblogs.com/minseo/p/13322635.html
HAProxy、nginx、mysql router、lvs功能相近,實現負載均衡
HAProxy:7層調度。是一款提供高可用性、負載均衡以及基于TCP(第四層)和HTTP(第七層)應用的代理軟件,zCloud使用HAproxy四層代理為ProxySQL提供高可用中間件代理。
?? ??? ?HAProxy 已不再更新,官網已經推薦使用 mysql router
nginx:7層調度。是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器;同時也是一個IMAP、POP3、SMTP代理服務器;
?? ? ?nginx可以作為一個HTTP服務器進行網站的發布處理,另外nginx可以作為反向代理進行負載均衡的實現。
LVS(ipvsadm):4層調度。Linux Virtual Server 的簡稱,通過 LVS 達到的負載均衡技術和 Linux 操作系統實現一個高性能高可用的 Linux 服務器集群,它具有良好的可靠性、可擴展性和可操作性。從而以低廉的成本實現最優的性能。LVS 是一個實現負載均衡集群的開源軟件項目,LVS架構從邏輯上可分為調度層、Server集群層和共享存儲。
Tomcat:服務器是一個免費的開放源代碼的Web 應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。
?? ? 對于一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 服務器,可利用它響應HTML(標準通用標記語言下的一個應用)頁面的訪問請求。
?? ? 實際上Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,所以當你運行tomcat 時,它實際上作為一個與Apache 獨立的進程單獨運行的。
?? ??
mysql與mysql是否有db link導入導出數據? ? 有,首先再my.cnf開啟 federated ?必須是小寫。然后再建表時加上ENGINE =FEDERATED CONNECTION='mysql://root:yehaver@192.168.100.101:3306/test/sys_myfirst'
mysql> CREATE TABLE `sys_myfirst` (
? ? -> ? `id` varchar(36) NOT NULL,
? ? -> ? `name` varchar(100) DEFAULT NULL,
? ? -> ? `memo` varchar(255) DEFAULT NULL
? ? -> ) ENGINE=InnoDB AUTO_INCREMENT=9 ENGINE =FEDERATED CONNECTION='mysql://root:yehaver@192.168.100.101:3306/test/sys_myfirst';
Query OK, 0 rows affected (0.64 sec)
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.11 sec)
總結
以上是生活随笔為你收集整理的mysql-cluster安装与配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爬取《全职高手之巅峰荣耀》的豆瓣影评,分
- 下一篇: 动易百度快照劫持,百度快照被劫持了怎么办