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

歡迎訪問 生活随笔!

生活随笔

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

数据库

基于mysql 5.5+mysql-master-ha实现mysql ha架构

發布時間:2025/4/16 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于mysql 5.5+mysql-master-ha实现mysql ha架构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

聽說很多大公司都在使用mysql ha(mysql-master-ha)的環境,下面,我也試著搭建測試一下。 一.MHA原理及其特點: 1.原理: MHA在主服務器發生故障時,自動實現故障轉移,快速將從服務器晉級為主服務器(通常在10-30s),而不影響復制的一致性,適用于任何存儲引擎 MHA 提供在線服務器切換,將從服務器器提升為主服務器,時間在0.5-2s,這段時間,數據是無法寫入的。 MHA manager 是通過ssh 連接到 mysql slave服務器上 MHA 每次從宕掉的主服務器上保存二進制日志,但不是每次都成功(主服務器硬件故障或無法通過ssh訪問) mysql 5.5支持半同步復制,MHA與半同步復制結合,可以大大降低數據丟失的風險, 2.特性: (1).主服務器的自動監控和故障轉移 (2).交互式主服務器故障遷移(使用MHA實現故障遷移,不監控主服務器,出現故障,手工調用MHA切換) (3).非交互式的主故障遷移(不監控主服務器,但自動實現故障轉移) (4).在線切換主服務器 注: MHA 可以應用于任何復制結構(此點待定) 二.MHA的前提條件: 1.搭建的前提條件: (1).mysql 主從復制已配置好(master-slave) (2).4臺server 設置SSH公鑰免密碼登錄 (3).操作系統為linux系統(MHA 只支持linux系統) (4).單臺可寫主服務器和多臺從服務器或只讀服務器 (5).mysql 版本為5.0或以上版本 (6).候選主服務器的log-bin必須開啟 (7). 所有服務器上的二進制日志和中級日志過濾規則必須相同 (8).候選服務器上的復制用戶必須存在 (9). 保留中繼日志和定期清理 參考文章:http://www.vmcd.org/2012/04/mysql-high-availability-mha/ 2.MHA的基本說明: MHA由node 和 manage 組成, node 安裝在每一臺mysql服務器上(主從上都要裝), manage端運行在獨立服務器上,也需要安裝node節點 3.MHA 切換過程: (1).監控和故障轉移過程 檢測復制設置和確定當前主服務器 監控主服務器 檢測主服務器當掉 再次檢測從服務器配置 關閉當掉的主服務器(可選) 恢復一個新的主服務器 激活新的主服務器 恢復其余的從服務器 告警(可選) (2).在線切換過程 檢測復制設置和確定當前主服務器 確定新的主服務器 阻塞寫入到當前主服務器 等待所有從服務器趕上復制 授予寫入到新的主服務器 重新設置從服務器 三.MHA 部署實例: 主DB:192.168.1.101 從DB1:192.168.1.102 從DB2:192.168.1.103 MHA管理端:192.168.1.100 系統版本:red hat linux 6 數據庫版本:mysql 5.5 注:默認mysql主從配置已經配置完畢

