设为首页 收藏本站
查看: 776|回复: 0

[经验分享] MySQL5.7MHA+MaxScale2.0构建高可用环境

[复制链接]

尚未签到

发表于 2018-9-27 06:37:28 | 显示全部楼层 |阅读模式
DSC0000.jpg

DSC0001.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的优点不作赘述,看下原理图吧
DSC0002.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的安装、配置以及注意事项。
DSC0003.jpg

  Part2:整体架构
   DSC0004.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
  
-------------------+-----------------+-------+-------------+--------------------
DSC0005.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
1234567#!/bin/bash netstat -ntlp | grep maxscale | grep 4006 > /dev/null 2>&1 if [ $? -eq 1 ];then/etc/init.d/maxscale startfi  解决:5.6以下可以直接在url上配置:autoReconnect=true
  对于5.6以上的只能在jdbc的链接池里设置:
DSC0006.png

  第一个设置成ture,超时自动链接,对于mysql要把第二个设置成false,不启用缓存。
  以上是开发需要注意的都是一些基本的配置。
  其目的为:每次归还连接时执行select 'x'检测连接是否有效。
  ——总结——
  maxscale的核心就在于内个配置文件,根据不同的业务和架构,做好相应的配置,本文意在抛砖引玉,如果您有更全的配置文件,欢迎您分享给笔者。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-602479-1-1.html 上篇帖子: Mysql DBA 高级运维学习之路-MySQL高可用工具drbd实战 下篇帖子: mysql —— 分表分区(1)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表