MySQL 主從複製 + MySQL Router 部署測試

4個節點mysql

一、MySQLDB1  192.168.1.41  (MySQL 主節點)linux

二、MySQLDB2  192.168.1.42  (MySQL從節點)sql

三、MySQLDB3  192.168.1.43  (MySQL從節點)數據庫

四、MySQLRouter  192.168.1.47  (MySQLRouter服務節點)後端


軟件版本說明:安全

一、操做系統  CentOS6.6_x86_64bash

二、MySQLServer  5.7.16服務器

三、MySQLRouter  2.0.4app


1、部署MySQL主從複製socket

----------------------- 複製建立及配置主要步驟 -----------------------------------------

一、Master 端啓用二進制日誌,指定惟一的 server_id

二、Slave 端配置惟一的 server_id

三、Master 端建立複製專用賬號

四、記錄 Master 端日誌信息並建立鏡像

五、配置 Slave 端的鏈接

-------------------------------------------------------------------------------------------

一、系統平臺: CentOS 6.6 (64位)

二、軟件版本:mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz

三、爲了模擬現實環境狀況作以下前提條件假設:

     1)、在搭建Master和Salve1時爲一個全新的環境,即主數據庫中無任何數據,Master和Slave1均爲新環境部署

     2)、在現有複製環境(Master+Slave1)中新增一個Slave2節點,現有複製環境中已有數據存在和修改過程執行

     3)、Master節點的端口爲3306,Slave1節點端口爲3306,Slave2節點端口爲3306

     4)、爲了部署方便,安裝包使用二進制程序進行部署


-----------------------------------------  部署實現過程  -----------------------------------------------

一、用戶及相關目錄建立

--MySQLDB1 節點

[root@mysqldb1 ~]# groupadd mysql

[root@mysqldb1 ~]# useradd mysql -g mysql

[root@mysqldb1 ~]# mkdir /mysql

[root@mysqldb1 ~]# mkdir /mytmp

[root@mysqldb1 ~]# passwd mysql


--MySQLDB2 節點

[root@mysqldb2 ~]# groupadd mysql

[root@mysqldb2 ~]# useradd mysql -g mysql

[root@mysqldb2 ~]# mkdir /mysql

[root@mysqldb2 ~]# mkdir /mytmp

[root@mysqldb2 ~]# passwd mysql


--MySQLDB3 節點

[root@mysqldb3 ~]# groupadd mysql

[root@mysqldb3 ~]# useradd mysql -g mysql

[root@mysqldb3 ~]# mkdir /mysql

[root@mysqldb3 ~]# mkdir /mytmp

[root@mysqldb3 ~]# passwd mysql


二、設置用戶操做系統資源的限制

--以免在啓動mysql服務是會報:

2017-04-11 17:27:03 3175 [Warning] Buffered warning: Changed limits: max_open_files: 1024 (requested 5000)

2017-04-11 17:27:03 3175 [Warning] Buffered warning: Changed limits: table_open_cache: 431 (requested 2000)

之類的警告信息


[root@mysqla ~]# vi /etc/security/limits.conf

在文件的最後添加以下內容

mysql soft nproc 2047

mysql hard nproc 16384

mysql soft nofile 1024

mysql hard nofile 65535


三、解壓上傳的二進制安裝包程序並複製到目標目錄下

--MySQLDB1 節點

[root@mysqldb1 mytmp]# tar -xzvf mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz 

[root@mysqldb1 mytmp]# mv mysql-5.7.16-linux-glibc2.5-x86_64 /mysql/3306


--MySQLDB2 節點

[root@mysqldb2 mytmp]# tar -xzvf mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz 

[root@mysqldb2 mytmp]# mv mysql-5.7.16-linux-glibc2.5-x86_64 /mysql/3306


--MySQLDB3 節點

[root@mysqldb3 mytmp]# tar -xzvf mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz 

[root@mysqldb3 mytmp]# mv mysql-5.7.16-linux-glibc2.5-x86_64 /mysql/3306


四、便於方便管理建立單獨的日誌文件存放目錄

--MySQLDB1 節點

[root@mysqldb1 3306]# mkdir logs


--MySQLDB2 節點

[root@mysqldb2 3306]# mkdir logs


--MySQLDB3 節點

[root@mysqldb3 3306]# mkdir logs


五、目錄權限修改

--MySQLDB1 節點

