mysql MHA高可用+讀寫分離

1.mysql MHA高可用+讀寫分離

高可用採用mha方式實現,由於keepalive存在腦裂現象,因此vip漂移採用mha自帶的腳本實現,讀寫分離採用基於MySQL-proxy的360公司的atlas實現。php

1.1 mysql MHA高可用

1.11 mha簡介

MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟的解決方案,它由日本DeNA公司youshimaton(現就任於Facebook公司)開發,是一套優秀的做爲MySQL高可用性環境下故障切換和主從提高的高可用軟件。在MySQL故障切換過程當中,MHA能作到在10~30秒以內自動完成數據庫的故障切換操做,而且在進行故障切換的過程當中,MHA能在最大程度上保證數據的一致性,以達到真正意義上的高可用。html

  MHA可以在較短的時間內實現自動故障檢測和故障轉移,一般在10-30秒之內;在複製 框架中,MHA可以很好地解決複製過程當中的數據一致性問題,因爲不須要在現有的 replication中添加額外的服務器,僅須要一個manager節點,而一個Manager能管理多套複製,因此能大大地節約服務器的數量;另外,安裝簡單,無性能損耗,以及不須要修改現 有的複製部署也是它的優點之處。前端

  MHA還提供在線主庫切換的功能,可以安全地切換當前運行的主庫到一個新的主庫中 (經過將從庫提高爲主庫),大概0.5-2秒內便可完成。node

  該軟件由兩部分組成:MHA Manager(管理節點)和MHA Node(數據節點)。MHA Manager能夠單獨部署在一臺獨立的機器上管理多個master-slave集羣,也能夠部署在一臺slave節點上。MHA Node運行在每臺MySQL服務器上,MHA Manager會定時探測集羣中的master節點,當master出現故障時,它能夠自動將最新數據的slave提高爲新的master,而後將全部其餘的slave從新指向新的master。整個故障轉移過程對應用程序徹底透明。
  在MHA自動故障切換過程當中,MHA試圖從宕機的主服務器上保存二進制日誌,最大程度的保證數據的不丟失,但這並不老是可行的。例如,若是主服務器硬件故障或沒法經過ssh訪問,MHA無法保存二進制日誌,只進行故障轉移而丟失了最新的數據。使用MySQL 5.5的半同步複製,能夠大大下降數據丟失的風險。mysql

  MHA能夠與半同步複製結合起來。若是隻有一個slave已經收到了最新的二進制日誌,MHA能夠將最新的二進制日誌應用於其餘全部的slave服務器上,所以能夠保證全部節點的數據一致性。linux

  目前MHA主要支持一主多從的架構,要搭建MHA,要求一個複製集羣中必須最少有三臺數據庫服務器,一主二從,即一臺充當master,一臺充當備用master,另一臺充當從庫,由於至少須要三臺服務器,出於機器成本的考慮,淘寶也在該基礎上進行了改造,目前淘寶TMHA已經支持一主一從。nginx

1.2 mha部署

1.2.1 環境:

主:192.168.100.52
從:192.168.100.53
從:192.168.100.54
vip:192.168.100.55
關閉全部節點的selinux和防火牆或開放3306端口
- 管理節點:
mha-manager 192.168.100.53git

1.2.2 安裝mha

  • mha主機安裝perl環境:
    yum -y install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-Embed cpan
  • manager安裝:
# 先安裝node
tar xf mha4mysql-node-0.56.tar.gz
cd mha4mysql-node-0.56
perl Makefile.PL
make && make install  
# 再安裝manager
tar xf mha4mysql-manager-0.56.tar.gz
cd  mha4mysql-manager-0.56
perl Makefile.PL
make && make install
  • 建立配置文件:
mkdir /etc/mha 
mkdir -p /data/logs/mha/app1
cp mha4mysql-manager-0.56/samples/conf/app1.cnf /etc/mha

配置文件:github

[server default]

manager_workdir=/data/logs/mha/app1
manager_log=/data/logs/mha/app1/manager.log
master_binlog_dir=/data/data/mysql
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
ssh_user=root
ssh_port=22
user=admin
password=mha_admin
repl_user=slave
repl_password=nx111
ping_interval=1



[server1]
ignore_fail=0
hostname=192.168.100.52
port=3306

