为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL5.7MHA+MaxScale2.0构建高可用环境

标签:
MySQL


wKiom1gcMPnQK8fWAAA4eVx2Dz8985.jpg

wKioL1gcMPnydlzeAAA4pG6yXEQ878.jpg

MySQL读写分离与负载均衡--MHA与MaxScale

环境介绍

Part1:写在最前

看了某大牛的文章,讲述了一下MaxScale比LVS的好处多多,那您倒是放出来配置文件啊~~大牛说:

需要的单独找我吧,太长了配置文件……

看到这我心中久久不能平静啊。。。联系不上您呐 = =,于是各种资料各种找啊~各种坑各种血崩啊!~~~

由于不知道大牛的配置文件是什么样子,本文仅以随笔的形式,记录下实施过程。也欢迎您和我探讨您在实施MaxScale时遇到的各种问题和心得体会。

Part2:环境

MySQL5.7 MHA + MaxScale2.0

192.168.1.248 HE1 slave1

192.168.1.249 HE2 slave2

192.168.1.250 HE3 master

192.168.1.251 HE4 MHA-manager

192.168.1.100 MHA-vip

Part3:MHA

MHA的优点不作赘述,看下原理图吧

wKiom1gcNACS7VgfAADRIe97uls710.jpg

从宕机崩溃的Master保存二进制日志事件(binlogevent)

识别含有最新更新的Slave

应用差异的中继日志(relaylog)到其他Slave

应用从Master保存的二进制日志事件

提升一个Slave为新的Master

使其他的Slave连接新的Master进行复制

构建MySQL5.7MHA

Part1:写在最前

MHA的部署不是本文的叙述重点,网上比比皆是。这里只记录下MySQL5.7的MHA搭建时的一些坑

Part2:坑

①mha4mysql-manager-0.57.tar.gz

②mha4mysql-node-0.57.tar.gz

Warning:警告这两个包首先你要搞到,虽然说0.56什么的不代表支持的mysql版本,但经过测试,想要在MySQL5.7上部署MHA,少走坑,请用0.57的。

Part3:安装包的位置

请在所有的节点包括Manager节点安装好你的mha4mysql-node-0.57.tar.gz,以保证后期在管理节点执行perl Makefile.PL的时候,你能如愿以偿的看到如下信息

[root@HE4 mha4mysql-manager-0.57]# perl Makefile.PL 

*** Module::AutoInstall version 1.06

*** Checking for Perl dependencies...

[Core Features]

- DBI                   ...loaded. (1.609)

- DBD::mysql            ...loaded. (4.013)

- Time::HiRes           ...loaded. (1.9721)

- Config::Tiny          ...loaded. (2.12)

- Log::Dispatch         ...loaded. (2.26)

- Parallel::ForkManager ...loaded. (0.7.5)

- MHA::NodeConst        ...loaded. (0.57)

*** Module::AutoInstall configuration finished.

Writing Makefile for mha4mysql::manager

Part4:一些常见错误记录

如果遇到

①这样

[root@HE2 bin]# masterha_check_repl --conf=/etc/mha/mha.conf 

Tue Apr  5 22:09:32 2016 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.

Tue Apr  5 22:09:32 2016 - [info] Reading application default configuration from /etc/mha/mha.conf..

Tue Apr  5 22:09:32 2016 - [info] Reading server configuration from /etc/mha/mha.conf..

Tue Apr  5 22:09:32 2016 - [info] MHA::MasterMonitor version 0.57.

Tue Apr  5 22:09:32 2016 - [error][/usr/local/lib64/perl5/MHA/ServerManager.pm, ln188] There is no alive server. We can't do failover

Tue Apr  5 22:09:32 2016 - [error][/usr/local/lib64/perl5/MHA/MasterMonitor.pm, ln424] Error happened on checking configurations.  at /usr/local/lib64/perl5/MHA/MasterMonitor.pm line 326

Tue Apr  5 22:09:32 2016 - [error][/usr/local/lib64/perl5/MHA/MasterMonitor.pm, ln523] Error happened on monitoring servers.

