基于mgr組復(fù)制搭建mysql innodb cluster集群

一进副,前言

mysql 集群是mysqL官方自myql5.7以后推出來的完整的高可用性解決方案,集群是建立在mysql組復(fù)制技術(shù)上面的悔常,組復(fù)制是一種基于paxos

分布式一致性算法來實現(xiàn)數(shù)據(jù)的強一致性,也正因為是這種算法机打,才使得mysql集群能輕松的實現(xiàn)單點寫故障以及水平擴展讀能力,因此残邀,mysql

集群要求mysql實例至少需要3個皆辽,但是最多實例官方建議是9個,因為過多的實例會使得數(shù)據(jù)同步會增加網(wǎng)絡(luò)帶寬驱闷,從而降低數(shù)據(jù)同步的效率。

目前mysql組復(fù)制有兩種模式遗嗽,一種是single-primary(單主模式),一種是multiple-primaries(多主模式)痹换;在默認的單主模式下征字,

InnoDB集群只有一個讀-寫服務(wù)器實例——主實例娇豫。多個輔助服務(wù)器實例是主服務(wù)器的副本匙姜。如果主服務(wù)器失敗冯痢,則輔助服務(wù)器將自動提升

為主服務(wù)器角色。MySQL路由器檢測到這一點并將客戶端應(yīng)用程序轉(zhuǎn)發(fā)到新的主服務(wù)器浦楣。所以在接下來的配置中,本人將首先介紹組復(fù)制

的搭建振劳,只要組復(fù)制搭建成功椎组,mysql集群搭建將變得很簡單历恐。

二、mysql 組復(fù)制搭建,(多主模式弱贼、單主模式)

1蒸苇、首先準備三臺機器吮旅,IP地址分別是:192.168.0.112,192.168.0.113,192.168.0.130

2、安裝mysql鸟辅,本人使用的是5.7.23版本

2.1氛什、首先從官網(wǎng)下載文件mysql57-community-release-el7-11.noarch.rpm

2.2匪凉、安裝rpm庫,使用命令 yum -y localinstall mysql57-community-release-el7-11.noarch.rpm

2.3再层、安裝mysql實例堡纬,使用命令 yum -y install mysql-community-server

2.4、grep 'temporary password' /var/log/mysqld.log找到臨時root密碼蒿秦,然后service mysqld start啟動mysql服務(wù)

2.5、登錄mysql后執(zhí)行 set global validate_password_policy=0;set global validate_password_mixed_case_count=0;set global validate_password_number_count=3;set global validate_password_special_char_count=0;

set global validate_password_length=3;ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';修改root密碼棍鳖。然后在執(zhí)行select uuid();會得到一個uuid字符串,這個一定要記住渡处,后面配置組復(fù)制用到。

3医瘫、配置組復(fù)制必要的啟動參數(shù):

編輯/etc/my.cnf文件,加入如下配置

transaction-isolation=READ-COMMITTED (官方建議用這種隔離級別)

server_id = 1123306 (保證組內(nèi)唯一)

gtid_mode = ON

enforce_gtid_consistency = ON

master_info_repository = TABLE

relay_log_info_repository = TABLE

binlog_checksum = NONE

log_slave_updates = ON

log_bin = binlog

binlog_format= ROW

transaction_write_set_extraction = XXHASH64

loose-group_replication_group_name = '60d06502-add4-11e8-af31-000c29fc4619' (通過select uuid();得到的)

loose-group_replication_start_on_boot = off

loose-group_replication_local_address = '192.168.0.112:33061'

loose-group_replication_group_seeds ='192.168.0.112:33061,192.168.0.113:33062,192.168.0.130:33063'

loose-group_replication_bootstrap_group = off

loose-group_replication_single_primary_mode=off (單主模式不需要配置)

loose-group_replication_enforce_update_everywhere_checks=true (單主模式不需要配置)

配置完成后醇份,重啟mysql服務(wù)。service mysqld restart.

注:在這里有必要說明一下僚纷,所有組內(nèi)成員必須在/etc/hosts文件中配置ip 與 hostname的映射關(guān)系,因為組復(fù)制通訊是通過hostname來找到其他的成員機器怖竭,然后與之通訊的剩晴。

