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

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

Part3:MHA

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

从宕机崩溃的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的时候,你能如愿以偿的看到如下信息

[[email protected] 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:一些常见错误记录

如果遇到

这样

[[email protected] 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,请修改你的配置文件

这样

[[email protected] ~]#
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
[email protected](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
[email protected](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!

解决方案

[[email protected] 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 [email protected](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

[[email protected] 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的安装、配置以及注意事项。

Part2:整体架构


Part3:安装

Maxscale配置很简单

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

[[email protected] ~]# 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                                  ###管理端口

[[email protected]
~]# /etc/init.d/maxscale start

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

[[email protected]
~]#  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

[[email protected]
~]# 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

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

[[email protected]
~]# 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读写分离端口,进行数据写入

[[email protected] ~]#  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.
[[email protected] ~]#  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

[[email protected] ~]# 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
[[email protected] ~]# 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
[[email protected] ~]# +------------+
| @@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的复制

[[email protected] ~]# 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)
 
[[email protected] ~]#
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
-------------------+-----------------+-------+-------------+--------------------
 
[[email protected] ~]#  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    |
| 写入  
|
+--------+
[[email protected] ~]#  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)
 
 
[[email protected] ~]#
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
-------------------+-----------------+-------+-------------+--------------------
 
验证
[[email protected] ~]#  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    |
| 写入  
|
+--------+
[[email protected] ~]#  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故障

[[email protected] ~]#
/etc/init.d/mysqld stop
Shutting down
MySQL..... SUCCESS!
 
停止HE1(slave)可以看到转发到了HE2上
 
[[email protected] ~]#  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
-------------------+-----------------+-------+-------------+--------------------
[[email protected]
~]# 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的状态
[[email protected] ~]#
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中,已经默认从库都停掉,也不影响

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的链接池里设置:

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

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

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

——总结——

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

时间: 2024-08-12 21:21:38

MySQL5.7MHA+MaxScale2.0构建高可用环境的相关文章

生产环境下ftp的迁移并构建高可用

说明:这是1个小项目就两台DELL的服务器,和一台IP SAN存储(DELL MD3200i).原来是4台小服务器,而且服务器太老了,经常有问题,这回相当于一次ftp的迁移,以前用的是proftp,这次换成了vsftp.数据量有2.5T. 拓扑很简单: 系统:CENTOS 6.4(64bit) 高可用软件:corosync+pacemaker host:ftp1 192.168.1.190 ftp2  192.168.1.191 stonith(ipmi):ftp1 192.168.1.180

使用Microsoft iSCSI Target Server构建高可用SMB3.0

关于Windows Server 2012 R2中故障转移群集功能,可参考前文所述.在Windows Server 2012 R2中故障转移群集中,可用的群集文件服务器主要有: 1. 适用于应用程序数据的横向扩展文件服务器(横向扩展文件服务器):该类群集文件服务器在 Windows Server 2012 中引入,能够让你存储文件共享上的服务器应用程序数据,例如 Hyper-V 虚拟机文件,并获取类似水平的可靠性.可用性.可管理性以及预期从存储区域网络中获得的高性能.所有文件共享均为在线状态,同

drbd与corosync/pacemaker 结合构建高可用mariadb服务

drbd与corosync/pacemaker 结合构建高可用mariadb drbd介绍: 高可用节点之间为了使切换节点时数据一致,不得不使用共享存储,共享存储一般只有两种选择:NAS 和 SAN.NAS是文件系统级别的共享,性能低下,访问也受限制,使用时有诸多不变:SAN块级别共享存储,但又太贵.当资金不足时,就可以考虑drbd. drbd是跨主机的块设备镜像系统,一主一从(两个主机只能有一个能进行写操作,slave主机只能接受master主机传过来的数据).drbd是工作于内核中的,工作时

构建高可用服务器之四 Keepalive冗余Nginx

实验目的: 使用Keepalive来保证Nginx的高可用,进而实现网站的高可用! 实验拓扑: 实验环境: 如上拓扑图所示,master与slave是mysql主从,且有discuz论坛,且已经做高可用.(可参加<构建高可用服务器之三Keepalive冗余Mysql>).现在是刚搭建两台Nginx,均已安装keepalive,IP地址分别为192.168.1.2和192.168.1.5(可参加<构建Nginx服务器之一安装及虚拟主机配置>和<构建高可用服务器之一Keepali

用HAProxy和KeepAlived构建高可用的反向代理

用HAProxy和KeepAlived构建高可用的反向代理 前言对于访问量较大的网站来说,随着流量的增加单台服务器已经无法处理所有的请求,这时候需要多台服务器对大量的请求进行分流处理,即负载均衡.而如果实 现负载均衡,必须在网站的入口部署服务器(不只是一台)对这些请求进行分发,这台服务器即反向代理.由于反向代理服务器是网站的入口,其负载压力大且易遭 到攻击,存在单点故障的风险,所以我们需要一个高可用的方案来实现当一台反向代理服务器宕机的时候,另一台服务器会自动接管服务.基于以上要求,我们使用 H

drbd+mariadb+corosync+pacemaker构建高可用,实现负载均衡

DRBD DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群 drbd 工作原理:DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能. 当你将数据写入本地 文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个 文件系统中. 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远 程主机上还会保留有一份相同的数据,可以继续使用.在高可用(HA)中使用DRBD功能,可以代替使用一 个共享盘阵.因为数据同时存在

构建高可用的LVS负载均衡集群 入门篇

一.LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org.现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能. LVS 集群采用IP负载和基于内容请求分

corosync+pacemaker使用pcs构建高可用集群

一.corosync+pacemaker集群前提准备 集群前提准备 --> HA-web 承接上文 --> corosync+pacemaker使用crmsh构建高可用集群 二.准备pcs [[email protected] ~]# yum install pcs 禁用stonith设备 [[email protected] ~]# pcs property set stonith-enable=false [[email protected] ~]# pcs property set no

drbd+corosync+pacemaker构建高可用MySQL集群

一.drbd简介 drbd全称Distributed Replicated Block Device,为分布式复制块设备,基于软件实现的,不共享任何东西的,通过复制的方式构建镜像模式工作的磁盘,类似于raid1,但不同于raid的是,drbd实现了跨主机镜像块数据.drbd工作原理:由工作于内核层次的drbd,将要写入本地磁盘的数据镜像一份发往本地网卡,由本地网卡发往另一台drbd主机的本地磁盘存储.因此,drbd的两个主机的,磁盘存储一模一样,从而实现分布式复制块设备的实现.drbd进程对磁盘