Tue Apr  5 22:09:32 2016 - [info] Got exit code 1 (Not master dead).

解决方案

用的不是默认端口3306,请修改你的配置文件

②这样

[root@HE4 ~]#

masterha_check_repl --conf=/etc/mha/mha.conf

Tue Apr  5 22:36:33 2016 - [warning] Global

configuration file /etc/masterha_default.cnf not found. Skipping.

Tue Apr  5 22:36:33 2016 - [info] Reading application

default configuration from /etc/mha/mha.conf..

Tue Apr  5 22:36:33 2016 - [info] Reading server

configuration from /etc/mha/mha.conf..

Tue Apr  5 22:36:33 2016 - [info] MHA::MasterMonitor

version 0.57.

Tue Apr  5 22:36:34 2016 - [info] GTID failover mode =

0

Tue Apr  5 22:36:34 2016 - [info] Dead Servers:

Tue Apr  5 22:36:34 2016 - [info] Alive Servers:

Tue Apr  5 22:36:34 2016 - [info]   192.168.1.250(192.168.1.250:4008)

Tue Apr  5 22:36:34 2016 - [info]   192.168.1.248(192.168.1.248:4008)

Tue Apr  5 22:36:34 2016 - [info]   192.168.1.249(192.168.1.249:4008)

Tue Apr  5 22:36:34 2016 - [info] Alive Slaves:

Tue Apr  5 22:36:34 2016 - [info]   192.168.1.248(192.168.1.248:4008)  Version=5.6.16-log (oldest major version

between slaves) log-bin:enabled

Tue Apr  5 22:36:34 2016 - [info]     Replicating from

192.168.1.250(192.168.1.250:4008)

Tue Apr  5 22:36:34 2016 - [info]     Primary candidate for the new Master

(candidate_master is set)

Tue Apr  5 22:36:34 2016 - [info]   192.168.1.249(192.168.1.249:4008)  Version=5.6.16-log (oldest major version

between slaves) log-bin:enabled

Tue Apr  5 22:36:34 2016 - [info]     Replicating from

192.168.1.250(192.168.1.250:4008)

Tue Apr  5 22:36:34 2016 - [info]     Not candidate for the new Master

(no_master is set)

Tue Apr  5 22:36:34 2016 - [info] Current Alive

Master: 192.168.1.250(192.168.1.250:4008)

Tue Apr  5 22:36:34 2016 - [info] Checking slave

configurations..

Tue Apr  5 22:36:34 2016 - [warning]  relay_log_purge=0 is not set on slave

192.168.1.248(192.168.1.248:4008).

Tue Apr  5 22:36:34 2016 - [warning]  relay_log_purge=0 is not set on slave

192.168.1.249(192.168.1.249:4008).

Tue Apr  5 22:36:34 2016 - [info] Checking replication

filtering settings..

Tue Apr  5 22:36:34 2016 - [info]  binlog_do_db= , binlog_ignore_db=

Tue Apr  5 22:36:34 2016 - [info]  Replication filtering check ok.

Tue Apr  5 22:36:34 2016 - [info] GTID (with auto-pos)

is not supported

Tue Apr  5 22:36:34 2016 - [info] Starting SSH

connection tests..

Tue Apr  5 22:36:35 2016 - [info] All SSH connection

tests passed successfully.

Tue Apr  5 22:36:35 2016 - [info] Checking MHA Node

version..

Tue Apr  5 22:36:36 2016 - [info]  Version check ok.

Tue Apr  5 22:36:36 2016 - [info] Checking SSH

publickey authentication settings on the current master..

Tue Apr  5 22:36:36 2016 - [info] HealthCheck: SSH to

192.168.1.250 is reachable.

Tue Apr  5 22:36:36 2016 - [info] Master MHA Node

version is 0.57.

Tue Apr  5 22:36:36 2016 - [info] Checking recovery

script configurations on 192.168.1.250(192.168.1.250:4008)..

Tue Apr  5 22:36:36 2016 - [info]   Executing command: save_binary_logs

