MySQL之高可用MHA部署
先来简单说一下什么事MHA。(发现还是需要懂一些原理的,特别是面试什么的时候)
测试环境如下:
虚拟机A ip为10.0.3.92 作为master
虚拟机B ip为10.0.3.102 作为slave1
虚拟机C ip为10.0.3.103 作为slave2
虚拟机D ip为10.0.3.104 作为manager
首先配置一主两从环境,A为主,BC为从
然后配置所有虚拟机两两之间ssh免密登录(ssh怎么免密登录,自己百度,或者搜索我博客里的文章吧,也有记录怎么配置ssh免密登录的)
D中新建配置文件
D中检测ssh配置以及主从配置是否成功,这两个非常关键
如果上面都没有问题,那么我们试着把master服务器停掉之后,manager会把主库自动切换到B
下面来说一下具体部署步骤
重要的事情先说,那就是,防火墙和selinux必须关闭,如果不想关闭,那你就慢慢折腾该通过哪个端口之类的吧
下一个MHA压缩包,里面有我们需要用到的文件
http://www.yougemysqldba.com/discuz/viewthread.php?tid=491&extra=page%3D1
我下载的是第二个rhel56.zip,因为我的是6.5的系统
虚拟机A
首先安装mysql,mysql-server (我的系统是centos6.5,听说centos7上部署MHA还需要做其他额外的工作),然后自然而然是开启服务并修改密码
配置/etc/my.cnf,添加在mysqld里面,内容如下
server-id=1
log-bin=master-log
relay-log=relay-log
skip_name_resolve
innodb_file_per_table
解压我们下载的那个压缩包,在虚拟机A上,我们只需要安装mha4mysql-node-0.54-0.el6.noarch.rpm,怎么安装?百度啊,安装时提示缺少依赖关系依赖包?百度啊
进入mysql,执行以下命令
新建一个repluser用户,专门用来同步
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000004 | 106 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
这样子的话说明master端配置好了
虚拟机B以及虚拟机C:
当然这两台虚拟机也需要安装node那个rpm文件包
配置文件/etc/my.cnf,当然也是放在mysqld下面了
symbolic-links=0
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_bin
default-storage-engine=INNODB
max_allowed-packet=32M
sql_mode=NO_AUTO_VALUE_ON_ZERO
server-id=2 #虚拟机C只需要把这里改为3
relay-log=relay-log
log-bin=master-log
read_only=1
relay_log_purge=0
skip_name_resolve
innodb_file_per_table
前面多出的几行是设置中文编码
进入数据库
change master 设置
change master to master_host='10.0.3.92',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-log.000004',MASTER_LOG_POS=106;
现在start slave查看slave状态,主要查看下面两个参数是否为yes,如果是就表示正常
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
虚拟机D:
安装下载的压缩包里面的所有rpm文件
配置
[root@node4 ~]# cat /etc/masterha_default.cnf
[server default]
user=root #听说这个是数据库的用户名,需要在四台虚拟机上都创建这个用户,并且授权为可远程登录,反正我是直接用的root用户,并且密码统一为123456
password=123456 #这个是上面用户对应的密码
manager_workdir=/data/masterha/app1
manager_log=/data/masterha/app1/manager.log
remote_workdir=/data/masterha/app1
ssh_user=root #ssh登录的用户名,配置ssh时也是配置该用户
repl_user=repluser #配置主从时设置的用户
repl_password=replpass #主从用户密码
ping_interval=1
[server1]
hostname=10.0.3.92
[server2]
hostname=10.0.3.102
[server3]
hostname=10.0.3.103
[root@node4 ~]#
[root@node4 ~]# masterha_
masterha_check_repl masterha_check_status masterha_manager masterha_master_switch masterha_stop
masterha_check_ssh masterha_conf_host masterha_master_monitor masterha_secondary_check
[root@node4 ~]# masterha_check_ssh --conf=/etc/masterha_default.cnf 检测ssh配置
Thu Nov 9 01:12:32 2017 - [info] Reading default configuratoins from /etc/masterha_default.cnf..
Thu Nov 9 01:12:32 2017 - [info] Reading application default configurations from /etc/masterha_default.cnf..
Thu Nov 9 01:12:32 2017 - [info] Reading server configurations from /etc/masterha_default.cnf..
Thu Nov 9 01:12:32 2017 - [info] Starting SSH connection tests..
Thu Nov 9 01:12:33 2017 - [debug]
Thu Nov 9 01:12:32 2017 - [debug] Connecting via SSH from root@10.0.3.92(10.0.3.92:22) to root@10.0.3.102(10.0.3.102:22)..
Thu Nov 9 01:12:32 2017 - [debug] ok.
Thu Nov 9 01:12:32 2017 - [debug] Connecting via SSH from root@10.0.3.92(10.0.3.92:22) to root@10.0.3.103(10.0.3.103:22)..
Thu Nov 9 01:12:33 2017 - [debug] ok.
Thu Nov 9 01:12:34 2017 - [debug]
Thu Nov 9 01:12:33 2017 - [debug] Connecting via SSH from root@10.0.3.102(10.0.3.102:22) to root@10.0.3.92(10.0.3.92:22)..
Thu Nov 9 01:12:33 2017 - [debug] ok.
Thu Nov 9 01:12:33 2017 - [debug] Connecting via SSH from root@10.0.3.102(10.0.3.102:22) to root@10.0.3.103(10.0.3.103:22)..
Thu Nov 9 01:12:33 2017 - [debug] ok.
Thu Nov 9 01:12:34 2017 - [debug]
Thu Nov 9 01:12:33 2017 - [debug] Connecting via SSH from root@10.0.3.103(10.0.3.103:22) to root@10.0.3.92(10.0.3.92:22)..
Thu Nov 9 01:12:34 2017 - [debug] ok.
Thu Nov 9 01:12:34 2017 - [debug] Connecting via SSH from root@10.0.3.103(10.0.3.103:22) to root@10.0.3.102(10.0.3.102:22)..
Thu Nov 9 01:12:34 2017 - [debug] ok.
Thu Nov 9 01:12:34 2017 - [info] All SSH connection tests passed successfully.
[root@node4 ~]#
[root@node4 ~]# masterha_check_repl --conf=/etc/masterha_default.cnf #检测主从复制,正常情况下mysql replication health is ok,这里因为我是在实验完成后停掉master服务器了,才导致的not ok。刚开始的时候我这里一直是not ok,然后我就各种查错,最后发现是防火墙不知道什么时候又开启了。。。这里我建议在D上尝试连接另外三台虚拟机的数据库,分别用root登录以及主从复制用户登录,如果不报错,检测主从复制这里应该就没有问题了
Thu Nov 9 01:12:59 2017 - [info] Reading default configuratoins from /etc/masterha_default.cnf..
Thu Nov 9 01:12:59 2017 - [info] Reading application default configurations from /etc/masterha_default.cnf..
Thu Nov 9 01:12:59 2017 - [info] Reading server configurations from /etc/masterha_default.cnf..
Thu Nov 9 01:12:59 2017 - [info] MHA::MasterMonitor version 0.55.
Thu Nov 9 01:13:00 2017 - [error][/usr/share/perl5/vendor_perl/MHA/ServerManager.pm, ln604] There are 2 non-slave servers! MHA manages at most one non-slave server. Check configurations.
Thu Nov 9 01:13:00 2017 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln386] Error happend on checking configurations. at /usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm line 300
Thu Nov 9 01:13:00 2017 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln482] Error happened on monitoring servers.
Thu Nov 9 01:13:00 2017 - [info] Got exit code 1 (Not master dead).
MySQL Replication Health is NOT OK!
现在我们试着把master服务器停掉,然后我们看一下虚拟机C的状态
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.3.102 #可以看到这里自动把master从10.0.3.92 切换到10.0.3.102了
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-log.000010
Read_Master_Log_Pos: 600
Relay_Log_File: relay-log.000005
Relay_Log_Pos: 252
Relay_Master_Log_File: master-log.000010
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 600
Relay_Log_Space: 1286
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>
大概就是这么简单,但是第一次配置时还是很容易出现这样或那样的问题的,慢慢琢磨吧
什么,我写得乱七八糟的,你看不懂?
好吧,给一个参考链接给你http://www.178linux.com/87554
MySQL之高可用MHA部署的更多相关文章
- mysql实现高可用架构之MHA
一.简介 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能.MHA 在监控到 mas ...
- 美团点评MySQL数据库高可用架构从MMM到MHA+Zebra以及MHA+Proxy的演进
本文介绍最近几年美团点评MySQL数据库高可用架构的演进过程,以及我们在开源技术基础上做的一些创新.同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进展,和未来我们的一些规划和展望. MMM ...
- 技术实战:基于 MHA 方式实现 MySQL 的高可用(转)
转自:http://os.51cto.com/art/201307/401702_all.htm MHA故障转移可以很好的帮我们解决从库数据的一致性问题,同时最大化挽回故障发生后的数据.本文分享了基于 ...
- Mysql 高可用(MHA)-读写分离(Atlas)-分布式架构(Mycat)
Mysql 高可用(MHA)-读写分离(Atlas) 1. 搭建主从复制(一主两从) 1.1 准备环境 1 主库:10.0.0.51/db01 2 从库:10.0.0.52/db02,10.0.0.5 ...
- 基于keepalived搭建MySQL的高可用集群
MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...
- 分布式数据存储 - MySQL主从复制高可用方案
前面几篇文章说道MySQL数据库的高可用方案主从复制.主从复制的延迟产生原因.延迟检测及延迟解决方案(并未从根本上解决),这种主从复制方案保证数据的冗余的同时可以做读写分离来分担系统压力但是并非是高可 ...
- Oracle和MySQL的高可用方案对比【转】
关于Oracle和MySQL的高可用方案,其实一直想要总结了,就会分为几个系列来简单说说.通过这样的对比,会对两种数据库架构设计上的细节差异有一个基本的认识.Oracle有一套很成熟的解决方案.用我在 ...
- (转)基于keepalived搭建MySQL的高可用集群
基于keepalived搭建MySQL的高可用集群 原文:http://www.cnblogs.com/ivictor/p/5522383.html MySQL的高可用方案一般有如下几种: keep ...
- MHA高可用 MHA+Keepalive
MHA高可用 MHA简介 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebo ...
随机推荐
- day042 前端CSS选择器
今日内容: 高级选择器 1.子类选择器 用 > 表示 类比于相对路径 选择的是前一级标签的子标签 2后代选择器 用空格表示 选择的是前一级标签的后代标签 3并集选择器 用,逗号表示 选择的是用逗 ...
- BootStrap字体图标不显示、下拉菜单不显示
在W3CSchool学习BootStrap教程时遇到的问题…… 1.字体图标不能显示 上面是正常显示的样子,不能正常显示,因为缺少下面的字体图标样式文件 (1)在下载的Bootstrap包中将font ...
- log4j的参数配置(转)
转载:log4j.properties文件各参数含义与配置 以下是配置文件log4j.properties的一些属性: log4j.rootLogger=WARN, stdout, Rlog4j. ...
- 基于Nutch Solr等基于搭建一体化的数据抓取平台
参考链接:https://www.ibm.com/developerworks/cn/opensource/os-cn-BigInsightsNutchSolr/
- Oracle function和procedure
1.返回值的区别 函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有 2. 调用的区别,函数可以在查询语句中直接调用,而存储过程必须单独调用. 函数:一般情况下是用来计算并返回一个计算结 ...
- 类的无参方法和Doc注释
一:Java Doc注释: 语法: /** *AccpSchool 类 *@author JadeBird *@version 1.0 2018/5/26 */ Java Doc是前Sun公司提供的一 ...
- Nodejs安装express提示不是内部或外部命令
安装nodejs安装包后,通过npm安装express后,运行express提示" express"不是内部或外部命令. c:\express -t ejs web 原因是版本问题 ...
- 在Linux系统下mail命令的用法
在Linux系统下mail命令的测试 1. 最简单的一个例子: mail -s test admin@aispider.com 这条命令的结果是发一封标题为test的空信给后面的邮箱,如果你有mta并 ...
- LeetCode—66、88、118、119、121 Array(Easy)
66. Plus One Given a non-negative integer represented as a non-empty array of digits, plus one to th ...
- 标准I/O读写文件
一.函数原型 1.FILE *fopen(const char *path, const char *mode); path:要打开文件路径及文件名: mode: r 打开只读文件,该文件必须存在. ...