[server2]
ignore_fail=0
hostname=192.168.100.53
port=3306
candidate_master=1
check_repl_delay=0

[server3]
ignore_fail=0
hostname=192.168.100.54
port=3306

配置文件詳解:web

1 [server default]
 2 #設置manager的工做目錄
 3 manager_workdir=/var/log/masterha/app1
 4 #設置manager的日誌
 5 manager_log=/var/log/masterha/app1/manager.log 
 6 #設置master 保存binlog的位置,以便MHA能夠找到master的日誌,我這裏的也就是mysql的數據目錄
 7 master_binlog_dir=/data/mysql
 8 #設置自動failover時候的切換腳本
 9 master_ip_failover_script= /usr/local/bin/master_ip_failover
10 #設置手動切換時候的切換腳本
11 master_ip_online_change_script= /usr/local/bin/master_ip_online_change
12 #設置mysql中root用戶的密碼,這個密碼是前文中建立監控用戶的那個密碼
13 password=123456
14 #設置監控用戶root
15 user=root
16 #設置監控主庫,發送ping包的時間間隔,嘗試三次沒有迴應的時候自動進行failover
17 ping_interval=1
18 #設置遠端mysql在發生切換時binlog的保存位置
19 remote_workdir=/tmp
20 #設置複製用戶的密碼
21 repl_password=123456
22 #設置複製環境中的複製用戶名 
23 repl_user=rep
24 #設置發生切換後發送的報警的腳本
25 report_script=/usr/local/send_report
26 #一旦MHA到server02的監控之間出現問題,MHA Manager將會嘗試從server03登陸到server02
27 secondary_check_script= /usr/local/bin/masterha_secondary_check -s server03 -s server02 --user=root --master_host=server02 --master_ip=10.0.0.51 --master_port=3306
28 #設置故障發生後關閉故障主機腳本(該腳本的主要做用是關閉主機放在發生腦裂,這裏沒有使用)
29 shutdown_script=""
30 #設置ssh的登陸用戶名
31 ssh_user=root 
32 
33 [server1]
34 hostname=10.0.0.51
35 port=3306
36 
37 [server2]
38 hostname=10.0.0.52
39 port=3306
40 #設置爲候選master,若是設置該參數之後,發生主從切換之後將會將此從庫提高爲主庫,即便這個主庫不是集羣中事件最新的slave
41 candidate_master=1
42 #默認狀況下若是一個slave落後master 100M的relay logs的話,MHA將不會選擇該slave做爲一個新的master,由於對於這個slave的恢復須要花費很長時間,經過設置check_repl_delay=0,MHA觸發切換在選擇一個新的master的時候將會忽略複製延時,這個參數對於設置了candidate_master=1的主機很是有用,由於這個候選主在切換的過程當中必定是新的master
43 check_repl_delay=0
  • 主從節點安裝node:
tar xf mha4mysql-node-0.56.tar.gz
cd mha4mysql-node-0.56
perl Makefile.PL
make && make install
  • 各節點相互生成密鑰添加互信包括本機自身:
    生成密鑰:ssh-keygen
    互相添加互信:ssh-copy-id -i 公鑰文件 ip
    添加完成後用master_chekc_ssh -conf=/etc/mha/app1.cnf進行測試
  • 配置文件更改,從節點也開啓二進制日誌,server_id不能相同
    vim /etc/my.cnf
[mysql]
server_id = 1 # 設置優先級最高
log_bin = binlog # 開啓二進制日誌
log_bin = binlog.index
read_only = 1 # 設置只讀權限
relay_log_purge = 0 # 關閉自動清除執行完畢後的中級日誌

1.2.3 mysql開啓主從同步

  • 原理:主從同步同步的是基於binlog裏面記錄的增刪改。從服務器開啓io線程同步主服務器binlog,從服務器接收binlog,並記錄在relaylog裏,sql線程執行relaylog日誌。
    主:192.168.100.52
    從:192.168.100.53
    從:192.168.100.54
    vip:192.168.100.55
  • 重啓mysql,登陸主節點添加受權主從複製帳號和mha用的帳號:
# 創建從服務器帳戶
grant replication slave on *.* to 'slave'@'192.168.100.%' identified by 'nx111';