--command=test --start_pos=4 --binlog_dir=/log/mysql

--output_file=/usr/local/mha/save_binary_logs_test --manager_version=0.57

--start_file=mysql-bin.000009

Tue Apr  5 22:36:36 2016 - [info]   Connecting to

root@192.168.1.250(192.168.1.250:22)..

  Creating /usr/local/mha if not exists..

Creating directory /usr/local/mha.. done.

   ok.

  Checking output directory is accessible or

not..

   ok.

  Binlog found at /log/mysql, up to

mysql-bin.000009

Tue Apr  5 22:36:36 2016 - [info] Binlog setting check

done.

Tue Apr  5 22:36:36 2016 - [info] Checking SSH

publickey authentication and checking recovery script configurations on all

alive slave servers..

Tue Apr  5 22:36:36 2016 - [info]   Executing command : apply_diff_relay_logs

--command=test --slave_user='root' --slave_host=192.168.1.248

--slave_ip=192.168.1.248 --slave_port=4008 --workdir=/usr/local/mha

--target_version=5.6.16-log --manager_version=0.57

--relay_log_info=/data/mysql/relay-log.info 

--relay_dir=/data/mysql/ 

--slave_pass=xxx

Tue Apr  5 22:36:36 2016 - [info]   Connecting to

root@192.168.1.248(192.168.1.248:22)..

Can't exec

"mysqlbinlog": No such file or directory at

/usr/local/lib64/perl5/MHA/BinlogManager.pm line 106.

mysqlbinlog version

command failed with rc 1:0, please verify PATH, LD_LIBRARY_PATH, and client

options

 at /usr/local/bin/apply_diff_relay_logs line

493

Tue Apr  5 22:36:36 2016 -

[error][/usr/local/lib64/perl5/MHA/MasterMonitor.pm, ln205] Slaves settings

check failed!

Tue Apr  5 22:36:36 2016 -

[error][/usr/local/lib64/perl5/MHA/MasterMonitor.pm, ln413] Slave configuration

failed.

Tue Apr  5 22:36:36 2016 -

[error][/usr/local/lib64/perl5/MHA/MasterMonitor.pm, ln424] Error happened on

checking configurations.  at

/usr/local/bin/masterha_check_repl line 48

Tue Apr  5 22:36:36 2016 -

[error][/usr/local/lib64/perl5/MHA/MasterMonitor.pm, ln523] Error happened on

monitoring servers.

Tue Apr  5 22:36:36 2016 - [info] Got exit code 1 (Not

master dead).

 

MySQL Replication

Health is NOT OK!

解决方案

[root@HE1 MHA]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog

③或者这样

  Binlog found at /log/mysql, up to mysql-bin.000009

Tue Apr  5 22:43:55 2016 - [info] Binlog setting check done.

Tue Apr  5 22:43:55 2016 - [info] Checking SSH publickey authentication and checking recovery script configurations on all alive slave servers..

Tue Apr  5 22:43:55 2016 - [info]   Executing command : apply_diff_relay_logs --command=test --slave_user='root' --slave_host=192.168.1.248 --slave_ip=192.168.1.248 --slave_port=4008 --workdir=/usr/local/mha --target_version=5.6.16-log --manager_version=0.57 --relay_log_info=/data/mysql/relay-log.info  --relay_dir=/data/mysql/  --slave_pass=xxx

Tue Apr  5 22:43:55 2016 - [info]   Connecting to root@192.168.1.248(192.168.1.248:22).. 

mysqlbinlog: unknown variable 'default-character-set=utf8'

mysqlbinlog version command failed with rc 7:0, please verify PATH, LD_LIBRARY_PATH, and client options

 at /usr/local/bin/apply_diff_relay_logs line 493

Tue Apr  5 22:43:55 2016 - [error][/usr/local/lib64/perl5/MHA/MasterMonitor.pm, ln205] Slaves settings check failed!

Tue Apr  5 22:43:55 2016 - [error][/usr/local/lib64/perl5/MHA/MasterMonitor.pm, ln413] Slave configuration failed.

