开发者社区> 王静静@> 正文

【MHA】--MHA 介绍(1)

简介:
+关注继续查看

MHA介绍

  • master 宕机,自动从slave中,提升一个slave作为master,并且将其他slave指向该new master

MHA安装

  • MHA Node 安装
    ### 安装依赖包
     yum install perl-DBD-MySQL
    
    ### 安装Node
     rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
  • MHA Mananger 安装
    ### 安装依赖文件
    yum install perl-DBD-MySQL
    yum install perl-Config-Tiny
    yum install perl-Log-Dispatch
    yum install perl-Parallel-ForkManager
    
    ### 安装 Node
    rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
    
    ### 安装Manager
    rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm

MHA 配置

  • manager 配置参数
[server default]
user=ms                                         #mysql用户
password=***                                        #密码
ssh_user=***                                        #ssh账号
port=3312                                       #mysql端口
repl_user=***                                       #复制的用户
repl_password=***                                   #复制的密码
manager_workdir=/home/mhaadmin/mha_3312         #manager 工作的目录
manager_log=/home/mhaadmin/mha_3312/manager.log #manager 日志位置
ping_interval=3                                 #检测的间隔时间

master_ip_failover_script=/home/mhaadmin/mha_3312/master_ip_failover        #切换调用的脚本
# shutdown_script= /script/masterha/power_manager                       # 强制关闭mysql的调用的脚本
# report_script= /script/masterha/send_report                               # 当failover发生以后可以发送一个报告
# master_ip_online_change_script= /script/masterha/master_ip_online_change  #在线切换调用的脚本


[server1]                                           #监控的实例一
hostname=mysql-ssd-128-test-001.m6                  #主机名
master_binlog_dir=/data/mysql3312/log                   #mysql的binglog 位置
candidate_master=1                              #slave 是否优先提升为master

[server2]
hostname=mysql-ssd-128-test-002.m6
master_binlog_dir=/data/mysql3312/log
candidate_master=1

[server3]
hostname=mysql-ssd-128-test-003.m6
master_binlog_dir=/data/mysql3312/log
no_master=1                                     #该server禁止提升为master

**MHA常用脚本

**

  • master_ip_failover
    常见的HA环境下,大多是情况会给master分配一个虚拟IP,如果master宕机,HA软件像一个Pacemaker将虚拟IP转移到备用的master上.
另外一种常见的方法就是创建一个全局目录数据库,包含所有应用和writer/reader ip地址.例如{app_master1,192.168.0.1},{app_master2,192.168.0.2}...,代替使用虚拟IP,这种情况,你需要在master宕机的时候更新目录数据库.
两种方法都有好的或者不好的地方,MHA不强制要求使用哪一种,但是提供了master_ip_failover_script参数来完成此目的.换句话说,你需要写一个脚本来调整应用服务连接到新的master,然后定义master_ip_failover_script的参数,下面是一个实例:
  master_ip_failover_script= /usr/local/sample/bin/master_ip_failover
你可以从(MHA Manager package)/samples/scripts/master_ip_failover找到一个简单的脚本.这个脚本在manager的tarball和GitHUb branch中才包含.
MHA manager会调用master_ip_failover_script三次,第一次,在开始master monitor之前调用(目的是检查脚本是否可用),第二次是在调用shutdown_script脚本前调用,第三次是在new master应用完所有的差异日志以后,MHA manager会传递给脚本如下参数.(你不用在配置文件中指明这些参数)
  • power_manager
你可能需要强制关闭master服务器,避免他再次提供服务,这对于避免脑裂很重要.下面是一个实例:
  shutdown_script= /usr/local/sample/bin/power_manager
你可以从(MHA Manager package)/samples/scripts/power_manager找到一个简单的脚本.这个脚本在manager的tarball和GitHUb branch中才包含.