# 創建mha管理用帳戶
grant all on *.* to 'admin'@'192.168.100.%' identified by 'mha_admin';
  • 登陸主節點mysql查看二進制日誌狀態:
    show master status
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+--------------+------------------+-------------------+
| binlog.000001 | 686 | | | | +---------------+----------+--------------+------------------+-------------------+
  • 登陸每個從節點,開啓主從複製:
change master to 
master_host='192.168.100.52',
master_user='slave',
master_password='nx111',
master_log_file='binlog.000001',
master_log_pos=686;
  • 檢查
    masterha_check_repl --conf=/etc/mha/app1.cnf
    輸出:MySQL Replication Health is OK.
  • 啓動mha-manager
    nohup /usr/local/bin/masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /data/logs/mha/app1/manager.log 2>&1 &
  • 查看運行狀態
    masterha_check_status --conf=/etc/mha/app1.cnf
    輸出:app1 (pid:11809) is running(0:PING_OK), master:192.168.100.52代表成功運行

1.2.4 主從切換測試

  • 切換主從測試:
    主庫192.168.100.52
    停掉主庫/etc/init.d/mysqld stop
    查看mha-manager日誌切換從庫爲主庫
    配置文件添加被剔除的52主庫,啓動主庫,change master到新主庫
    測試成功主庫成功遷移到54
  • 添加vip漂移:

1.2.5 添加vip測試vip漂移

  • 虛擬ip漂移有兩種方式:
    • keepalive方式:網絡抖動會致使腦裂現象,主從庫會爭奪vip,形成ip衝突。
    • mha自帶腳本方式:修改mha自帶腳本
  • 前端nginx新建php網頁文件:
<?php echo time() . PHP_EOL; $db = new mysqli('192.168.100.55','admin','mha_admin'); if ($db->connect_errno) { die("鏈接數據庫失敗". $db->connect_error); } echo "鏈接成功"; $db->close(); ?>
  • 自帶腳本:
    • 自動切換腳本:/usr/local/bin/master_ip_failover
    • 手動切換腳本:/usr/local/bin/master_ip_online_change
    • 修改兩個腳本內的vip和gatway,ssh端口,網卡名稱。centos7注意ifconfig命令的路徑,沒有ifconfig命令yum安裝net-tools網絡工具包,並修改腳本里面ifconfig路徑。
  • 手動綁定vip:
    ip addr add 192.168.100.55/32 dev eth0
  • 瀏覽器打開前端服務器能夠看到 這裏寫圖片描述

  • masterha_check_repl --conf=/etc/mha/app1.cnf檢測一下,輸出所有ok,MySQL Replication Health is OK.就能夠啓動mha了
    啓動命令:nohup /usr/local/bin/masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /data/logs/mha/app1/manager.log 2>&1 &

  • 停掉52主庫mysql,查看54備選master的ip漂移成功ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:03:d9:43 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.54/24 brd 192.168.100.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.100.55/24 brd 192.168.100.255 scope global secondary eth0:0
       valid_lft forever preferred_lft forever

有兩個ip,其中一個是vip55,查看從53從庫的slave status切換備選主庫成功:

mysql> show slave status\G
*************************** 1. row ***************************
 Slave_IO_State: Waiting for master to send event
 Master_Host: 192.168.100.54
 Master_User: slave
 Master_Port: 3306
 Connect_Retry: 60
 Master_Log_File: binlog.000004
 Read_Master_Log_Pos: 120
 Relay_Log_File: localhost-relay-bin.000002
 Relay_Log_Pos: 280
 Relay_Master_Log_File: binlog.000004
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes

查看/data/logs/mha/app1/manager.log

----- Failover Report -----

app1: MySQL Master failover 192.168.100.52(192.168.100.52:3306) to 192.168.100.54(192.168.100.54:3306) succeeded

Master 192.168.100.52(192.168.100.52:3306) is down!

Check MHA Manager logs at localhost.localdomain:/data/logs/mha/app1/manager.log for details.