Tue Apr  5 22:43:55 2016 - [error][/usr/local/lib64/perl5/MHA/MasterMonitor.pm, ln424] Error happened on checking configurations.  at /usr/local/bin/masterha_check_repl line 48

Tue Apr  5 22:43:55 2016 - [error][/usr/local/lib64/perl5/MHA/MasterMonitor.pm, ln523] Error happened on monitoring servers.

Tue Apr  5 22:43:55 2016 - [info] Got exit code 1 (Not master dead).

 

解决方案

注释掉my.cnf中的

[client]

#default-character-set=utf8

遇到上述错误别慌张,看日志,根据报错来排查问题。

折腾半天,就为了这个OK

[root@HE4 mha4mysql-manager-0.57]# masterha_check_status --conf=/etc/mha/mha.conf

mha (pid:32726) is running(0:PING_OK), master:192.168.1.250

MaxScale2.0

Part1:写在最前

maxscale是mariadb公司开发的一套数据库中间件,可以很方便的实现读写分离方案;并且提供了读写分离的负载均衡和高可用性保障。另外maxscale对于前端应用而言是透明的,我们可以很方便的将应用迁移到maxscale中实现读写分离方案,来分担主库的压力。maxscale也提供了sql语句的解析过滤功能。这里我们主要讲解maxscale的安装、配置以及注意事项。

wKiom1gcOXiwXdlZAACoNfhmWaU338.jpg

Part2:整体架构

wKiom1gcOaWBZT26AABfoiL5n9U039.jpg

Part3:安装

Maxscale配置很简单

[root@HE3 MHA]# yum -y install maxscale-2.0.1-2.centos.6.x86_64.rpm (只在Maxscale上执行)

[root@HE3 ~]# cat /etc/maxscale.cnf

# MaxScale documentation on GitHub:

# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Documentation-Contents.md

# Global parameters

#

# Number of threads is autodetected, uncomment for manual configuration

# Complete list of configuration options:

# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Getting-Started/Configuration-Guide.md

[maxscale]

threads=auto

# Server definitions

#

# Set the address of the server to the network

# address of a MySQL server.

#

[server1]

type=server

address=192.168.1.248

port=3306

protocol=MySQLBackend

myweight=5

[server2]

type=server

address=192.168.1.249

port=3306

protocol=MySQLBackend

myweight=5

[server3]

type=server

address=192.168.1.100

port=3306

protocol=MySQLBackend

# Monitor for the servers

#

# This will keep MaxScale aware of the state of the servers.

# MySQL Monitor documentation:

# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Monitors/MySQL-Monitor.md

[MySQL Monitor]

type=monitor

module=mysqlmon

servers=server1,server2,server3

user=mysync

passwd=MANAGER

monitor_interval=10000

# Service definitions

#

# Service Definition for a read-only service and

# a read/write splitting service.

#

# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Routers/ReadConnRoute.md

#[Read-Only Service]                       ###只读服务

#type=service

#router=readconnroute

#servers=server1,server2,server3

#user=sys_admin

#passwd=MANAGER

#router_options=slave

# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Routers/ReadWriteSplit.md

[Read-Write Service]                       ####写服务

type=service

router=readwritesplit

enable_root_user=1

servers=server1,server2,server3

user=sys_admin

passwd=MANAGER

weightby=myweight

router_options=slave_selection_criteria=LEAST_GLOBAL_CONNECTIONS

max_slave_connections=1

# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Reference/MaxAdmin.md

[MaxAdmin Service]

type=service

router=cli

#[Read-Only Listener]

#type=listener

#service=Read-Only Service

#protocol=MySQLClient

#port=4008                                  ##读服务启动监听 端口4008

[Read-Write Listener]

type=listener

service=Read-Write Service

protocol=MySQLClient

port=4006                                  ####写服务启动监听 端口

[MaxAdmin Listener]

type=listener

service=MaxAdmin Service

protocol=maxscaled

port=6603                                  ###管理端口

[root@HE3 ~]# /etc/init.d/maxscale start