1.對mysql的主從進行半同步配置、從上建立復制的用戶和授予相應的權限、日志清除設置

  • #?所有mysql數據庫服務器,安裝半同步插件(semisync_master.so,semisync_slave.so)??
  • mysql>?install?plugin?rpl_semi_sync_master?soname?'semisync_master.so';??????
  • mysql>?install?plugin?rpl_semi_sync_slave?soname?'semisync_slave.so';??
  • #?注:其實master是安裝在主,slave是安裝在從上,但是我們是涉及從升級為主,所以主從都裝??
  • #?卸載插件使用命令:???
  • #?mysql>?uninstall?plugin?rpl_semi_sync_slave;??
  • #?mysql>?uninstall?plugin?rpl_semi_sync_master;??
  • #?修改所有數據庫服務器的參數文件(/etc/my.cnf),添加內容如下:??
  • [root@client101-103??~]#?vim?/etc/my.cnf??
  • rpl_semi_sync_master_enabled=1??
  • rpl_semi_sync_master_timeout=1000??
  • rpl_semi_sync_slave_enabled=1??
  • relay_log_purge=0?????#?此參數將定期清除中繼日志功能關閉??
  • #?重啟數據庫,查看同步狀態和半同步參數、狀態??
  • [root@client101-103??~]#?/etc/init.d/mysql?restart??
  • #?查看半同步參數:??
  • mysql>?show?variables?like?'%sync%';??
  • #?查看半同步狀態:??
  • mysql>?show?status?like?'%sync%';??
  • #?有幾個狀態參數值得關注的:??
  • rpl_semi_sync_master_status:顯示主服務是異步復制模式還是半同步復制模式??
  • rpl_semi_sync_master_clients:顯示有多少個從服務器配置為半同步復制模式??
  • rpl_semi_sync_master_yes_tx:顯示從服務器確認成功提交的數量??
  • rpl_semi_sync_master_no_tx:顯示從服務器確認不成功提交的數量??
  • rpl_semi_sync_master_tx_avg_wait_time:事務因開啟semi_sync,平均需要額外等待的時間??
  • rpl_semi_sync_master_net_avg_wait_time:事務進入等待隊列后,到網絡平均等待時間??
  • #?兩臺從數據庫建立用于復制的用戶和密碼??
  • mysql>?GRANT?REPLICATION?SLAVE?ON?*.*?TO?'slave'@'192.168.1.%'?IDENTIFIED?BY?'slave';??
  • mysql>?flush?privileges;??
  • 2.4臺server建立ssh無密碼驗證登陸

  • 注:ssh-keygen??-t???rsa:??
  • #?manage?端??
  • [root@client100?~]#?ssh-keygen??-t?rsa??
  • [root@client100?~]#?ssh-copy-id?root@192.168.1.101??
  • [root@client100?~]#?ssh-copy-id?root@192.168.1.102??
  • [root@client100?~]#?ssh-copy-id?root@192.168.1.103??
  • #?主DB???
  • [root@client101?~]#?ssh-keygen??-t?rsa??
  • [root@client101?~]#?ssh-copy-id?root@192.168.1.100??
  • [root@client101?~]#?ssh-copy-id?root@192.168.1.102??
  • [root@client101?~]#?ssh-copy-id?root@192.168.1.103??
  • #?從DB1???
  • [root@client102?~]#?ssh-keygen??-t?rsa??
  • [root@client102?~]#?ssh-copy-id?root@192.168.1.100??
  • [root@client102?~]#?ssh-copy-id?root@192.168.1.102??
  • [root@client102?~]#?ssh-copy-id?root@192.168.1.103??
  • #?從DB2???
  • [root@client103?~]#?ssh-keygen??-t?rsa??
  • [root@client103?~]#?ssh-copy-id?root@192.168.1.100??
  • [root@client103?~]#?ssh-copy-id?root@192.168.1.101??
  • [root@client103?~]#?ssh-copy-id?root@192.168.1.102??
  • 3.在3臺數據庫節點安裝MHA的node節點:

  • #?如果安裝下面包,報依賴關系錯,請先安裝mysql-share-compat包??
  • #?先安裝下面的?perl-dbd-mysql包??
  • #?在下面執行perl時,如果出現報錯,需要安裝如下這幾個perl包:?perl-devel?perl-CPAN??
  • ##?在192.168.1.101上執行如下操作??
  • [root@client101?~]#?yum?-y?install?perl-DBD-MySQL??
  • [root@client101?~]#?tar?-xf?mha4mysql-node-0.54.tar.gz??
  • [root@client101?~]#?cd?mha4mysql-node-0.54??
  • [root@client101?mha4mysql-node-0.54]#?perl?Makefile.PL??
  • [root@client101?mha4mysql-node-0.54]#?make?&&?make?install??
  • #?在192.168.1.102上執行如下操作??
  • [root@client102?~]#?yum?-y?install?perl-DBD-MySQL??
  • [root@client102?~]#?tar?-xf?mha4mysql-node-0.54.tar.gz??
  • [root@client102?~]#?cd?mha4mysql-node-0.54??
  • [root@client102?mha4mysql-node-0.54]#?perl?Makefile.PL??
  • [root@client102?mha4mysql-node-0.54]#?make?&&?make?install??
  • #?在192.168.1.103上執行如下操作??
  • [root@client103?~]#?yum?-y?install?perl-DBD-MySQL??
  • [root@client103?~]#?tar?-xf?mha4mysql-node-0.54.tar.gz??
  • [root@client103?~]#?cd?mha4mysql-node-0.54??
  • [root@client103?mha4mysql-node-0.54]#?perl?Makefile.PL??
  • [root@client103?mha4mysql-node-0.54]#?make?&&?make?install??
  • 4.管理節點安裝MHA的manager和node(192.168.1.100):

  • #?管理節點一定記得裝mha4mysql-node-0.54.tar.gz??和??mha4mysql-manager-0.55.tar.gz???
  • #?管理節點,不裝node?會報錯的??
  • #?安裝相關perl包(有些包,系統沒有自帶,需要自行下載安裝)??
  • [root@client100?~]#?yum?install?perl-DBD-MySQL?perl-Config-Tiny?perl-Log-Dispatch?perl-Parallel-ForkManager?perl-Config-IniFiles??
  • [root@client100?~]#?tar?-xf?mha4mysql-node-0.54.tar.gz??
  • [root@client100?~]#?cd?mha4mysql-node-0.54??
  • [root@client100?mha4mysql-node-0.54]#?perl?Makefile.PL??
  • [root@client100?mha4mysql-node-0.54]#?make?&&?make?install??
  • ??
  • [root@client100?~]#?tar?-xf?mha4mysql-manager-0.55.tar.gz??
  • [root@client100?~]#?cd?mha4mysql-manager-0.55??
  • [root@client100?mha4mysql-manager-0.55]#?perl?Makefile.PL??
  • [root@client100?mha4mysql-manager-0.55]#?make?&&?make?install??
  • 5.編輯管理節點的配置文件

  • #?建立配置文件存放目錄,并將模板配置文件復制到新建目錄??
  • [root@client100?~]#?mkdir?/etc/mastermha??
  • [root@client100?~]#?mkdir?-p?/mastermha/app1??
  • [root@client100?~]#?cd?/tmp/mha4mysql-manager-0.55??
  • [root@client100?mha4mysql-manager-0.55]#?cp?samples/conf/*?/etc/mastermha/??
  • [root@client100?~]#?vim?/etc/mastermha/app1.cnf??
  • [server?default]??
  • manager_workdir=/masterha/app1??
  • manager_log=/masterha/app1/manager.log??
  • user=mha_mon??
  • password=123456??
  • ssh_user=root??
  • repl_user=slave??
  • repl_password=slave??
  • ping_interval=1??
  • shutdown_script=""??
  • master_ip_online_change_script=""??
  • report_script=""??
  • ??
  • [server1]??
  • hostname=192.168.1.101??
  • master_binlog_dir=/var/lib/mysql/??
  • candidate_master=1??
  • ??
  • [server2]??
  • hostname=192.168.1.102??
  • master_binlog_dir=/var/lib/mysql??
  • candidate_master=1??
  • ??
  • [server3]??
  • hostname=192.168.1.103??
  • #master_binlog_dir=/var/lib/mysql??
  • no_master=1???
  • 6.在所有數據庫節點的機器上進行授權操作(192.168.1.101/192.168.1.102/192.168.1.103)

  • mysql>?grant?all?privileges?on?*.*?to?'mha_mon'@'192.168.1.%'?identified?by?'123456';??
  • Query?OK,?0?rows?affected?(1.00?sec)??
  • mysql>?flush?privileges;??
  • 7.測試ssh連接是否正常

  • #?所有都為ok?即為正常??
  • [root@client100?mastermha]#?masterha_check_ssh??--global_conf=/etc/mastermha/masterha_default.cnf??--conf=/etc/mastermha/app1.cnf??
  • Sun?Mar??2?14:52:53?2014?-?[info]?Reading?default?configuratoins?from?/etc/mastermha/masterha_default.cnf..??
  • Sun?Mar??2?14:52:53?2014?-?[info]?Reading?application?default?configurations?from?/etc/mastermha/app1.cnf..??
  • Sun?Mar??2?14:52:53?2014?-?[info]?Reading?server?configurations?from?/etc/mastermha/app1.cnf..??
  • Sun?Mar??2?14:52:53?2014?-?[info]?Starting?SSH?connection?tests..??
  • Sun?Mar??2?14:53:04?2014?-?[debug]??
  • Sun?Mar??2?14:52:53?2014?-?[debug]??Connecting?via?SSH?from?root@192.168.1.102(192.168.1.102:22)?to?root@192.168.1.101(192.168.1.101:22)..??
  • Sun?Mar??2?14:53:03?2014?-?[debug]???ok.??
  • Sun?Mar??2?14:53:03?2014?-?[debug]??Connecting?via?SSH?from?root@192.168.1.102(192.168.1.102:22)?to?root@192.168.1.103(192.168.1.103:22)..??
  • Sun?Mar??2?14:53:04?2014?-?[debug]???ok.??
  • Sun?Mar??2?14:53:04?2014?-?[debug]??
  • Sun?Mar??2?14:52:54?2014?-?[debug]??Connecting?via?SSH?from?root@192.168.1.103(192.168.1.103:22)?to?root@192.168.1.101(192.168.1.101:22)..??
  • Sun?Mar??2?14:53:04?2014?-?[debug]???ok.??
  • Sun?Mar??2?14:53:04?2014?-?[debug]??Connecting?via?SSH?from?root@192.168.1.103(192.168.1.103:22)?to?root@192.168.1.102(192.168.1.102:22)..??
  • Sun?Mar??2?14:53:04?2014?-?[debug]???ok.??
  • Sun?Mar??2?14:54:53?2014?-?[debug]??
  • Sun?Mar??2?14:52:53?2014?-?[debug]??Connecting?via?SSH?from?root@192.168.1.101(192.168.1.101:22)?to?root@192.168.1.102(192.168.1.102:22)..??
  • Sun?Mar??2?14:53:53?2014?-?[debug]???ok.??
  • Sun?Mar??2?14:53:53?2014?-?[debug]??Connecting?via?SSH?from?root@192.168.1.101(192.168.1.101:22)?to?root@192.168.1.103(192.168.1.103:22)..??
  • Sun?Mar??2?14:54:53?2014?-?[debug]???ok.??
  • Sun?Mar??2?14:54:53?2014?-?[info]?All?SSH?connection?tests?passed?successfully.??
  • 8.測試數據庫之間的復制情況:

  • #?如果正常點額話,下面會有ok顯示??
  • [root@client100?mastermha]#?masterha_check_repl?--global_conf=/etc/mastermha/masterha_default.cnf??--conf=/etc/mastermha/app1.cnf??
  • Sun?Mar??2?15:10:16?2014?-?[info]?Reading?default?configuratoins?from?/etc/mastermha/masterha_default.cnf..??
  • Sun?Mar??2?15:10:16?2014?-?[info]?Reading?application?default?configurations?from?/etc/mastermha/app1.cnf..??
  • Sun?Mar??2?15:10:16?2014?-?[info]?Reading?server?configurations?from?/etc/mastermha/app1.cnf..??
  • Sun?Mar??2?15:10:16?2014?-?[info]?MHA::MasterMonitor?version?0.55.??
  • Sun?Mar??2?15:10:25?2014?-?[info]?Dead?Servers:??
  • Sun?Mar??2?15:10:25?2014?-?[info]???192.168.1.101(192.168.1.101:3306)??
  • Sun?Mar??2?15:10:25?2014?-?[info]?Alive?Servers:??
  • Sun?Mar??2?15:10:25?2014?-?[info]???192.168.1.102(192.168.1.102:3306)??
  • Sun?Mar??2?15:10:25?2014?-?[info]???192.168.1.103(192.168.1.103:3306)??
  • Sun?Mar??2?15:10:25?2014?-?[info]?Alive?Slaves:??
  • Sun?Mar??2?15:10:25?2014?-?[info]???192.168.1.102(192.168.1.102:3306)??Version=5.5.36-log?(oldest?major?version?between?slaves)?log-bin:enabled??
  • Sun?Mar??2?15:10:25?2014?-?[info]?????Replicating?from?192.168.1.101(192.168.1.101:3306)??
  • Sun?Mar??2?15:10:25?2014?-?[info]?????Primary?candidate?for?the?new?Master?(candidate_master?is?set)??
  • Sun?Mar??2?15:10:25?2014?-?[info]???192.168.1.103(192.168.1.103:3306)??Version=5.5.36-log?(oldest?major?version?between?slaves)?log-bin:enabled??
  • Sun?Mar??2?15:10:25?2014?-?[info]?????Replicating?from?192.168.1.101(192.168.1.101:3306)??
  • Sun?Mar??2?15:10:25?2014?-?[warning]?MySQL?master?is?not?currently?alive!??
  • Sun?Mar??2?15:10:25?2014?-?[info]?Checking?slave?configurations..??
  • Sun?Mar??2?15:10:25?2014?-?[info]??read_only=1?is?not?set?on?slave?192.168.1.102(192.168.1.102:3306).??
  • Sun?Mar??2?15:10:25?2014?-?[warning]??relay_log_purge=0?is?not?set?on?slave?192.168.1.102(192.168.1.102:3306).??
  • Sun?Mar??2?15:10:25?2014?-?[info]?Checking?replication?filtering?settings..??
  • Sun?Mar??2?15:10:25?2014?-?[info]??Replication?filtering?check?ok.??
  • Sun?Mar??2?15:10:25?2014?-?[info]?Starting?SSH?connection?tests..??
  • Sun?Mar??2?15:10:26?2014?-?[info]?All?SSH?connection?tests?passed?successfully.??
  • Sun?Mar??2?15:10:26?2014?-?[info]?Checking?MHA?Node?version..??
  • Sun?Mar??2?15:10:26?2014?-?[info]??Version?check?ok.??
  • Sun?Mar??2?15:10:26?2014?-?[info]?Getting?current?master?(maybe?dead)?info?..??
  • Sun?Mar??2?15:10:26?2014?-?[info]?Identified?master?is?192.168.1.101(192.168.1.101:3306).??
  • Sun?Mar??2?15:10:26?2014?-?[info]?Checking?SSH?publickey?authentication?settings?on?the?current?master..??
  • Sun?Mar??2?15:10:31?2014?-?[warning]?HealthCheck:?Got?timeout?on?checking?SSH?connection?to?192.168.1.101!?at?/usr/local/share/perl5/MHA/HealthCheck.pm?line?298.??
  • Sun?Mar??2?15:10:31?2014?-?[info]?Checking?SSH?publickey?authentication?and?checking?recovery?script?configurations?on?all?alive?slave?servers..??
  • Sun?Mar??2?15:10:31?2014?-?[info]???Executing?command?:?apply_diff_relay_logs?--command=test?--slave_user='mha_mon'?--slave_host=192.168.1.102?--slave_ip=192.168.1.102?--slave_port=3306?--workdir=/data/log/masterha?--target_version=5.5.36-log?--manager_version=0.55?--relay_log_info=/var/lib/mysql/relay-log.info??--relay_dir=/var/lib/mysql/??--slave_pass=xxx??
  • Sun?Mar??2?15:10:31?2014?-?[info]???Connecting?to?root@192.168.1.102(192.168.1.102:22)..??
  • Creating?directory?/data/log/masterha..?done.??
  • ??Checking?slave?recovery?environment?settings..??
  • ????Opening?/var/lib/mysql/relay-log.info?...?ok.??
  • ????Relay?log?found?at?/var/lib/mysql,?up?to?mysql-relay-bin.000007??
  • ????Temporary?relay?log?file?is?/var/lib/mysql/mysql-relay-bin.000007??
  • ????Testing?mysql?connection?and?privileges..?done.??
  • ????Testing?mysqlbinlog?output..?done.??
  • ????Cleaning?up?test?file(s)..?done.??
  • Sun?Mar??2?15:10:31?2014?-?[info]???Executing?command?:?apply_diff_relay_logs?--command=test?--slave_user='mha_mon'?--slave_host=192.168.1.103?--slave_ip=192.168.1.103?--slave_port=3306?--workdir=/data/log/masterha?--target_version=5.5.36-log?--manager_version=0.55?--relay_log_info=/var/lib/mysql/relay-log.info??--relay_dir=/var/lib/mysql/??--slave_pass=xxx??
  • Sun?Mar??2?15:10:31?2014?-?[info]???Connecting?to?root@192.168.1.103(192.168.1.103:22)..??
  • Creating?directory?/data/log/masterha..?done.??
  • ??Checking?slave?recovery?environment?settings..??
  • ????Opening?/var/lib/mysql/relay-log.info?...?ok.??
  • ????Relay?log?found?at?/var/lib/mysql,?up?to?mysql-relay-bin.000009??
  • ????Temporary?relay?log?file?is?/var/lib/mysql/mysql-relay-bin.000009??
  • ????Testing?mysql?connection?and?privileges..?done.??
  • ????Testing?mysqlbinlog?output..?done.??
  • ????Cleaning?up?test?file(s)..?done.??
  • Sun?Mar??2?15:10:32?2014?-?[info]?Slaves?settings?check?done.??
  • Sun?Mar??2?15:10:32?2014?-?[info]??
  • 192.168.1.101?(current?master)??
  • +--192.168.1.102??
  • +--192.168.1.103??
  • ??
  • Sun?Mar??2?15:10:32?2014?-?[info]?Checking?replication?health?on?192.168.1.102..??
  • Sun?Mar??2?15:10:32?2014?-?[info]??ok.??
  • Sun?Mar??2?15:10:32?2014?-?[info]?Checking?replication?health?on?192.168.1.103..??
  • Sun?Mar??2?15:10:32?2014?-?[info]??ok.??
  • Sun?Mar??2?15:10:32?2014?-?[warning]?master_ip_failover_script?is?not?defined.??
  • Sun?Mar??2?15:10:32?2014?-?[warning]?shutdown_script?is?not?defined.??
  • Sun?Mar??2?15:10:32?2014?-?[info]?Got?exit?code?0?(Not?master?dead).??
  • ??
  • MySQL?Replication?Health?is?OK.??
  • 9.啟動管理節點進程:

  • [root@client100?mastermha]#nohup?masterha_manager?--conf=/etc/mastermha/app1.cnf?>?/tmp/mha_manager.log??</dev/null?2>&1?&??
  • #?可以用以下命令,查看mha?進程是否啟動??
  • [root@client100?mastermha]#?ps?-ef?|grep?mha???
  • #?檢查MHA狀態:??
  • [root@client100?~]#?masterha_check_status??--global_conf=/etc/mastermha/masterha_default.cnf??--conf=/etc/mastermha/app1.cnf??
  • ?app1?(pid:2835)?is?running(0:PING_OK),?master:192.168.1.101??
  • #??正常情況下,如果為ok,則mha已經配置成功??
  • #?也可以查看相關日志,/masterha/app1/manager.log?此日記記錄詳細切換過程??
  • 10.測試:

    關閉目前為主的mysql,仔細查看日志,系統會自動進行切換 注:切換失敗后,再次啟動管理端,是啟不來的,需要刪除目錄下相關app1.failover.complete,才可正常開啟 各位自行測試,有問題,可以互相探討。

    轉載于:https://my.oschina.net/liting/blog/403969

    總結

    以上是生活随笔為你收集整理的基于mysql 5.5+mysql-master-ha实现mysql ha架构的全部內容,希望文章能夠幫你解決所遇到的問題。

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