[root@mysdb1 ~]# chown -R mysql:mysql /mysql


--MySQLDB2 節點

[root@mysqldb2 ~]# chown -R mysql:mysql /mysql


--MySQLDB3 節點

[root@mysqldb3 ~]# chown -R mysql:mysql /mysql


六、數據庫初始化安裝

--MySQLDB1 節點

[root@mysqldb1 ~]# su - mysql

[mysql@mysqldb1 ~]$ cd /mysql/3306

[mysql@mysqldb1 3306]$ ./bin/mysqld  --initialize --user=mysql --basedir=/mysql/3306 --datadir=/mysql/3306/data


--MySQLDB2 節點

[root@mysqldb2 ~]# su - mysql

[mysql@mysqldb2 ~]$ cd /mysql/3306

[mysql@mysqldb2 3306]$ ./bin/mysqld  --initialize --user=mysql --basedir=/mysql/3306 --datadir=/mysql/3306/data


--MySQLDB3 節點

[root@mysqldb3 ~]# su - mysql

[mysql@mysqldb3 ~]$ cd /mysql/3306

[mysql@mysqldb3 3306]$ ./bin/mysqld  --initialize --user=mysql --basedir=/mysql/3306 --datadir=/mysql/3306/data


注:一、數據庫初始化的命令與5.6版本有所不一樣

        二、數據庫初始化完後,會自動爲 root 用戶生成一個密碼,記住該密碼,

             不過該密碼很快很過時,因此須要在配置文件添加 skip-grant-tables 來啓動數據庫實例

      三、安裝aio依賴包: yum  install  libaio*


七、參數文件配置

--MySQLDB1 節點  /mysql/3306/my.cnf

[client]

default_character_set = utf8

port = 3306

socket = /tmp/mysql3306.sock


[mysqld]

basedir = /mysql/3306

datadir = /mysql/3306/data

user = mysql

port = 3306

server_id = 13306

character_set_server = utf8

socket = /tmp/mysql3306.sock

pid-file = /tmp/mysql3306.pid

log-bin = /mysql/3306/logs/bin_log

relay-log = /mysql/3306/logs/relay_log

log-error = /mysql/3306/logs/mysql_error.log

explicit_defaults_for_timestamp = true

expire_logs_days = 10

max_binlog_size = 100M

binlog-do-db = testdb   #複製數據庫名稱

binlog-ignore-db = mysql


--MySQLDB2 節點 /mysql/3306/my.cnf

[client]

default_character_set = utf8

port = 3306

socket = /tmp/mysql3306.sock


[mysqld]

basedir = /mysql/3306

datadir = /mysql/3306/data

user = mysql

port = 3306

server_id = 23306

character_set_server = utf8

socket = /tmp/mysql3306.sock

pid-file = /tmp/mysql3306.pid

log-bin = /mysql/3306/logs/bin_log

relay-log = /mysql/3306/logs/relay_log

log-error = /mysql/3306/logs/mysql_error.log

explicit_defaults_for_timestamp = true

expire_logs_days = 10

max_binlog_size = 100M


--MySQLDB3 節點 /mysql/3306/my.cnf

[client]

default_character_set = utf8

port = 3306

socket = /tmp/mysql3306.sock


[mysqld]

basedir = /mysql/3306

datadir = /mysql/3306/data

user = mysql

port = 3306

server_id = 33306

character_set_server = utf8

socket = /tmp/mysql3306.sock

pid-file = /tmp/mysql3306.pid

log-bin = /mysql/3306/logs/bin_log

relay-log = /mysql/3306/logs/relay_log

log-error = /mysql/3306/logs/mysql_error.log

explicit_defaults_for_timestamp = true

expire_logs_days = 10

max_binlog_size = 100M


八、清理配置參數文件

在Linux平臺下,mysql程序默認會按照如下順序掃描路徑尋找配置文件

/etc/my.cnf

/etc/mysql/my.cnf

SYSCONFDIR/my.cnf   #經過CMake源代碼編譯時指定的SYSCONFDIR的參數指定的路徑

$MYSQL_HOME/my.cnf  #MYSQL_HOME環境變量所在路徑,即mysql安裝路徑(basedir)

~/.my.cnf  #~表示到當更前用戶根目錄下尋找


經過命令  find  /  -iname  my.cnf  查詢配置文件的存在性,僅保留 MYSQL_HOME/my.cnf 配置文件。