在调用shutdown_script脚本之前,MHA manager内部会通过ssh尝试连接到mysql master,如果ssh可以连接(意思就是OS是存活的,但是Mysqld没有运行),MHAmanager就会传递下面的参数:
--command=stopssh (这个意思就是指停止服务,不会关机)
--ssh_user=(ssh username so that you can connect to the master)
--host=(master's hostname)
--ip=(master's ip address)
--port=(master's port number)
--pid_file=(master's pid file)
如果master主机的ssh不能连接,那么MHA会使用如下参数:
--command=stop (这个会通过fence设备关掉电源)
--host=(master's hostname)
--ip=(master's ip address)
这个脚本的大概功能如下,如果--command=stopssh被调用,脚本会使用killall -9 杀掉目标服务器上所有的mysqld_safe服务.如果--pid_file被设置,脚本尝试kill指定的进程.如果脚本执行成功,那么脚本会退出返回状态10.如果退出状态为10,MHA manager后面会通过ssh连接到master,获取需要的binary log.如果脚本通过ssh连接到服务器失败,那么就会传递--command=stop参数,这个参数尝试关闭机器的电源,关闭电源依赖于H/W.HP(ILO),DELL(DRAC).如果power off成功,脚本会然会状态0,其他情况会返回状态1.当返回状态是0的时候MHA manager 开始failover.如果返回状态不是0或者10,那么MHA manager会意外终止.这个参数默认是空,所以MHA manager不会调用任何脚本.
另外,MHA manager在启动monitoring之前调用shutdown_script.这时候会传递下面的参数.目的是检测脚本是否可用,如果发现错误,你可以提前知道.
--command=status
--host=(master's hostname)
--ip=(master's ip address)
  • send_report
你希望当failover发生以后可以发送一个报告(例如email),report_script可以达到这个目的,MHA manager传递下面的参数.
--orig_master_host=(dead master's hostname)
--new_master_host=(new master's hostname)
--new_slave_hosts=(new slaves' hostnames, delimited by commas)
--subject=(mail subject)
--body=(body)
默认这个参数是空的,所以MHA manager不调用任何脚本.
你可以从(MHA Manager package)/samples/scripts/send_report找到一个简单的脚本.这个脚本在manager的tarball和GitHUb branch中才包含.
  • master_ip_online_change
这是几个简单版本的master_ip_failover_script参数,但是master failover命令并不调用它.master online change命令会调用它.(masterha_master_switch --master_state=alive),传递以下参数:

Current master write freezing phase
--command=stop or stopssh
--orig_master_host=(current master's hostname)
--orig_master_ip=(current master's ip address)
--orig_master_port=(current master's port number)
--orig_master_user=(current master's user)
--orig_master_password=(current master's password)
--orig_master_ssh_user=(from 0.56, current master's ssh user)
--orig_master_is_new_slave=(from 0.56, notifying whether the orig master will be new slave or not)
New master granting write phase
--command=start
--orig_master_host=(orig master's hostname)
--orig_master_ip=(orig master's ip address)
--orig_master_port=(orig master's port number)
--new_master_host=(new master's hostname)
--new_master_ip=(new master's ip address)
--new_master_port(new master's port number)
--new_master_user=(new master's user)
--new_master_password=(new master's password)
--new_master_ssh_user=(from 0.56, new master's ssh user)
MHA在当前的master write freezing阶段后执行FLUASH TABLES WITH READ LOCK, 在new mastergranting write阶段你可以执行一些类似master_ip_failover_script的操作.比如创建一个有写入权限的用户,执行SET GLOBAL read_only=0,更新目录数据库等.如果你的脚本退出返回状态不是1或者10,那么MHA manager将会意外终止,停止master switch.
这个参数默认为空,所以MHA manager不做任何调用.

你可以从(MHA Manager package)/samples/scripts/master_ip_online_change找到一个简单的脚本.这个脚本在manager的tarball和GitHUb branch中才包含.

MHA 注意事项

  • manager 节点需要能够SSH到Node节点,且Node节点之间需要SSH互通
  • mysql 节点之间需要提供一个公共账号,并且需要授予一定权限
  • mysql replication的账号,需要互相通用
  • mysql manager 需要能够读取mysql节点的log目录下的日志

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
19111 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
16820 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
11594 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
23943 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
12915 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
32581 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
14095 0
+关注
34
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载