Starting MaxScale: maxscale (pid 28851) is running...      [  OK  ]

 

[root@HE3 ~]#  netstat -lntp |grep maxscale

tcp        0      0 0.0.0.0:6603                0.0.0.0:*                   LISTEN      29878/maxscale     

tcp        0      0 0.0.0.0:4006                0.0.0.0:*                   LISTEN      29878/maxscale     

[root@HE3 ~]# maxadmin -pmariadb list services

Services.

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

Service Name              | Router Module        | #Users | Total Sessions

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

Read-Only Service         | readconnroute        |      1 |     5

Read-Write Service        | readwritesplit       |      1 |    11

MaxAdmin Service          | cli                  |      2 |     3

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

 

[root@HE3 ~]# maxadmin -pmariadb list servers

Servers.

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

Server             | Address         | Port  | Connections | Status             

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

server1            | 192.168.1.248   |  3306 |           0 | Slave, Running

server2            | 192.168.1.249   |  3306 |           0 | Slave, Running

server3            | 192.168.1.250   |  3306 |           0 | Master, Running

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

至此,MHA+Maxscale的环境就完成了。

读写分离与负载均衡校验

Part1:读写分离

在Master构建相应的测试表

mysql> select * from helei;

+--------+

| a      |

+--------+

| HE3    |

+--------+

3 rows in set (0.00 sec)

在slave1插入数据HE1

mysql> select * from helei;

+------+

| a    |

+------+

| HE3  |

| HE1  |

+------+

在slave2插入数据HE2

mysql> select * from helei;

+------+

| a    |

+------+

| HE3  |

| HE2  |

+------+

现在链接4006读写分离端口,进行数据写入

[root@HE3 ~]#  mysql -h192.168.1.250 -P 4006 -usys_admin -pMANAGER maxscale -e"insert into helei values('写入');"

mysql: [Warning] Using a password on the command line interface can be insecure.

[root@HE3 ~]#  mysql -h192.168.1.250 -P 4008 -usys_admin -pMANAGER maxscale -e"select * from helei;"

mysql: [Warning] Using a password on the command line interface can be insecure.

+--------+

| a      |

+--------+

| HE3    |

| HE1    |

| 写入   |

+--------+

可以看到主库插入完毕后从库已经同步完成,这条查询完成在了HE1(slave1)上

Part2:负载均衡

我们配置的read比例为1:1

[root@HE3 ~]# maxadmin -pmariadb show service "Read-Write Service"

Service 0xef5570

Service:                             Read-Write Service

Router:                              readwritesplit (0x7ff5e8fa6ec0)

State:                               Started

Number of router sessions:           15

Current no. of router sessions:      0

Number of queries forwarded:          41

Number of queries forwarded to master:2 (4.88%)

Number of queries forwarded to slave: 39 (95.12%)

Number of queries forwarded to all:   0 (0.00%)

Connection distribution based on myweight server parameter.

Server               Target %    Connections  Operations

                               Global  Router

server1              50.0%     0       0       0

server2              50.0%     0       0       0

server3              100.0%     0       0       0

Started:                             Thu Nov  3 23:46:27 2016

Root user access:                    Enabled

Backend databases:

192.168.1.248:3306  Protocol: MySQLBackend

192.168.1.249:3306  Protocol: MySQLBackend

192.168.1.100:3306  Protocol: MySQLBackend

Routing weight parameter:            myweight

Users data:                          0xf09370

Total connections:                   16

Currently connected:                 1

[root@HE3 ~]# for i in `seq 1 10`; do mysql -h 192.168.1.250 -P 4006 -usys_admin -pMANAGER maxscale -e "select @@hostname; select sleep(10)" 2>/dev/null & done

[root@HE3 ~]# +------------+

| @@hostname |

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

| HE1        |

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

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

| @@hostname |

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

| HE1        |

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

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

| @@hostname |

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

| HE1        |

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

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

| @@hostname |

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

| HE1        |

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

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

| @@hostname |

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

| HE1        |

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

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

| @@hostname |

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

| HE2        |

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

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