注:使用以下命令可查看mysql實例的配置文件搜索順序

[root@mysqldb1 bin]# mysql --help | grep '/my.cnf'


九、配置啓動腳本

--MySQLDB1 節點實例

[root@mysqla 3306]# cp support-files/mysql.server /etc/init.d/mysql3306

[root@mysqla 3306]# vi /etc/init.d/mysql3306

將以下內容

#basedir=...

#datadir=...

修改成:

basedir=/mysql/3306

datadir=/mysql/3306/data


--MySQLDB2 節點實例

[root@mysqlb 3306]# cp support-files/mysql.server /etc/init.d/mysql3306

[root@mysqlb 3306]# vi /etc/init.d/mysql3306

將以下內容

#basedir=...

#datadir=...

修改成:

basedir=/mysql/3306

datadir=/mysql/3306/data


--MySQLDB3 節點實例

[root@mysqlc 3306]# cp support-files/mysql.server /etc/init.d/mysql3306

[root@mysqlc 3306]# vi /etc/init.d/mysql3306

將以下內容

#basedir=...

#datadir=...

修改成:

basedir=/mysql/3306

datadir=/mysql/3306/data


十、數據庫服務啓動

--MySQLDB1 節點

[mysql@mysqldb1 ~]$ service  mysql3306  start


--MySQLDB2 節點

[mysql@mysqldb2 ~]$ service  mysql3306  start


--MySQLDB3 節點

[mysql@mysqldb3 ~]$ service  mysql3306  start


十一、登陸數據庫以添加遠程登陸賬號信息

[mysql@mysqldb1 ~]$ mysql -u root -p  -P 3306 --socket=/tmp/mysql3306.sock

[mysql@mysqldb2 ~]$ mysql -u root -p  -P 3306 --socket=/tmp/mysql3306.sock

[mysql@mysqldb3 ~]$ mysql -u root -p  -P 3306 --socket=/tmp/mysql3306.sock


注:使用mysql用戶執行上述命令前,先配置相關環境變量值

/home/mysql/.bash_profile

添加以下內容:

MYSQL3306HOME=/mysql/3306

PATH=$PATH:$MYSQL3306HOME/bin

export MYSQL3306HOME PATH


注:上述登陸數據庫是需有參數  --socket ,不然會報出以下錯誤:

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock


--爲了安全起見,先刪除默認生成的用戶相關信息在建立一個指定名稱的數據庫管理員賬號

mysql> set  password  for  root@localhost  = password('rootroot');

mysql> delete from mysql.db;

mysql> delete from mysql.user;

mysql> grant all privileges on *.* to 'sysadmin'@'localhost' identified by 'mysql' with grant option;

mysql> grant all privileges on *.* to 'sysadmin'@'127.0.0.1' identified by 'mysql' with grant option;

mysql> flush privileges;

mysql> select host,user from user where user='sysadmin';


--退出當前鏈接,再次登陸數據庫,以驗證新建數據庫管理員賬號的合法性

--以 MySQLDB1 節點爲例測試

mysql> exit;

[mysql@mysqldb1 ~]$ mysql -h localhost -u sysadmin -p -P 3306 -S /tmp/mysql3306.sock

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 3

Server version: 5.7.16-log MySQL Community Server (GPL)


Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql>


--注:爲了安全的須要,上述的鏈接數據庫命令行中密碼沒有直接寫出,而是在使用 -p 參數,再在提示符行中輸入密碼


確認有當前添加的用戶便可進行遠程登陸數據庫。


十二、設置數據庫自動啓動

--MySQLDB1 節點

[root@mysqldb1 ~]# chkconfig --add mysql3306

[root@mysqldb1 ~]# chkconfig mysql3306 --list

mysql3306 0:off 1:off 2:on 3:on 4:on 5:on 6:off

[root@mysqldb1 ~]# 


--MySQLDB2 節點

[root@mysqldb2 ~]# chkconfig --add mysql3306

[root@mysqldb2 ~]# chkconfig mysql3306 --list

mysql3306 0:off 1:off 2:on 3:on 4:on 5:on 6:off

[root@mysqldb2 ~]# 


--MySQLDB3 節點

[root@mysqldb3 ~]# chkconfig --add mysql3306

[root@mysqldb3 ~]# chkconfig mysql3306 --list

mysql3306 0:off 1:off 2:on 3:on 4:on 5:on 6:off

