成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

MGR+ProxySql集群搭建方案

IT那活兒 / 2757人閱讀
MGR+ProxySql集群搭建方案


背景描述



此MGR+ProxySql MySql集群架構(gòu),目的是為了解決目前DMS系統(tǒng)數(shù)據(jù)庫(kù)單機(jī)環(huán)境對(duì)高并發(fā)支撐不足,數(shù)據(jù)庫(kù)經(jīng)常出現(xiàn)阻塞,導(dǎo)致系統(tǒng)卡頓的問(wèn)題。此次搭建可選擇在凌晨業(yè)務(wù)不繁忙時(shí)間,預(yù)計(jì)搭建時(shí)間3個(gè)小時(shí)。



環(huán)境準(zhǔn)備


軟件簡(jiǎn)介

MySQL是目前較流行的關(guān)系型開(kāi)源數(shù)據(jù)庫(kù)之一,支持完整的事務(wù)支持,支持標(biāo)準(zhǔn)的SQL以及支持跨平臺(tái)部署。Proxysql是基于MySQL的一款開(kāi)源的中間件的產(chǎn)品,是一個(gè)靈活的MySQL代理層,可以實(shí)現(xiàn)讀寫(xiě)分離,支持Query路由功能,支持動(dòng)態(tài)指定某個(gè)SQL進(jìn)行緩存,支持動(dòng)態(tài)加載(無(wú)需重啟ProxySQL服務(wù)),故障切換和SQL過(guò)濾功能。 


軟件版本

序號(hào)

軟件

版本

2

MySQL

5.7.28

3

ProyxSql

2.0.12


硬件環(huán)境

本次搭建共需要在生產(chǎn)環(huán)境新增主機(jī)2臺(tái),以下為需要的具體配置信息:

序號(hào)

操作系統(tǒng)

CPU

內(nèi)存

磁盤

部署軟件

數(shù)量

備注

1

CentOS7.4

32c

128G

1T

ProxySql

1臺(tái)


2

CentOS7.4

32c

128G

2T

MySQL

1臺(tái)



端口

需要在其中proxysql主機(jī)開(kāi)放6032、6033端口供應(yīng)用程序訪問(wèn)及監(jiān)控使用。


環(huán)境檢查

環(huán)境檢查,主要檢查硬件信息是否符合申請(qǐng)的指標(biāo)以及軟件版本信息

主機(jī)

CPU

磁盤

內(nèi)存

網(wǎng)絡(luò)

軟件版本

NODE

滿足

滿足

滿足

滿足

滿足

 



部署架構(gòu)



MGR集群實(shí)現(xiàn)數(shù)據(jù)庫(kù)復(fù)制功能及高可用。Proxysql對(duì)應(yīng)用程序提供訪問(wèn),對(duì)MGR集群進(jìn)行讀寫(xiě)分離,集群狀態(tài)檢測(cè),實(shí)現(xiàn)故障切換。


MGR單主模式搭建


主從搭建

先將新增的一臺(tái)服務(wù)器搭建MySQL數(shù)據(jù)庫(kù),將DMS主數(shù)據(jù)庫(kù)的備份數(shù)據(jù)傳送到服務(wù)器上,搭建主從使目前3臺(tái)數(shù)據(jù)庫(kù)的數(shù)據(jù)保持一致,為搭建MGR作準(zhǔn)備。


集群搭建

修改my.cnf配置文件





156:

server-id = 156  #以服務(wù)器ip設(shè)置,

log-bin = /usr/local/mysql/log/mysql-bin.log  --開(kāi)啟binlog

###MGR setting####

master_info_repository=TABLE

relay_log_info_repository=TABLE

slave_preserve_commit_order=ON

binlog_checksum=NONE

transaction_write_set_extraction=XXHASH64

loose-group_replication_group_name=0f4ecd37-afa1-11ea-80a8-00505683effffd

loose-group_replication_start_on_boot=off

loose-group_replication_local_address="11.11.11.156:33061"

loose-group_replication_group_seeds="11.11.11.156:33061,11.11.11.157:33062,11.11.11.244:33063"

loose-group_replication_ip_whitelist="11.11.11.156,11.11.11.157,11.11.11.244"

loose-group_replication_bootstrap_group= off

loose-group_replication_single_primary_mode=true

loose-group_replication_enforce_update_everywhere_checks=false

 

157:

server-id = 157  #以服務(wù)器ip設(shè)置,

log-bin = /usr/local/mysql/log/mysql-bin.log  --開(kāi)啟binlog

###MGR setting####

master_info_repository=TABLE

relay_log_info_repository=TABLE

