日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

go连接mysql集群_什么是MySQL集群-Go语言中文社区

發布時間:2023/12/20 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go连接mysql集群_什么是MySQL集群-Go语言中文社区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是MySQL集群

MySQL集群是一個無共享的(shared-nothing)、分布式節點架構的存儲方案,其目的是提供容錯性和高性能。

數據更新使用讀已提交隔離級別(read-committedisolation)來保證所有節點數據的一致性,使用兩階段提交機制(two-phasedcommit)保證所有節點都有相同的數據(如果任何一個寫操作失敗,則更新失敗)。

無共享的對等節點使得某臺服務器上的更新操作在其他服務器上立即可見。傳播更新使用一種復雜的通信機制,這一機制專用來提供跨網絡的高吞吐量。

通過多個MySQL服務器分配負載,從而最大程序地達到高性能,通過在不同位置存儲數據保證高可用性和冗余。

二、架構圖

三、如何存儲數據

1.Mysqlcluster數據節點組內主從同步采用的是同步復制,來保證組內節點數據的一致性。一般通過兩階段提交 協議來實現,一般工作過程如下:

a)Master執行提交語句時,事務被發送到slave,slave開始準備事務的提交。

b)每個slave都要準備事務,然后向master發送OK(或ABORT)消息,表明事務已經準備好(或者無法準備該事務)。

c)Master等待所有Slave發送OK或ABORT消息

如果Master收到所有 Slave的OK消息,它就會向所有Slave發送提交消息,告訴Slave提交該事務;

如果Master收到來自任何一個Slave的ABORT消息,它就向所有 Slave發送ABORT消息,告訴Slave去中止事務。

e)每個Slave等待來自Master的OK或ABORT消息。

如果Slave收到提交請求,它們就會提交事務,并向Master發送事務已提交 的確認;

如果Slave收到取消請求,它們就會撤銷所有改變并釋放所占有的資源,從而中止事務,然后向Masterv送事務已中止的確認。

f) 當Master收到來自所有Slave的確認后,就會報告該事務被提交(或中止),然后繼續進行下一個事務處理。

由于同步復制一共需要4次消息傳遞,故mysql cluster的數據更新速度比單機mysql要慢。所以mysql cluster要求運行在千兆以上的局域網內,節點可以采用雙網卡,節點組之間采用直連方式。

疑問: 對cluster進行擴容增加數據節點組時會不 會導致數據更新速度降低?

答:不會,數據更新速度會變快。因為數據是分別處理,每個節點組所保存的數據是不一樣的,

也能減少鎖定。

2.Mysqlcluster將所有的索引列都保存在主存中,其他非索引列可以存儲在內存中或者通過建立表空間存儲到磁盤上。如果數據發生改變(insert,update,delete等),mysql 集群將發生改變的記錄寫入重做日志,然后通過檢查點定期將數據定入磁盤。由于重做日志是異步提交的,所以故障期間可能有少量事務丟失。為了減少事務丟失,mysql集群實現延遲寫入(默認延遲兩秒,可配置),這樣就可以在故障發生時完成檢查點寫入,而不會丟失最后一個檢查點。一般單個數據節點故障不會導致任何數據丟失,因為集群內部采用同步數據復制。

四、MySQL集群的橫向擴展

1.添加數據節點組來擴展寫操作,提高 cluster的存儲能力。支持在線擴容,先將新的節點加入到clsuter里,啟動后用

ALTER ONLINE TABLE table_name REORGANIZE PARTITION

命令進行數據遷移,把數據平均分配到數據節點上。

2.添加Slave僅僅擴展讀,而不能做到寫操作的橫向擴展。

整個系統的平均負載可以描述為:

AverageLoad=∑readload+ ∑writeload / ∑capacity

假設每個服務器每秒有10000的事務量,而Master每秒的寫負載為4000個事務,每秒的讀負載為6000,結果就是:

AverageLoad=6000+4000/10000=100%

現在,添加3個slave,每秒的事務量增加到40000。因為寫操作也會被復制,每個寫操作執行4次,這樣每個slave的寫負載就是每秒4000個事務。那么現在的平均負載為:

AverageLoad=6000+44000/ 410000=55%

五、MySQL集群的優缺點

優點:

a) 99.999%的高可用性

b)快速的自動失效切換

c)靈活的分布式體系結構,沒有單點故障

d)高吞吐量和低延遲

e)可擴展性強,支持在線擴容

缺點:

a)存在很多限制,比如:不支持外鍵

b)部署、管理、配置很復雜

c)占用磁盤空間大,內存大

d)備份和恢復不方便

e)重啟的時候,數據節點將數據load到內存需要很長時間

集群搭建實現步驟

集群 mysql cluster

高可用 負載均衡

集群成員:

====管理節點(MGM) 進程名 ndb_mgmd

====數據節點(Data Nodes) 進程名 ndbd

====SQL節點(Sql Nodes) 進程名 mysqld

拓撲:

192.168.1.3 管理節點 mgm

192.168.1.4 192.168.1.5 SQL節點 sql1 sql2

192.168.1.6 192.168.1.7 數據節點 data1 data2

配置:

所有節點操作

1.創建mysql用戶

[root@mgm ~]# useradd mysql

2.解壓軟件包

[root@mgm tmp]# tar xf mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64.tar.gz

3.將軟件包剪切并改名

[root@mgm tmp]# mv mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64 /usr/local/mysql-cluster

4.修改權限

[root@mgm tmp]# chown mysql.mysql /usr/local/mysql-cluster -R

管理節點:

[root@mgm tmp]# mkdir /usr/local/mysql-cluster/cluster-conf[root@mgm tmp]# vim /usr/local/mysql-cluster/cluster-conf/config.ini

[ndbd default]

NoOfReplicas=2

DataMemory=80M

IndexMemory=18M

[ndb_mgmd]

id=1

hostname=192.168.1.3

datadir=/usr/local/mysql-cluster/data

[ndbd]

id=2

hostname=192.168.1.6

datadir=/usr/local/mysql-cluster/ndbdata

[ndbd]

id=3

hostname=192.168.1.7

datadir=/usr/local/mysql-cluster/ndbdata

[mysqld]

id=4

hostname=192.168.1.4

[mysqld]

id=5

hostname=192.168.1.5

sql節點配置:

# vim /etc/my.cnf

[mysqld]

ndbcluster

ndb-connectstring=192.168.1.3

[mysql_cluster]

ndb-connectstring=192.168.1.3

data節點配置:

# mkdir /usr/local/mysql-cluster/ndbdata # vim /etc/my.cnf

[mysqld]

datadir=/usr/local/mysql-cluster/ndbdata

ndbcluster

ndb-connectstring=192.168.1.3

[mysql_cluster]

ndb-connectstring=192.168.1.3

初始化sql節點:

# cd /usr/local/mysql-cluster# ./scripts/mysql_install_db --user=mysql

啟動manager節點:(啟動前把mysqld服務關閉)

# cd /usr/local/mysql-cluster# ./bin/ndb_mgmd -f cluster-conf/config.ini

啟動數據節點:

# cd /usr/local/mysql-cluster# ./bin/ndbd

啟動sql節點:

# cd /usr/local/mysql-cluster# ./bin/mysqld_safe --user=mysql &

管理節點:

# ./bin/ndb_mgm -e show \檢查集群的狀態

總結

以上是生活随笔為你收集整理的go连接mysql集群_什么是MySQL集群-Go语言中文社区的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。