[root@mysqldb3 ~]# 


1三、重啓系統驗證數據庫自動啓動服務功能

--重啓系統

[root@mysqldb1 ~]#  shutdown -r now

[root@mysqldb2 ~]#  shutdown -r now

[root@mysqldb3 ~]#  shutdown -r now


--查看數據庫服務是否隨系統啓動

--MySQLDB1 節點

[root@mysqldb1 ~]# service mysql3306 status

MySQL running (2122) [ OK ]

[root@mysqldb1 ~]# 


--MySQLDB2 節點

[root@mysqldb2 ~]# service mysql3306 status

MySQL running (2117) [ OK ]

[root@mysqldb2 ~]# 


--MySQLDB3 節點

[root@mysqldb3 ~]# service mysql3306 status

MySQL running (2119) [ OK ]

[root@mysqldb3 ~]# 


1四、在master節點建立複製專業賬號

mysql> grant replication slave on *.* to 'repl'@'%' identified by 'repl';

Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)


1五、查看 master 主機信息 (slave 服務器配置須要改信息)

[mysql@mysqldb1 ~]$ mysql -h localhost -u sysadmin -p -P 3306 -S /tmp/mysql3306.sock

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 3

Server version: 5.7.16-log MySQL Community Server (GPL)


Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> show master status \G

*************************** 1. row ***************************

                        File: mysql_bin.000004

                Position: 403

      Binlog_Do_DB: test

 Binlog_Ignore_DB: mysql

 Executed_Gtid_Set:

1 row in set (0.00 sec)

mysql> 


1六、在 MySQLDB2 節點配置複製,並啓動複製

mysql> show slave status \G

Empty set (0.00 sec)

mysql> change master to

    -> master_host='192.168.1.41',

    -> master_port=3306,

    -> master_user='repl',

    -> master_password='repl',

    -> master_log_file='mysql_bin.000004',

    -> master_log_pos=403;

Query OK, 0 rows affected, 2 warnings (0.06 sec)

mysql> start slave;

Query OK, 0 rows affected (0.17 sec)

mysql> 


1七、複製功能測試

--MySQLDB1 節點

mysql> create database testdb;

mysql> use testdb;

Database changed

mysql> select database();

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

| database() |

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

| testdb |

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

1 row in set (0.00 sec)

mysql> create table t1(id int, name varchar(20));

Query OK, 0 rows affected (1.71 sec)

mysql> select * from t1;

Empty set (0.00 sec)

mysql> insert into t1 (id,name) values(1,'yangchao');

Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;

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

| id | name |

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

| 1 | yangchao |


--MySQLDB1 節點

mysql> select * from t1;

Empty set (0.01 sec)

mysql> select * from t1;

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

| id | name |

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

| 1 | yangchao |

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

1 row in set (0.00 sec)

mysql> 


----------------------- 複製功能正常 --------------------------------------


------------------ 動態添加 MySQLDB3 節點(innobackupex) ---------------------------

1八、在 MySQLDB1 節點執行全庫備份

[root@mysqldb1 ~]#  innobackupex --user=sysadmin --password=mysql --socket=/tmp/mysql3306.sock --defaults-file=/mysql/3306/my.cnf --slave-info /home/mysql


xtrabackup: Error: --defaults-file must be specified first on the command line

----提示配置文件參數必須放在第一位

[root@mysqldb1 ~]#  innobackupex --defaults-file=/mysql/3306/my.cnf --user=sysadmin --password=mysql --socket=/tmp/mysql3306.sock  --slave-info /home/mysql


1九、將 /home/mysql/yyyy-mm-dd_hh24-mi-ss 這個文件夾拷貝到 Salve2 節點的 /home/mysql 目錄下


注:或者直接用 scp 命令拷貝

scp  -r  /home/mysql/yyyy-mm-dd_hh24-mi-ss  root@mysrvc:/home/mysql


20、中止 MySQLDB3 節點上的mysql實例,並備份 data 目錄

[root@mysqldb3 ~]# service mysql3306 stop

[root@mysqldb3 ~]# cd /mysql/3306

[root@mysqldb3 3306]# mv data data.bak


2一、執行恢復

[root@mysqldb3 3306]# innobackupex --defaults-file=/mysql/3306/my.cnf --user=sysadmin --apply-log /home/mysql/yyyy-mm-dd_hh24-mi-ss