4侵状、安裝插件

install plugin group_replication soname 'group_replication.so';

5毅整、創(chuàng)建復(fù)制用戶趣兄,只需要在第一臺啟動集群的機器上創(chuàng)建就可以了悼嫉,后續(xù)加入集群的mysql服務(wù)會自動的通過這個賬號與組取得聯(lián)系艇潭,同時也會因為你在第一臺機器上面執(zhí)行過創(chuàng)建復(fù)制賬號留下的binlog日志戏蔑,

使得這個復(fù)制賬號同步到其他機器,這個過程可以通過在配置好重啟后執(zhí)行 show binlog events;查看到总棵。

CREATE USER 'repl'@'%' IDENTIFIED BY '123456';(當然這個密碼太簡單了鳍寂,如果不在需要加入組的機器上面設(shè)置降低mysql的密碼安全策略等級情龄,會使賬號創(chuàng)建失敗捍壤,最后組復(fù)制搭建失敗)

6、給創(chuàng)建的用戶賦權(quán)

grant replication slave on *.* to 'repl'@'192.168.0.%' identified by '123456';

flush privileges;

7鞍爱、啟動首個節(jié)點的MGR集群服務(wù)

change master to master_user='repl',master_password='123456' for channel 'group_replication_recovery';

8、初始化操作(只有首個節(jié)點需要這個步驟)

set global group_replication_bootstrap_group=ON;

9睹逃、啟動組復(fù)制服務(wù)

start group_replication;

10、啟動成功后關(guān)閉初始化

set global group_replication_bootstrap_group=off;

11沉填、在剩下的機器中執(zhí)行以下操作

set global group_replication_allow_local_disjoint_gtids_join=ON;(這個參數(shù)主要是讓那些需要加入組的機器存在于組內(nèi)沖突的事務(wù)才執(zhí)行的,一般情況下不需要執(zhí)行這個命令拜轨,這個參數(shù)官方說后續(xù)會廢除掉)

CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';

START GROUP_REPLICATION;

12、當中不管是因為什么原因?qū)е陆M內(nèi)成員服務(wù)停止橄碾,重啟后都需要重啟進行集群初始化操作。

13法牲、注意點

13.1、參數(shù)loose-group_replication_group_name的值是通過select uuid()生成的拒垃,并且整個mgr集群中是唯一的停撞,所以其他組成員應(yīng)該將這個參數(shù)的值配置成跟第一臺啟動mgr集群的值一樣悼瓮。

13.2、如果在執(zhí)行START GROUP_REPLICATION;中出現(xiàn)"不能將當前實例加入到組中"的錯誤時横堡,這個時候需要發(fā)送semanage port -l | grep mysqld 命令來查看當前mysql允許使用哪些端口埋市,如果沒有你配置的端口命贴,

要么修改端口,要么用semanage port -a -t mysqld_port_t -p tcp [port] 來添加響應(yīng)的端口胸蛛,然后使用命令systemctl restart sshd.service重啟SELunix污茵。當然這是官網(wǎng)給出來的解決方案葬项,但是本人

用這個種方案來搭建發(fā)現(xiàn)只有第一個節(jié)點加入組會成功,剩下的節(jié)點加入組就會失敗了民珍,具體原因不是很清楚零蓉,所以本人建議關(guān)閉 SELinux

13.3、如何沒有semanage敌蜂,可以使用yum -y install policycoreutils-python來安裝。

14章喉、上述步驟執(zhí)行完成后,可以通過sql:select * from performance_schema.replication_group_members;來查看所有組內(nèi)成員是否都是ONLINE狀態(tài)秸脱。

單主模式下也可以直接執(zhí)行sql:SELECT * FROM performance_schema.replication_group_members WHERE MEMBER_ID = (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME= 'group_replication_primary_member');來查找那個才是主機器

三、mysql集群搭建

好了摊唇,如果你的組復(fù)制搭建成功的話,那么在這一步將變的非常簡單巷查。