Started automated(non-interactive) failover.
Invalidated master IP address on 192.168.100.52(192.168.100.52:3306)
The latest slave 192.168.100.53(192.168.100.53:3306) has all relay logs for recovery.
Selected 192.168.100.54(192.168.100.54:3306) as a new master.
192.168.100.54(192.168.100.54:3306): OK: Applying all logs succeeded.
192.168.100.54(192.168.100.54:3306): OK: Activated master IP address.
192.168.100.53(192.168.100.53:3306): This host has the latest relay log events.
Generating relay diff files from the latest slave succeeded.
192.168.100.53(192.168.100.53:3306): OK: Applying all logs succeeded. Slave started, replicating from 192.168.100.54(192.168.100.54:3306)
192.168.100.54(192.168.100.54:3306): Resetting slave info succeeded.
Master failover to 192.168.100.54(192.168.100.54:3306) completed successfully.
  • 再次用瀏覽器打開前端地址,依然鏈接成功,mha高可用實現Alt text

2. 讀寫分離中間件atlas

2.1 atlas介紹

Atlas是由 Qihoo 360公司Web平臺部基礎架構團隊開發維護的一個基於MySQL協議的數據中間層項目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎上,修改了大量bug,添加了不少功能特性。目前該項目在360公司內部獲得了普遍應用,不少MySQL業務已經接入了Atlas平臺,天天承載的讀寫請求數達幾十億條。

  • 主要功能
      讀寫分離、從庫負載均衡、自動分表、IP過濾
  • 使用場景
    atlas是位於前端應以和後端數據庫之間的中間件,做爲客戶端與數據庫鏈接,同時對於前端應用來講,是一個服務端。

2.2 其它中間件介紹

Mysql-proxy(oracle)
Mysql-router(oracle)
Atlas (Qihoo 360)
Atlas-sharding (Qihoo 360)
Cobar(是阿里巴巴(B2B)部門開發)
Mycat(基於阿里開源的Cobar產品而研發)
TDDL Smart Client的方式(淘寶)
Oceanus(58同城數據庫中間件)
OneProxy(原支付寶首席架構師樓方鑫開發 )
vitess(谷歌開發的數據庫中間件)
Heisenberg(百度)
TSharding(蘑菇街白輝)
Xx-dbproxy(金山的Kingshard、噹噹網的sharding-jdbc )

2.3 atlas安裝

我安裝atlas到54從庫的機器上

2.3.1 注意事項

軟件獲取地址:https://github.com/Qihoo360/Atlas/releases
下載安裝:
wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm
rpm -ivh Atlas-2.2.1.el6.x86_64.rpm

一、Atlas只能安裝運行在64位的系統上
二、Centos 5.X安裝 Atlas-XX.el5.x86_64.rpm,Centos 6.X安裝Atlas-XX.el6.x86_64.rpm。
三、後端mysql版本應大於5.1,建議使用Mysql 5.6以上
  Atlas (普通) : Atlas-2.2.1.el6.x86_64.rpm
  Atlas (分表) : Atlas-sharding_1.0.1-el6.x86_64.rpm
  

2.3.2 配置文件

[root@localhost conf]# rpm -ql Atlas-2.2.1
/usr/local/mysql-proxy/bin/VERSION
/usr/local/mysql-proxy/bin/encrypt  //密碼加密程序
/usr/local/mysql-proxy/bin/mysql-proxy //原版mysql-proxy
/usr/local/mysql-proxy/bin/mysql-proxyd  //360重寫後的程序
/usr/local/mysql-proxy/conf/test.cnf    //配置文件

這裏密碼加密程序是atlas配置文件密碼。主庫授信數據庫權限,不然經過atlas訪問數據庫獲取不到數據。由於開了主從複製,因此從庫會同步授信。
由於先前授信了mha用戶admin。因此使用這個帳戶,加密密碼:

[root@localhost bin]# /usr/local/mysql-proxy/bin/encrypt mha_admin
2VJk4+gKBSiT6hL0DO30MA==

複製密碼串到配置文件; /usr/local/mysql-proxy/conf/test.cnf

配置文件註釋是中文

[mysql-proxy]

#帶#號的爲非必需的配置項目

#管理接口的用戶名
admin-username=user

#管理接口的密碼
admin-password=pwd

#Atlas後端鏈接的MySQL主庫的IP和端口,可設置多項,用逗號分隔
proxy-backend-addresses=192.168.100.55:3306

#Atlas後端鏈接的MySQL從庫的IP和端口,@後面的數字表明權重,用來做負載均衡,若省略則默認爲1,可設置多項,用逗號分隔
proxy-read-only-backend-addresses=192.168.100.54:3306@2,192.168.100.53:3306@1