slave_preserve_commit_order=ON

binlog_checksum=NONE

transaction_write_set_extraction=XXHASH64

loose-group_replication_group_name=0f4ecd37-afa1-11ea-80a8-00505683effffd

loose-group_replication_start_on_boot=off

loose-group_replication_local_address="11.11.11.157:33062"

loose-group_replication_group_seeds="11.11.11.156:33061,11.11.11.157:33062,11.11.11.244:33063"

loose-group_replication_ip_whitelist="11.11.11.156,11.11.11.157,11.11.11.244"

loose-group_replication_bootstrap_group= off

loose-group_replication_single_primary_mode=true

loose-group_replication_enforce_update_everywhere_checks=false

 

244:

server-id = 244  #以服務(wù)器ip設(shè)置,

log-bin = /usr/local/mysql/log/mysql-bin.log

server-id = 156  #以服務(wù)器ip設(shè)置,

log-bin = /usr/local/mysql/log/mysql-bin.log  --開(kāi)啟binlog

###MGR setting####

master_info_repository=TABLE

relay_log_info_repository=TABLE

slave_preserve_commit_order=ON

binlog_checksum=NONE

transaction_write_set_extraction=XXHASH64

loose-group_replication_group_name=0f4ecd37-afa1-11ea-80a8-00505683effffd

loose-group_replication_start_on_boot=off

loose-group_replication_local_address="11.11.11.156:33061"

loose-group_replication_group_seeds="11.11.11.156:33061,11.11.11.157:33062,11.11.11.244:33063"

loose-group_replication_ip_whitelist="11.11.11.156,11.11.11.157,11.11.11.244"

loose-group_replication_bootstrap_group= off

loose-group_replication_single_primary_mode=true

loose-group_replication_enforce_update_everywhere_checks=false

向上滑動(dòng)查看更多內(nèi)容


修改主機(jī)名

hostnamectl set-hostname mgr_node1

hostnamectl set-hostname mgr_node2

hostnamectl set-hostname mgr_node3

hostnamectl set-hostname proxysql


修改hosts文件

11.11.11.156 mgr_node1

11.11.11.157 mgr_node2

11.11.11.244 mgr_node3


開(kāi)啟MGR

主節(jié)點(diǎn):

CHANGE MASTER TO MASTER_USER=repl, MASTER_PASSWORD=Rest!101 FORCHANNEL group_replication_recovery;

installplugin group_replication soname group_replication.so;  --安裝gr插件


#設(shè)置group_replication_bootstrap_group為ON是為了標(biāo)示以后加入集群的服務(wù)器以這臺(tái)服務(wù)器為基準(zhǔn),以后加入的就不需要設(shè)置。

setglobal group_replication_bootstrap_group=on;


開(kāi)啟組復(fù)制

startgroup_replication;

setglobal group_replication_bootstrap_group=off;


節(jié)點(diǎn)1:


CHANGE MASTER TO MASTER_USER=repl, MASTER_PASSWORD=Rest!101 FORCHANNEL group_replication_recovery;

installplugin group_replication soname group_replication.so;

setglobal group_replication_allow_local_disjoint_gtids_join=ON;

startgroup_replication;


節(jié)點(diǎn)2:

CHANGE MASTER TO MASTER_USER=repl, MASTER_PASSWORD=Rest!101 FORCHANNEL group_replication_recovery;

installplugin group_replication soname group_replication.so;

setglobal group_replication_allow_local_disjoint_gtids_join=ON;

startgroup_replication;


查看是否搭建成功

#查詢組成員

select* from performance_schema.replication_group_members;


+---------------------------+--------------------------------------+-------------+-------------+--------------+

|CHANNEL_NAME              | MEMBER_ID                            |MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |

+---------------------------+--------------------------------------+-------------+-------------+--------------+

|group_replication_applier | 38ed8610-aca0-11ea-8482-00505683effffd |mgr_node1   |        3306 | ONLINE       |

|group_replication_applier | 9d5c531c-b075-11ea-9d27-005056839787 |mgr_node2   |        3306 | ONLINE       |

|group_replication_applier | dc4bd6bb-b076-11ea-96f6-005056835c02 |mgr_node3   |        3306 | ONLINE       |

+---------------------------+--------------------------------------+-------------+-------------+--------------+


#查詢主節(jié)點(diǎn)


selectvariable_value from performance_schema.global_status wherevariable_name=group_replication_primary_member;


+--------------------------------------+

| variable_value                       |

+--------------------------------------+

| 38ed8610-aca0-11ea-8482-00505683effffd |