1有序、首先安裝 MySQL Shell 和 MySQL Router岛请,執(zhí)行如下兩條安裝命令

yum -y install mysql-shell

yum -y install mysql-router

2、執(zhí)行 mysqlsh 命令啟動mysql shell崇败,然后執(zhí)行 shell.connect('root@192.168.0.130:3306'),來連接組內(nèi)其中一臺mysql實例盅称,最好是連接組內(nèi)任意一臺secondary

3后室、執(zhí)行 var cluster = dba.createCluster('prodCluster', {adoptFromGR: true});來創(chuàng)建集群實例。到此岸霹,集群搭建完成逞盆。

4松申、退出mysql shell俯逾,配置路由服務(wù)贸桶,執(zhí)行 mysqlrouter --bootstrap root@hostname/ip:3306 --user=root.這個時候回打印出連接路由服務(wù)的端口號

5桌肴、啟動路由服務(wù) mysqlrouter &來創(chuàng)建集群實例皇筛。

四坠七、結(jié)語

到目前為止水醋,mysql集群搭建已經(jīng)徹底完成,你可以用客戶端連接路由服務(wù)了拄踪,來開啟你的mysql集群之旅吧!;掏!

這些步驟都是通過官網(wǎng)的文檔來一步一步的搭建完成姚糊,如果有上面不妥之處,還請大家指出救恨。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市肠槽,隨后出現(xiàn)的幾起案子擎淤,更是在濱河造成了極大的恐慌署浩,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筋栋,死亡現(xiàn)場離奇詭異,居然都是意外死亡弊攘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門襟交,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捣域,你說我怎么就攤上這事啼染』烂罚” “怎么了迹鹅?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵贞言,是天一觀的道長。 經(jīng)常有香客問我,道長弟蚀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任义钉,我火速辦了婚禮,結(jié)果婚禮上断医,老公的妹妹穿的比我還像新娘。我一直安慰自己鉴嗤,他們只是感情好,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布醉锅。 她就那樣靜靜地躺著,像睡著了一般硬耍。 火紅的嫁衣襯著肌膚如雪垄琐。 梳的紋絲不亂的頭發(fā)上经柴,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音坯认,去河邊找鬼翻擒。 笑死牛哺,一個胖子當著我的面吹牛陋气,可吹牛的內(nèi)容都是我干的引润。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼淳附,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了奴曙?” 一聲冷哼從身側(cè)響起别凹,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤缆毁,失蹤者是張志新(化名)和其女友劉穎到涂,沒想到半個月后脊框,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡浇雹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了昭灵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡烂完,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出抠蚣,到底是詐尸還是另有隱情,我是刑警寧澤嘶窄,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站柄冲,受9級特大地震影響吻谋,放射性物質(zhì)發(fā)生泄漏现横。R本人自食惡果不足惜漓拾,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一长赞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧得哆,春花似錦脯颜、人聲如沸贩据。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矾芙。三九已至近上,卻和暖如春剔宪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背葱绒。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留地淀,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓帮毁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親烈疚。 傳聞我的和親對象是個殘疾皇子黔牵,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一胞得、項目目標 搭建一個高可用web集群網(wǎng)站 二、項目規(guī)劃 2.1 ip地址規(guī)劃 2.2 拓撲圖 2.3 相關(guān)說明 ...
    夏日之光閱讀 3,400評論 0 1
  • Group Replication [TOC] 關(guān)于 Group Greplication 異步復(fù)制 半同步復(fù)制 ...
    saup007閱讀 5,790評論 0 4
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,928評論 2 89
  • 體驗入 在不斷的工作中感受到跃巡,自己越來越多的不足,感覺知識的不夠牧愁,能力的欠缺。 核心 加強 轉(zhuǎn)身用 只有不斷的加強...
    乾立風中閱讀 162評論 0 0
  • 難以置信的是猪半,我這樣一個排斥非主流的人,竟然有一個特別非主流的朋友磨确。 他叫開心沽甥,是我小學的死黨之一乏奥。 開心小時候長...
    溪邊孤樹閱讀 236評論 0 0