#用戶名與其對應的加密過的MySQL密碼,密碼使用PREFIX/bin目錄下的加密程序encrypt加密,下行的user1和user2爲示例,將其替換爲你的MySQL的用戶名和加密密碼!
pwds=admin:2VJk4+gKBSiT6hL0DO30MA==,atlas:F81glGa2FGwa8s/oWZlMvQ==

#設置Atlas的運行方式,設爲true時爲守護進程方式,設爲false時爲前臺方式,通常開發調試時設爲false,線上運行時設爲true,true後面不能有空格。
daemon=true

#設置Atlas的運行方式,設爲true時Atlas會啓動兩個進程,一個爲monitor,一個爲worker,monitor在worker意外退出後會自動將其重啓,設爲false時只有worker,沒有monitor,通常開發調試時設爲false,線上運行時設爲true,true後面不能有空格。
keepalive=true

#工做線程數,對Atlas的性能有很大影響,可根據狀況適當設置
event-threads=8

#日誌級別,分爲message、warning、critical、error、debug五個級別
log-level=message

#日誌存放的路徑
log-path=/data/logs/mysql-proxy/log

#SQL日誌的開關,可設置爲OFF、ON、REALTIME,OFF表明不記錄SQL日誌,ON表明記錄SQL日誌,REALTIME表明記錄SQL日誌且實時寫入磁盤,默認爲OFF
#sql-log = OFF

#慢日誌輸出設置。當設置了該參數時,則日誌只輸出執行時間超過sql-log-slow(單位:ms)的日誌記錄。不設置該參數則輸出所有日誌。
#sql-log-slow = 10

#實例名稱,用於同一臺機器上多個Atlas實例間的區分
#instance = test

#Atlas監聽的工做接口IP和端口
proxy-address=0.0.0.0:1234

#Atlas監聽的管理接口IP和端口
admin-address=0.0.0.0:2345

#分表設置,此例中person爲庫名,mt爲表名,id爲分表字段,3爲子表數量,可設置多項,以逗號分隔,若不分表則不須要設置該項
#tables = person.mt.id.3

#默認字符集,設置該項後客戶端再也不須要執行SET NAMES語句
charset=utf8

#容許鏈接Atlas的客戶端的IP,能夠是精確IP,也能夠是IP段,以逗號分隔,若不設置該項則容許全部IP鏈接,不然只容許列表中的IP鏈接
client-ips=127.0.0.1,192.168.100.52

#Atlas前面掛接的LVS的物理網卡的IP(注意不是虛IP),如有LVS且設置了client-ips則此項必須設置,不然能夠不設置
#lvs-ips = 192.168.1.1

2.3.3 啓動atlas

首先,先確認主庫vip已經綁定,因此我這裏配置文件裏的主庫是55,並非實際的52。而後確認主從庫無缺,MySQL啓動正常,而且防火牆已經關閉。改完了配置文件,就能夠啓動atlas了/etc/init.d/atlasd start

2.4 測試atlas

2.4.1 客戶端測試
  • 查看端口是否已經啓動
[root@localhost conf]# ss -nptl |grep mysql-proxy
LISTEN     0      128          *:1234                     *:*                   users:(("mysql-proxy",pid=2361,fd=10))
LISTEN     0      128          *:2345                     *:*                   users:(("mysql-proxy",pid=2361,fd=9))

兩個端口都是配置文件裏指定的端口,其中1234是工做端口,負責對外提供數據庫讀寫服務的,2345端口是mysql-proxy管理端口。
管理端口登陸的用戶名默認:user,默認密碼:pwd

  • 登陸管理端口:
    mysql -h127.0.0.1 -uadmin -p -P2345
    根據提示:use ‘SELECT * FROM help’ to see the supported commands
    輸入SELECT * FROM help;