+--------------------------------------+




    ProxySql讀寫(xiě)分離搭建及驗(yàn)證



在mgr集群上創(chuàng)建proxysql所需的賬號(hào)

#proxysql的監(jiān)控賬戶

createuser monitor@% identified by Monitor@123;

grantall privileges on *.* to monitor@% with grant option;

#proxysql的對(duì)外訪問(wèn)賬戶

createuser proxysql@% identified by Proxysql@123;

grantall privileges on *.* to proxysql@% with grant option;


搭建yum環(huán)境,安裝proxysql軟件

搭建yum源

cat<

[proxysql_repo]

name=ProxySQL YUM repository

baseurl=http://repo.proxysql.com/ProxySQL/proxysql-2.0.x/centos/$releasever

gpgcheck=1

gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key

EOF


安裝依賴

yum-y install perl.x86_64

yuminstall -y libaio.x86_64

yum-y install net-tools.x86_64

yuminstall perl-DBD-MySQL -y


安裝Proxysql

Yuminstall -y proxysql


啟動(dòng)proxySql

systemctlstart proxysql

netstat-anlp | grep proxysql

6032是ProxySQL的管理端口號(hào),6033是對(duì)外服務(wù)的端口號(hào)

ProxySQL的用戶名和密碼都是默認(rèn)的admin


配置proxySql:配置訪問(wèn)賬號(hào)及監(jiān)控監(jiān)控,在mgr主節(jié)點(diǎn)執(zhí)行監(jiān)控腳本。

管理員登錄ProxySQL

/usr/local/mysql/bin/mysql-uadmin -padmin -h 127.0.0.1 -P 6032


#配置監(jiān)控賬號(hào)

setmysql-monitor_username=monitor;

setmysql-monitor_password=Monitor@123;


#配置默認(rèn)組信息

insertintomysql_group_replication_hostgroups(writer_hostgroup,backup_writer_hostgroup,reader_hostgroup,offline_hostgroup,active,writer_is_also_reader)values(10,20,30,40,1,1);


#配置用戶(主要是添加程序端的這個(gè)用戶,也就是run,將其設(shè)置到寫(xiě)組10里面)

insertinto mysql_users(username,password,default_hostgroup)values(proxysql,Proxysql@123,10);


主節(jié)點(diǎn)定義為寫(xiě)組10,從節(jié)點(diǎn)定義為只讀組30

insertintomysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment)values (10,10.2.159.35,3306,1,3000,10,mgr_node1);

insertintomysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment)values (30,10.2.159.36,3306,2,3000,10,mgr_node2);

insertintomysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment)values (30,10.2.159.46,3306,2,3000,10,mgr_node3);

insertintomysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment)values (30,10.2.159.35,3306,1,3000,10,mgr_node1);


規(guī)劃讀寫(xiě)組,添加節(jié)點(diǎn)設(shè)置讀寫(xiě)分離規(guī)則,查看節(jié)點(diǎn)狀態(tài)。

#配置讀寫(xiě)分離參數(shù)

insertintomysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(1,1,^SELECT.*FORUPDATE$,10,1);

insertintomysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(2,1,^SELECT,30,1);


save使內(nèi)存數(shù)據(jù)永久存儲(chǔ)到磁盤,load使內(nèi)存數(shù)據(jù)加載到runtime生效:

savemysql users to disk;

savemysql servers to disk;

savemysql query rules to disk;

savemysql variables to disk;

saveadmin variables to disk;

loadmysql users to runtime;

loadmysql servers to runtime;

loadmysql query rules to runtime;

loadmysql variables to runtime;

loadadmin variables to runtime;


在MGR主節(jié)點(diǎn)執(zhí)行監(jiān)控腳本





USEsys;

DELIMITER$$


CREATEFUNCTION IFZERO(a INT, b INT)

RETURNSINT

DETERMINISTIC

RETURNIF(a = 0, b, a)$$


CREATEFUNCTION LOCATE2(needle TEXT(10000), haystack TEXT(10000), offsetINT)

RETURNSINT

DETERMINISTIC

RETURNIFZERO(LOCATE(needle, haystack, offset), LENGTH(haystack) + 1)$$


CREATEFUNCTION GTID_NORMALIZE(g TEXT(10000))

RETURNSTEXT(10000)

DETERMINISTIC

RETURNGTID_SUBTRACT(g, )$$


CREATEFUNCTION GTID_COUNT(gtid_set TEXT(10000))

RETURNSINT

DETERMINISTIC

BEGIN

DECLAREresult BIGINT DEFAULT 0;

DECLAREcolon_pos INT;

