1,?MySQL群集需要有一組計(jì)算機(jī),每臺計(jì)算機(jī)的角色可能是不一樣的。MySQL群集中有三種節(jié)點(diǎn):管理節(jié)點(diǎn)、數(shù)據(jù)節(jié)點(diǎn)和SQL節(jié)點(diǎn)。群集中的某計(jì)算機(jī)可能是某一種節(jié)點(diǎn),也可能是兩種或三種節(jié)點(diǎn)的集合。這三種節(jié)點(diǎn)只是在邏輯上的劃分,所以它們不一定和物理計(jì)算機(jī)是一一對應(yīng)的關(guān)系。
公司主營業(yè)務(wù):成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出孝義免費(fèi)做網(wǎng)站回饋大家。
2,?管理節(jié)點(diǎn)(也可以稱管理服務(wù)器)主要負(fù)責(zé)管理數(shù)據(jù)節(jié)點(diǎn)和SQL節(jié)點(diǎn),還有群集配置文件和群集日志文件。它監(jiān)控其他節(jié)點(diǎn)的工作狀態(tài),能夠啟動(dòng)、關(guān)閉或重啟某個(gè)節(jié)點(diǎn)。其他節(jié)點(diǎn)從管理節(jié)點(diǎn)檢索配置數(shù)據(jù),當(dāng)數(shù)據(jù)節(jié)點(diǎn)有新事件時(shí)就把事件信息發(fā)送給管理節(jié)點(diǎn)并寫入群集日志。
3,?數(shù)據(jù)節(jié)點(diǎn)用于存儲數(shù)據(jù)。SQL節(jié)點(diǎn)跟一般的MySQL服務(wù)器是一樣的,可以通過它進(jìn)行SQL操作。
下圖中畫出了三種群集節(jié)點(diǎn)及應(yīng)用程序間的關(guān)系:
Asynchronous?Replication?Automatic failover
其原理是在一條異步復(fù)制通道上配置多個(gè)可用復(fù)制源,當(dāng)某個(gè)復(fù)制源不可用時(shí)(宕機(jī)、復(fù)制鏈路中斷),且 slave 的 IO 線程嘗試重連無效,自動(dòng)根據(jù)權(quán)重選擇新的源繼續(xù)同步。
準(zhǔn)備一個(gè) MGR 集群和單實(shí)例,模擬復(fù)制鏈路切換,當(dāng) primary 故障,slave 自動(dòng)切換到其他節(jié)點(diǎn)。dbdeployer?deploy?replication?--topology=group?8.0.22?--single-primarydbdeployer deploy single 8.0.22
2. 在從機(jī)上建立指向 MGR 主節(jié)點(diǎn)的復(fù)制通道,
change master to master_user='msandbox',master_password='msandbox', master_host='127.0.0.1',master_auto_position=1,source_connection_auto_failover=1,master_port=23223,master_retry_count=6,master_connect_retry=10 for channel 'mgr-single';
在 master_retry_count 和 master_connect_retry 的設(shè)置上要考慮嘗試重連多久才切換復(fù)制源。
3. 在從機(jī)上配置 asynchronous connection auto failover
配置 asynchronous connection auto failover 的兩個(gè)函數(shù):
asynchronous_connection_failover_add_source(channel-name,host,port,network-namespace,weight)
asynchronous_connection_failover_delete_source(channel-name,host,port,network-namespace)
權(quán)重值大的被優(yōu)先級選擇,可以配合MGR的選舉權(quán)重配置 asynchronous_connection_failover 的權(quán)重。當(dāng) MGR 節(jié)點(diǎn)切換,異步復(fù)制也能切換到新的主節(jié)點(diǎn)。
SELECT asynchronous_connection_failover_add_source('mgr-single','127.0.0.1',23223,null,100); SELECT asynchronous_connection_failover_add_source('mgr-single','127.0.0.1',23224,null,80); SELECT asynchronous_connection_failover_add_source('mgr-single','127.0.0.1',23225,null,50);start?slave?for?channel?'mgr-single';
4. 檢查異步復(fù)制通道是否啟用 failover。
mysql SELECT CHANNEL_NAME, SOURCE_CONNECTION_AUTO_FAILOVER FROM performance_schema.replication_connection_configuration; +--------------+---------------------------------+| CHANNEL_NAME | SOURCE_CONNECTION_AUTO_FAILOVER |+--------------+---------------------------------+|?mgr-single?? |??1??????????????????????????????|+--------------+---------------------------------+1 row in set (0.01 sec
5. 把 MGR 的 primary 節(jié)點(diǎn) kill 掉,這個(gè)從節(jié)點(diǎn)會在嘗試幾輪重連失敗后自動(dòng)切換到次權(quán)重的復(fù)制源,其日志中會輸出切換信息。
注意:當(dāng)主節(jié)點(diǎn)故障,一旦復(fù)制鏈路成功 failover 后,在新的復(fù)制鏈路沒有故障時(shí),如果原主節(jié)點(diǎn)恢復(fù),是不會回切的。如果當(dāng)前復(fù)制鏈路發(fā)生故障,會再次選擇權(quán)重高的進(jìn)行切換
一個(gè)最簡單的MySQL集群通常是一主一從的架構(gòu)(Master-Slave)
MySQL自帶有主從同步的功能
主要步驟如下:
在主庫上創(chuàng)建一個(gè)同步賬號
GRANT SELECT,REPLICATION SLAVE ON *.* TO user@'%' IDENTIFIED BY'123456'
在從庫上設(shè)置主庫
change master to master_host='主庫IP',master_port=主庫端口,master_user='user',master_password='123456',master_auto_position=1;(mysql5.6以上)
change master to master_host='主庫IP',master_port=主庫端口,master_user='user',master_password='123456',MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0,
在從庫上啟動(dòng)同步線程
start slave;
復(fù)雜的集群通常通過第三方軟件,比如剛剛GA的MySQL官方高可用MGR
本文將演示如何在 KubeSphere[1] 上部署 RadonDB MySQL on Kubernetes 2.1.2 ,快速實(shí)現(xiàn)高可用的 MySQL on K8s。
若已在 KubeSphere 部署過歷史版本 Operator,可以選擇如下方式更新到最新版本。
可任選一個(gè) RadonDB MySQL 配置示例[5] 部署,或自定義配置部署。
以 mysql_v1alpha1_mysqlcluster.yaml 模版為例,創(chuàng)建一個(gè) RadonDB MySQL 集群。
注意
未指定項(xiàng)目時(shí),集群將被默認(rèn)安裝在 kubesphere-controls-system 項(xiàng)目中。若需指定項(xiàng)目,安裝命令需添加 --namespace=project_name 。
預(yù)期結(jié)果
預(yù)期結(jié)果
在 demo-project 項(xiàng)目中,查看 RadonDB MySQL 集群狀態(tài)。
至此,完成在 KubeSphere 中部署 RadonDB MySQL 集群。
[1]:KubeSphere:
[2]:OpenPitrix:
[3]:創(chuàng)建操作:
[4]:項(xiàng)目網(wǎng)關(guān):
[5]:配置示例:
您好,很高興為您解答。
一,先確認(rèn)Cluster的包已經(jīng)正確安裝
[root@cluster-one ~]# rpm -aq|grep -i mysql
MySQL-Cluster-client-gpl-7.2.10-1.el6.x86_64
MySQL-Cluster-server-gpl-7.2.10-1.el6.x86_64
MySQL-Cluster-shared-compat-gpl-7.2.10-1.el6.x86_64
MySQL-Cluster-devel-gpl-7.2.10-1.el6.x86_64
二,創(chuàng)建如下幾個(gè)配置文件,下面啟動(dòng)時(shí)要用到
[root@cluster-one mysqlData]# more config.ini
[NDBD DEFAULT]
NoOfReplicas=2
[TCP DEFAULT]
#portnumber=3388
[NDB_MGMD]
NodeId = 1
hostname=localhost
datadir=/mysqlData/clustermgmd-data/
[NDBD]
NodeId = 2
hostname=localhost
datadir=/mysqlData/clusterndb1-data/
[NDBD]
NodeId = 3
hostname=localhost
datadir=/mysqlData/clusterndb2-data/
[MYSQLD]
NodeId = 4
hostname=localhost
[MYSQLD]
NodeId = 5
hostname=localhost
[MYSQLD]
[root@cluster-one mysqlData]# more my1.cnf
[mysqld]
ndbcluster
socket=/data/socket/n1.sock
pid-file=/data/socket/n1.pid
log-error = /data/log/n1_err.log
port = 3501
[mysql_cluster]
ndb-connectstring=localhost
[root@cluster-one mysqlData]# more my2.cnf
[mysqld]
ndbcluster
socket=/data/socket/n2.sock
pid-file=/data/socket/n2.pid
log-error = /data/log/n2_err.log
port = 3502
[mysql_cluster]
ndb-connectstring=localhost
[root@cluster-one mysqlData]# more /etc/my.cnf
[mysqld]
ndbcluster
socket=/var/lib/mysql/mysql.sock
pid-file=/data/socket/mysqld.pid
datadir=/mysqlData/clusterapi
log-bin=mysql-bin
log-bin-index=mysql-bin.index
binlog-format=ROW
server-id=1
port = 3401
[mysql_cluster]
ndb-connectstring=localhost
[client]
socket=/var/lib/mysql/mysql.sock
三,分別啟動(dòng)所有結(jié)點(diǎn) (需要注意的是,如果是第一次啟動(dòng),請?jiān)? 管理結(jié)點(diǎn)/數(shù)據(jù)結(jié)點(diǎn) 的啟動(dòng)參數(shù)后面加上 --initial)
啟動(dòng)結(jié)點(diǎn)之前,請確保,上面配置文件指定的目錄都存在。
不存在,請自行先創(chuàng)建一個(gè),或是你修改配置文件指定其它目錄。目錄有:
/mysqlData/clustermgmd-data/
/mysqlData/clusterndb1-data/
/mysqlData/clusterndb2-data/
/mysqlData/clusterapi
/data/socket/mysqld.pid
/data/socket/
/data/log/
管理結(jié)點(diǎn)
[root@cluster-one ~]# ndb_mgmd -f /mysqlData/config.ini
MySQL Cluster Management Server mysql-5.5.29 ndb-7.2.10
數(shù)據(jù)結(jié)點(diǎn)1
[root@cluster-one ~]# ndbd --defaults-file=/mysqlData/my1.cnf
2013-12-20 02:35:42 [ndbd] INFO -- Angel connected to 'localhost:1186'
2013-12-20 02:35:42 [ndbd] INFO -- Angel allocated nodeid: 2
數(shù)據(jù)結(jié)點(diǎn)2
[root@cluster-one ~]# ndbd --defaults-file=/mysqlData/my2.cnf
2013-12-20 02:35:46 [ndbd] INFO -- Angel connected to 'localhost:1186'
2013-12-20 02:35:46 [ndbd] INFO -- Angel allocated nodeid: 3
查詢結(jié)點(diǎn),如果沒有/etc/init.d/mysql這個(gè)文件,可以 把 “
/usr/share/mysql/mysql.server” 拷貝到/etc/init.d目錄下,并改名為mysql
[root@cluster-one ~]# /etc/init.d/mysql start
Starting MySQL
如若滿意,請點(diǎn)擊右側(cè)【采納答案】,如若還有問題,請點(diǎn)擊【追問】
希望我的回答對您有所幫助,望采納!
~ O(∩_∩)O~