+----------------------------+---------------------------------------------------------+
| command | description |
+----------------------------+---------------------------------------------------------+
| SELECT * FROM help | shows this help |
| SELECT * FROM backends | lists the backends and their state |
| SET OFFLINE $backend_id | offline backend server, $backend_id is backend_ndx's id |
| SET ONLINE $backend_id | online backend server, ... |
| ADD MASTER $backend | example: "add master 127.0.0.1:3306", ... |
| ADD SLAVE $backend | example: "add slave 127.0.0.1:3306", ... |
| REMOVE BACKEND $backend_id | example: "remove backend 1", ... |
| SELECT * FROM clients | lists the clients |
| ADD CLIENT $client | example: "add client 192.168.1.2", ... |
| REMOVE CLIENT $client | example: "remove client 192.168.1.2", ... |
| SELECT * FROM pwds | lists the pwds |
| ADD PWD $pwd | example: "add pwd user:raw_password", ... |
| ADD ENPWD $pwd | example: "add enpwd user:encrypted_password", ... |
| REMOVE PWD $pwd | example: "remove pwd user", ... |
| SAVE CONFIG | save the backends to config file |
| SELECT VERSION | display the version of Atlas |
+----------------------------+---------------------------------------------------------+

查看backend節點狀態:SELECT * FROM backends;

+-------------+---------------------+-------+------+
| backend_ndx | address | state | type | +-------------+---------------------+-------+------+
|           1 | 192.168.100.55:3306 | up    | rw   |
|           2 | 192.168.100.54:3306 | up    | ro   |
| 3 | 192.168.100.53:3306 | up | ro | +-------------+---------------------+-------+------+
3 rows in set (0.00 sec)

關閉一個節點:set offlne 2;

+-------------+---------------------+---------+------+
| backend_ndx | address | state | type | +-------------+---------------------+---------+------+
| 2 | 192.168.100.54:3306 | offline | ro | +-------------+---------------------+---------+------+

移除一個節點:remove backend 2;

mysql> remove backend 2;
Empty set (0.00 sec)

mysql> SELECT * FROM backends; +-------------+---------------------+-------+------+
| backend_ndx | address | state | type | +-------------+---------------------+-------+------+
|           1 | 192.168.100.55:3306 | up    | rw   |
| 2 | 192.168.100.53:3306 | up | ro | +-------------+---------------------+-------+------+

保存配置:SAVE CONFIG;
添加一個節點:add slave 192.168.100.54:3306

mysql> SELECT * FROM backends; +-------------+---------------------+-------+------+
| backend_ndx | address | state | type | +-------------+---------------------+-------+------+
|           1 | 192.168.100.55:3306 | up    | rw   |
|           2 | 192.168.100.53:3306 | up    | ro   |
| 3 | 192.168.100.54:3306 | up | ro | +-------------+---------------------+-------+------+
3 rows in set (0.00 sec)
  • 登陸工做端口:
    mysql -h127.0.0.1 -uadmin -p -P1234
    輸入admin密碼進行登陸,而後就能夠查看一下數據庫show databases;
    可否看到受權的數據庫,不能看到的話從新受權admin用戶。
    而後查詢server_idshow variables like 'server_id';
+---------------+-------+
| Variable_name | Value | +---------------+-------+
| server_id | 3 | +---------------+-------+

再次查看show variables like 'server_id

+---------------+-------+
| Variable_name | Value | +---------------+-------+
| server_id | 2 | +---------------+-------+

負載均衡已經實現。

2.4.2 網頁測試

確保配置文件已經添加web端地址,可以遠程訪問atlas的工做端口。我這裏web程序搭建在52上。因此在52上進行測試登陸atlas工做端口:
主機52:mysql -h192.168.100.54 -uadmin -p -P1234若是不能鏈接請檢查atlas配置文件配置的容許登陸地址和倆機器的防火牆狀態。

  • 接下來新建php進行測試
    確保主從複製打開的狀況下,在主庫新建數據庫,數據表並插入數據。或找個數據表導入進去。

    • 查詢和讀寫分離:
      這時更改從數據庫上的表數據53和54分別添加標識
<?php $connect=mysqli_connect('192.168.100.54','admin','mha_admin','mha','1234'); $sql='select name from aty_menu'; mysqli_query($connect,'set names utf8'); $result=mysqli_query($connect,$sql); $arr=array();//定義空數組 while($row =mysqli_fetch_array($result)){ //var_dump($row); //array_push(要存入的數組,要存的值) array_push($arr,$row); } var_dump($arr);

而後打開瀏覽器進行訪問,而後ctrl+f5進行刷新能夠看到,分別讀取兩個數據庫。而且並不會讀取到主庫,說明讀寫分離和只讀負載均衡已經實現
53
54



參考資料:《MHA高可用架構與Atlas讀寫分離》做者:慘綠少年

相關文章
相關標籤/搜索