DECLAREnext_dash_pos INT;

DECLAREnext_colon_pos INT;

DECLAREnext_comma_pos INT;

SETgtid_set = GTID_NORMALIZE(gtid_set);

SETcolon_pos = LOCATE2(:, gtid_set, 1);

WHILEcolon_pos != LENGTH(gtid_set) + 1 DO

SETnext_dash_pos = LOCATE2(-, gtid_set, colon_pos + 1);

SETnext_colon_pos = LOCATE2(:, gtid_set, colon_pos + 1);

SETnext_comma_pos = LOCATE2(,, gtid_set, colon_pos + 1);

IFnext_dash_pos < next_colon_pos AND next_dash_pos

SETresult = result +

SUBSTR(gtid_set,next_dash_pos + 1,

LEAST(next_colon_pos,next_comma_pos) - (next_dash_pos + 1)) -

SUBSTR(gtid_set,colon_pos + 1, next_dash_pos - (colon_pos + 1)) + 1;

ELSE

SETresult = result + 1;

ENDIF;

SETcolon_pos = next_colon_pos;

ENDWHILE;

RETURNresult;

END$$


CREATEFUNCTION gr_applier_queue_length()

RETURNSINT

DETERMINISTIC

BEGIN

RETURN(SELECT sys.gtid_count( GTID_SUBTRACT( (SELECT

Received_transaction_setFROM performance_schema.replication_connection_status

WHEREChannel_name = group_replication_applier ), (SELECT

@@global.GTID_EXECUTED))));

END$$


CREATEFUNCTION gr_member_in_primary_partition()

RETURNSVARCHAR(3)

DETERMINISTIC

BEGIN

RETURN(SELECT IF( MEMBER_STATE=ONLINE AND ((SELECT COUNT(*) FROM

performance_schema.replication_group_membersWHERE MEMBER_STATE != ONLINE) >=

((SELECTCOUNT(*) FROM performance_schema.replication_group_members)/2) = 0),

YES,NO ) FROM performance_schema.replication_group_members JOIN

performance_schema.replication_group_member_statsUSING(member_id));

END$$


CREATEVIEW gr_member_routing_candidate_status AS SELECT

sys.gr_member_in_primary_partition()as viable_candidate,

IF((SELECT (SELECT GROUP_CONCAT(variable_value) FROM

performance_schema.global_variablesWHERE variable_name IN (read_only,

super_read_only))!= OFF,OFF), YES, NO) as read_only,

sys.gr_applier_queue_length()as transactions_behind, Count_Transactions_in_queue astransactions_to_cert fromperformance_schema.replication_group_member_stats;$$

DELIMITER;



查看各節(jié)點(diǎn)狀態(tài)

SELECT* FROM sys.gr_member_routing_candidate_status;

selecthostname,port,viable_candidate,read_only,transactions_behind,errorfrom mysql_server_group_replication_log order by time_start_us desclimit 6;

SELECT* FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESCLIMIT 10 ;

SELECT* FROM monitor.mysql_server_ping_log ORDER BY time_start_us DESCLIMIT 10;


在應(yīng)用端驗(yàn)證讀寫(xiě)分離是否可用;驗(yàn)證mgr故障轉(zhuǎn)移是否可用

測(cè)試讀負(fù)載均衡

fori in `seq 1 10`; do /usr/local/mysql/bin/mysql -uproxysql-pProxysql@123 -h127.0.0.1 -P6033 -e "select * fromperformance_schema.global_variables where variable_name=server_id;"; done  | grep server

fori in `seq 1 10`; do /usr/local/mysql/bin/mysql -uproxysql-pProxysql@123 -h10.2.159.47 -P6033 -e "select * fromperformance_schema.global_variables where variable_name=server_id;"; done  | grep server


驗(yàn)證系統(tǒng)各功能是否正常




回退



本次集群搭建中若出現(xiàn)問(wèn)題,或搭建成功后系統(tǒng)功能不可用,可采用應(yīng)用端保持連接原始數(shù)據(jù)庫(kù),或切換回原始數(shù)據(jù)庫(kù)鏈接,以此確保架構(gòu)改造失敗的回退安全性。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/130200.html