[root@mysqldb3 3306]# innobackupex --defaults-file=/mysql/3306/my.cnf --user=sysadmin --copy-back /home/mysql/yyyy-mm-dd_hh24-mi-ss


2二、修改 data 目錄全部者權限  (若是使用mysql用戶備份操做時,則無需作目錄全部者權限修改)

[root@mysqldb3 3306]# chown -R mysql:mysql data


2三、啓動數據庫實例

[root@mysqldb3 3306]# service mysql3306 start


2四、在 MySQLDB3 節點查看 Master 節點的二進制文件名和位置信息

[root@mysqldb3 3306]# cat data/xtrabackup_binlog_pos_innodb

mysql_bin.000004 976

[root@mysqldb3 3306]# 


2五、配置 MySQLDB3 節點複製信息

[root@mysqldb3 3306]#  su - mysql

[mysql@mysqldb3 ~]# mysql -u sysadmin -pmysql -P 3306 --socket=/tmp/mysql3306.sock


mysql> show slave status \G

Empty set (0.00 sec)

mysql> change master to

    -> master_host='192.168.1.41',

    -> master_port=3306,

    -> master_user='repl',

    -> master_password='repl',

    -> master_log_file='mysql_bin.000004',

    -> master_log_pos=976;

Query OK, 0 rows affected, 2 warnings (0.06 sec)

mysql> start slave;

Query OK, 0 rows affected (0.17 sec)

mysql> 


2六、在 MySQLDB3 啓動複製功能

mysql> start save;


2七、測試

在 MySQLDB1節點的test數據庫中執行建立數據表或數的更新操做,驗證在 MySQLDB2 和 MySQLDB3 節點的test數據庫中是否正常複製。



============================================

MySQL主從複製幾個重要的啓動選項

(1)、log-slave-updates

  log-slave-updates 這個參數用來配置從服務器的更新是否寫入二進制日誌,這個選項默認是不打開的,可是,若是這個從服務器B是服務器A的從服務器,同時還做爲服務器C的主服務器,那麼就須要開發這個選項,這樣它的從服務器C才能得到它的二進制日誌進行同步操做。


(2)、master-connect-retry

  master-connect-retry 這個參數是用來設置在和主服務器鏈接丟失的時候,重試的時間間隔,默認是60秒。

(3)、read-only

  read-only是用來限制普通用戶對從數據庫的更新操做,以確保從數據庫的安全性,不過若是是超級用戶依然能夠對從數據庫進行更新操做。


(4)、slave-skip-errors

  在複製過程當中,因爲各類的緣由,從服務器可能會遇到執行BINLOG中的SQL出錯的狀況,在默認狀況下,服務器會中止複製進程,再也不進行同步,等到用戶自行來處理。

  Slave-skip-errors的做用就是用來定義複製過程當中從服務器能夠自動跳過的錯誤號,當複製過程當中遇到定義的錯誤號,就能夠自動跳過,直接執行後面的SQL語句。

  --slave-skip-errors=[err1,err2,…….|ALL]

  但必須注意的是,啓動這個參數,若是處理不當,極可能形成主從數據庫的數據不一樣步,在應用中須要根據實際狀況,若是對數據完整性要求不是很嚴格,那麼這個選項確實能夠減輕維護的成本

===================================================



2、部署MyRouter服務

一、解壓安裝程序文件

[root@mysqlrouter mytmp]#  tar -xzvf mysql-router-2.0.4-linux-glibc2.12-x86-64bit.tar.gz


二、重命名安裝文件夾

[root@mysqlrouter mytmp]#  mv mysql-router-2.0.4-linux-glibc2.12-x86-64bit /usr/local/mysqlrouter


三、建立日誌和配置相關文件存放目錄

[root@mysqlrouter mytmp]# cd /usr/local/mysqlrouter

[root@mysqlrouter mysqlrouter]# mkdir logs

[root@mysqlrouter mysqlrouter]# mkdir etc


四、建立配置文件 (利用模板文件建立)

[root@mysqlrouter mysqlrouter]#cp share/doc/mysqlrouter/sample_mysqlrouter.ini ./etc/mysqlrouter.ini


配置項內容以下:

[DEFAULT]

logging_folder = /usr/local/mysqlrouter/logs

plugin_folder = /usr/local/mysqlrouter/lib/mysqlrouter

config_folder = /usr/local/mysqlrouter/etc

runtime_folder = /usr/local/mysqlrouter/run