| @@hostname |

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

| HE2        |

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

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

| @@hostname |

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

| HE2        |

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

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

| @@hostname |

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

| HE2        |

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

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

| @@hostname |

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

| HE2        |

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

OK!That's how it works!~

故障测试

Part1:stop slave故障

停止HE1的复制

[root@HE1 ~]# mysql

-uroot -p

Enter password:

Welcome to the MySQL

monitor.  Commands end with ; or \g.

Your MySQL

connection id is 74

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> stop

slave;

Query OK, 0 rows

affected (0.05 sec)

 

[root@HE3 ~]#

maxadmin -pmariadb list servers

Servers.

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

Server             | Address         | Port 

| Connections | Status             

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

server1            | 192.168.1.248   | 

3306 |           0 | Running

server2            | 192.168.1.249   | 

3306 |           0 | Slave,

Running

server3            | 192.168.1.250   | 

3306 |           0 | Master,

Running

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

 

[root@HE3 ~]#  mysql -h192.168.1.250 -P 4006 -usys_admin

-pMANAGER maxscale -e"select * from helei;"

mysql: [Warning]

Using a password on the command line interface can be insecure.

+--------+

| a      |

+--------+

| HE3    |

| HE2    |

| 写入  

|

+--------+

[root@HE3 ~]#  mysql -h192.168.1.250 -P 4006 -usys_admin

-pMANAGER maxscale -e"select * from helei;"

mysql: [Warning]

Using a password on the command line interface can be insecure.

+--------+

| a      |

+--------+

| HE3    |

| HE2    |

| 写入  

|

+--------+

 

可以看出,在slave1故障后,所有的读操作都进入了HE2(slave2);

 

 

 

恢复HE1

 

mysql> start

slave;

Query OK, 0 rows

affected (0.00 sec)

 

 

[root@HE3 ~]#

maxadmin -pmariadb list servers

Servers.

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

Server             | Address         | Port 

| Connections | Status             

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

server1            | 192.168.1.248   | 

3306 |           0 | Slave,

Running

server2            | 192.168.1.249   | 

3306 |           0 | Slave,

Running

server3            | 192.168.1.250   | 

3306 |           0 | Master,

Running

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

 

验证

[root@HE3 ~]#  mysql -h192.168.1.250 -P 4006 -usys_admin

-pMANAGER maxscale -e"select * from helei;"

mysql: [Warning]

Using a password on the command line interface can be insecure.

+--------+

| a      |

+--------+

| HE3    |

| HE2    |

| 写入  

|

+--------+

[root@HE3 ~]#  mysql -h192.168.1.250 -P 4006 -usys_admin

-pMANAGER maxscale -e"select * from helei;"

mysql: [Warning]

Using a password on the command line interface can be insecure.

+--------+

| a      |

+--------+

| HE3    |

| HE1    |

| 写入  

|

+--------+

 

在HE1(slave1)恢复完成后,重新有了负载均衡。

 

 

 

 

Part2:mysql down故障

[root@HE1 ~]#

/etc/init.d/mysqld stop

Shutting down

MySQL..... SUCCESS!

 

停止HE1(slave)可以看到转发到了HE2上

 

[root@HE3 ~]#  maxadmin -pmariadb list servers

Servers.

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

Server             | Address         | Port 

| Connections | Status             

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

server1            | 192.168.1.248   | 

3306 |           0 | Down

server2            | 192.168.1.249   | 

3306 |           1 | Slave,

Running

server3            | 192.168.1.250   | 

3306 |           1 | Master,

Running

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

[root@HE3

~]# mysql -h192.168.1.250 -P 4006 -usys_admin -pMANAGER

mysql: [Warning]

Using a password on the command line interface can be insecure.

Welcome to the MySQL

monitor.  Commands end with ; or \g.

Your MySQL

connection id is 28948

Server version:

5.5.5-10.0.0 2.0.1-maxscale 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> select

@@hostname;

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

| @@hostname |

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

| HE2        |

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

1 row in set (0.00

sec)

 

 