相關(guān)文章

  • 基于開(kāi)源應(yīng)用快速構(gòu)建HTAP系統(tǒng)

    摘要:利用快速構(gòu)建系統(tǒng)。構(gòu)建系統(tǒng)和的安裝本文不再贅述,直接開(kāi)始動(dòng)手構(gòu)建系統(tǒng)。分別為和,用于讀寫(xiě)組,用于只讀組。最后配置的監(jiān)控服務(wù)可選,非必須至此,一個(gè)全部基于開(kāi)源應(yīng)用的簡(jiǎn)易系統(tǒng)就構(gòu)建好了。利用ProxySQL、MySQL、ClickHouse快速構(gòu)建HTAP系統(tǒng)。1. 關(guān)于ClickHouse企業(yè)里隨著數(shù)據(jù)量的增加,以及日趨復(fù)雜的分析性業(yè)務(wù)需求,主要適用于OLTP場(chǎng)景的MySQL壓力越來(lái)越大。多年...

    Tecode 評(píng)論0 收藏0
  • ProxySQL的基于sql指紋的阻斷

    摘要:我這里的實(shí)驗(yàn)環(huán)境單機(jī)單主,已經(jīng)配置好了讀寫(xiě)分離策略。這些都不是本文的重點(diǎn),就一帶而過(guò)吧。我下面只貼基于指紋的阻斷的配置。我這里的實(shí)驗(yàn)環(huán)境:?jiǎn)螜C(jī)proxysql+mgr單主,已經(jīng)配置好了讀寫(xiě)分離策略。這些都不是本文的重點(diǎn),就一帶而過(guò)吧。我下面只貼基于sql指紋的阻斷的配置。我們這里先查看下當(dāng)前proxysql的 query rule表nonerule_idactivedigestmatch_p...

    番茄西紅柿 評(píng)論0 收藏2637
  • ProxySQL的基于sql指紋的阻斷

    摘要:我這里的實(shí)驗(yàn)環(huán)境單機(jī)單主,已經(jīng)配置好了讀寫(xiě)分離策略。這些都不是本文的重點(diǎn),就一帶而過(guò)吧。我下面只貼基于指紋的阻斷的配置。我這里的實(shí)驗(yàn)環(huán)境:?jiǎn)螜C(jī)proxysql+mgr單主,已經(jīng)配置好了讀寫(xiě)分離策略。這些都不是本文的重點(diǎn),就一帶而過(guò)吧。我下面只貼基于sql指紋的阻斷的配置。我們這里先查看下當(dāng)前proxysql的 query rule表nonerule_idactivedigestmatch_p...

    番茄西紅柿 評(píng)論0 收藏2637
  • UCloud MySQL云數(shù)據(jù)庫(kù)讀寫(xiě)分離

    摘要:讀寫(xiě)分離中間件具有獨(dú)立的。變量語(yǔ)句將被廣播考慮到節(jié)點(diǎn)間數(shù)據(jù)一致性問(wèn)題,只會(huì)分發(fā)到主節(jié)點(diǎn)。節(jié)點(diǎn)健康檢查,提升數(shù)據(jù)庫(kù)系統(tǒng)可用性。UCloud MySQL云數(shù)據(jù)庫(kù)讀寫(xiě)分離 背景 數(shù)據(jù)顯示,關(guān)系型數(shù)據(jù)庫(kù)在OLTP業(yè)務(wù)下96.87%都在等待讀I/O,而處理器計(jì)算僅僅占了5.3%,這說(shuō)明要提高數(shù)據(jù)庫(kù)的QPS性能,關(guān)鍵的一點(diǎn)是提高系統(tǒng)的IO能力。 另一個(gè)數(shù)據(jù)表明, 大多數(shù)業(yè)務(wù)對(duì)數(shù)據(jù)庫(kù)的訪...

    joywek 評(píng)論0 收藏0
  • Ceph v12.2 Luminous基于ubuntu16.04集群部署

    摘要:第一次接觸集群,感謝官方的指導(dǎo)文檔和許多網(wǎng)友提供的教程,糊糊涂涂算是把集群部署起來(lái)了。應(yīng)該為每個(gè)運(yùn)行的機(jī)器添加一個(gè),否則集群處于狀態(tài)。至此的集群搭建算是完成了,下一步會(huì)進(jìn)行塊設(shè)備的搭建。參考分布式存儲(chǔ)部署手冊(cè)如何在中安裝存儲(chǔ)集群部署版 第一次接觸ceph集群,感謝官方的指導(dǎo)文檔和許多網(wǎng)友提供的教程,糊糊涂涂算是把集群部署起來(lái)了。由于Luminous12.2剛發(fā)布不久,部署起來(lái)跟舊版本還...

    MiracleWong 評(píng)論0 收藏0
  • MySQL集群MGR升級(jí)實(shí)施測(cè)試方案

    MySQL集群MGR升級(jí)實(shí)施測(cè)試方案 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; ...

    IT那活兒 評(píng)論0 收藏1318

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<