[logger]

level = INFO


[routing:read_write]

bind_address = 192.168.1.47

bind_port = 7001

mode = read-write

destinations = 192.168.1.41:3306

max_connections = 65535

max_connect_errors = 100

client_connect_timeout = 9


[routing:read_only]

bind_address = 192.168.1.47

bind_port = 7002

mode = read-only

destinations = 192.168.1.42:3306,192.168.1.43:3306

max_connections = 65535

max_connect_errors = 100

client_connect_timeout = 9


[keepalive]

interval = 60


:參數說明

bind_address  指定mysql router綁定的服務器

bind_port         指定綁定的端口

destinations     指定後端mysql server 列表 (ip:port 格式,使用逗號分隔)

mode               讀寫模式(read-write, read_only)


五、啓動 mysql router

[root@mysqlrouter mysqlrouter]# cd bin

[root@mysqlrouter bin]# ./mysqlrouter  -c  /usr/local/mysqlrouter/etc/mysqlrouter.ini  &

wKiom1juANWglz3vAABEkfKpIBU547.png-wh_50


3、驗證測試

一、讀寫分離測試

讀寫分離是經過在配置文件中配置的不一樣端口實現

因爲mysqlrouter節點未安裝mysql客戶端程序,因此在mysqldb1節點測試

登陸寫節點:端口7001

mysql  -h  192.168.1.47  -u  yangchao  -p -P 7001

wKioL1juAUXStkYVAABbKOpN6hY778.png-wh_50

登陸讀節點:端口7002

mysql  -h  192.168.1.47  -u  yangchao  -p -P 7002

wKioL1juAX2DLqX5AAC5EVBuNrs335.png-wh_50

由上測試可知:兩次從7002讀取端口登陸的主機節點都是在配置文件中配置的只讀節點。


二、讀取複製均衡測試

登陸讀節點:端口7002

mysql  -h  192.168.1.47  -u  yangchao  -p -P 7002

wKiom1juAZaQT8JWAAC5xXvMy0M004.png-wh_50

wKioL1juAa6ASCAIAAC6tat8H8I885.png-wh_50

由上測試的4次經過登陸讀取端口7002可知,分別在mysqldb2,mysqldb3兩個讀取節點間輪詢訪問,實現了讀取操做的複製均衡功能。


三、高可用測試

1)、讀取節點的高可用性:

先關閉讀取節點mysqldb2

wKioL1juAcuBQBn7AAAsr7qhy64862.png-wh_50

mysql  -h  192.168.1.47  -u yangchao  -p  -P  7002

wKiom1juAeeC8TEeAAC5bTMHn2k987.png-wh_50

由上測試可知:兩次的7002端口登陸都是在存活節點mysqldb3上。


2)、讀寫節點的高可用性:

修改配置文件,爲讀寫節點配置以下:

[routing:read_write]

bind_address = 192.168.1.47

bind_port = 7001

mode = read-write

destinations = 192.168.1.41:3306,192.168.1.42:3306


中止讀寫節點 mysqldb1

wKioL1juAf2gE7buAAAstyhlL3g952.png-wh_50

登陸 7001 端口:

wKioL1juAjGDiJhkAABqeGk7AxI386.png-wh_50

登陸的是 mysqldb2 節點實例


插入記錄測試:

wKiom1juAkvjw7t3AABO6D9kxEE036.png-wh_50

能成功插入數據。


在讀取節點查看記錄是否同步:

mysql  -h  localhost  -u  yangchao  -p  -P 3306  -S  /tmp/mysql3306.sock

wKiom1juAmHSNvJaAAB3i2EIeuw233.png-wh_50


由上測試可知:讀寫的主節點能夠實現故障切換,但並不能實現其複製角×××轉變。


注:

一、在從新啓動mysqldb1 節點實例服務後,再登陸讀寫節點時也並不能登陸到mysqldb1實例了,須要從新啓動mysqlrouter服務後,方能實現登陸讀寫節點是mysqldb1節點主機。

二、因爲其複製均衡採用的是輪詢的方式,經測試愛多個從節點中某個實例故障後,mysqlrouter仍然會輪詢訪問該故障節點,因此其僅實現的簡單輪詢負載而已,不能對節點狀態實時監控。

三、本測試案例未考慮mysqlrouter的高可用性,其高可用性的實現可使用keepalived。

相關文章
相關標籤/搜索