停掉2台slave,观察maxscale的状态

[root@HE3 ~]#

maxadmin -pmariadb list servers

Servers.

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

Server             | Address         | Port 

| Connections | Status             

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

server1            | 192.168.1.248   | 

3306 |           0 | Running

server2            | 192.168.1.249   | 

3306 |           0 | Running

server3            | 192.168.1.250   | 

3306 |           0 | Master, Stale

Status, Running

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

Warning:警告这里我并没有在

[MySQL Monitor]中配置detect_stale_master=true

可以看出,在maxscale2.0中,已经默认从库都停掉,也不影响

Part3:master故障

[root@HE3 ~]# maxadmin -pmariadb list servers

Servers.

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

Server             | Address         | Port  | Connections | Status              

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

server1            | 192.168.1.248   |  3306 |           0 | Slave, Running

server2            | 192.168.1.249   |  3306 |           0 | Slave, Running

server3            | 192.168.1.100   |  3306 |           0 | Master, Running

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

[root@HE3 ~]# ps -ef|grep mysql

root     27709     1  0 Nov03 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/HE3.pid

mysql    28415 27709  0 Nov03 ?        00:00:19 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/error.log --open-files-limit=8192 --pid-file=/data/mysql/HE3.pid --socket=/tmp/mysql.sock --port=3306

root     30794 28966  0 02:34 pts/1    00:00:00 grep mysql

[root@HE3 ~]# kill -9 28415 27709

[root@HE3 ~]# maxadmin -pmariadb list servers

Servers.

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

Server             | Address         | Port  | Connections | Status              

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

server1            | 192.168.1.248   |  3306 |           0 | Slave, Running

server2            | 192.168.1.249   |  3306 |           0 | Slave, Running

server3            | 192.168.1.100   |  3306 |           0 | Master, Running

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

[root@HE3 ~]# maxadmin -pmariadb list servers

Servers.

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

Server             | Address         | Port  | Connections | Status              

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

server1            | 192.168.1.248   |  3306 |           0 | Master, Running

server2            | 192.168.1.249   |  3306 |           0 | Slave, Running

server3            | 192.168.1.100   |  3306 |           0 | Running

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

wKioL1gcWduRmrsgAADXaLF4VQ4363.png

可以看出,kill master的mysql进程后,MHA将slave1拉成新的master,Maxsale也识别了这一状态。

Java Druid注意事项

------------以下文章取材于贺春旸技术博客-------------------

http://hcymysql.blog.51cto.com/5223301/1869414

现象:

程序会不定时的出现连接错误,问题bug的异常信息如下:

The last packet successfully received from the server was 116 milliseconds ago.  The last packet sent successfully to the server was 115 milliseconds ago.

java.sql.SQLException: No database selected

 

但通过客户端sqlyog/navicat连接均为正常。

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

另:maxscale1.4.3有时还会出现挂起现象,4006端口直接关闭。后我们用了watch命令后台跑监控。

watch -d /bin/bash /root/sh/restart_maxsacle.sh

1

2

3

4

5

6

7

#!/bin/bash

 

netstat -ntlp | grep maxscale | grep 4006 > /dev/null 2>&1

 

if [ $? -eq 1 ];then

/etc/init.d/maxscale start

fi

解决:5.6以下可以直接在url上配置:autoReconnect=true

对于5.6以上的只能在jdbc的链接池里设置:

wKiom1gcJ8eRZd5cAABCHLTCyQg422.png

第一个设置成ture,超时自动链接,对于mysql要把第二个设置成false,不启用缓存。

以上是开发需要注意的都是一些基本的配置。

 

其目的为:每次归还连接时执行select 'x'检测连接是否有效。 

——总结——

maxscale的核心就在于内个配置文件,根据不同的业务和架构,做好相应的配置,本文意在抛砖引玉,如果您有更全的配置文件,欢迎您分享给笔者。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。

©著作权归作者所有:来自51CTO博客作者dbapower的原创作品,如需转载,请注明出处,否则将追究法律责任

mhamaxscaleMySQL


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消