白屏化背后,DBA应有的数据库自动化建设思路【澳门金沙国际网址】

原标题:白屏化背后,DBA应有的数据库自动化建设思路

澳门金沙国际网址 1

小编介绍茹作军,曾任职笔者检查运行工程师、1号店MySQL
DBA,现就职于平安好先生。Lepus开源数据库监察和控制系统作者(www.lepus.cc)。

图表来源于互联网

业务与技术往往是共同前进的,二〇一六年,作者参加平安好先生,在业务赶快发展的同时,大家的数据库自动化平台也获取了长足的建设和进步。

文/Bruce.Liu1

一、背景

文章大纲

  1. MHA简介
    1.1. mha组件介绍
    1.2. 背景和对象
  2. MHA原理
    2.1. MHA工作原理
    2.2. MHA工具介绍
    2.3. 当前高可用方案
    2.4. MHA的优势
  3. MHA最佳实践
    3.1. 背景介绍
    3.2. 安装MySQL实例
    3.3. 部署MySQL复制
    3.4. 部署MHA软件
    3.5. 故障自动切换与在线切换

两年多的流年里,我们DBA
Team急忙完成了数据库自动化、白屏化、闭环化、服务化的建设。完结了JKDB数据库自动化平台(含元数据管理、自动化安顿调度连串、监察和控制种类、备份系统、高可用和在线切换、容积趋势分析规划、校验大旨等)、数据库自协助调查询平台、权限申请和审查批准平台、自助变更执行平台、流程引擎、工单系统、敏感新闻探测系统等等。

1.MHA简介

MHA是什么?
MHA是由日本Mysql
yoshinorim专家(原就职于DeNA现就职于FaceBook)用Perl写的一套Mysql故障切换方案,来保持数据库的高可用性,它的效果是能在0-30s之内完成主Mysql故障转移(failover),MHA故障转移能够很好的帮大家缓解从库数据的一致性难题,同时最大化挽回故障发生后数据的一致性。
官方网站:https://code.google.com/p/mysql-master-ha/

MHA(Master High
Availability)最近在MySQL高可用方面是一个相持成熟的缓解方案,它由东瀛DeNA公司youshimaton(现就职于Facebook(TWT兰德酷路泽.US)集团)开发,是一套精美的作为MySQL高可用性环境下故障切换和宗旨提高的高可用软件。在MySQL故障切换进程中,MHA能做到在0~30秒之内自动达成数据库的故障切换操作,并且在进展故障切换的进度中,MHA能在较大程度上保险数据的一致性,以达到真正含义上的高可用。

该软件由两有个别组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA
Manager能够独自安顿在一台独立的机械上管住多少个master-slave集群,也得以配备在一台slave节点上。MHA
Node运维在每台MySQL服务器上,MHA
Manager会定时探测集群中的master节点,当master出现故障时,它能够活动将数据的slave提高为新的master,然后将拥有别的的slave重新指向新的master。整个故障转移进度对应用程序完全透明。

在MHA自动故障切换进程中,MHA试图从宕机的主服务器上保留二进制日志,较大程度的有限帮助数据的不丢掉,但那并不总是实惠的。例如,若是主服务器硬件故障或无法通过ssh访问,MHA无法保存二进制日志,只举行故障转移而丢掉了的数量。使用MySQL
5.5的半一块复制,能够大大下降数据丢失的风险。MHA能够与半联袂复制结合起来。即便唯有一个slave已经吸收接纳了的二进制日志,MHA能够将的二进制日志应用于其余兼具的slave服务器上,因而能够保险拥有节点的数据一致性。

在那时期,除了偶尔故障和异样扶助之外,DBA基本不供给报到服务器去布署和操作数据。从2015年到明天,大家管理的数据库实例大致翻了3倍,不过DBA人数基本没有变化,近年来是陆个DBA维护了约一千+的MySQL实例、1500+Redis实例,其余还维护着几多PostgreSQL
/ Oracle / MongoDB / Hbase集群。

1.1.mha零部件介绍

  • MHA Manager
    运作一些工具,比如masterha_manager工具实现机关监察和控制MySQL
    Master和兑现master故障切换,别的工具完结手动达成master故障切换、在线mater转移、连接检查等等。二个Manager能够管理五个master-slave集群

  • MHA Node
    布置在全部运转MySQL的服务器上,无论是master依然slave。主要功用有八个。
    1.保留二进制日志
    借使能够访问故障master,会拷贝master的二进制日志
    2.选拔差距中继日志
    从拥有新型数据的slave上转变差别中继日志,然后选用差别日志。
    3.清除中继日志
    在不截止SQL线程的景色下删除中继日志

正文就将针对大家DBA
Team完毕的数据库自动化平台构建和之间的建设思路做一些粗略介绍,首要分享中期条件营造和自动化模型搭建思路方面包车型客车局地。后续倘诺我们有趣味,作者可以进一步一语道破的牵线一下自动化平台其余地点的内容。

1.2.背景和目的

澳门金沙国际网址,在初期的MySQL架构中最主流就便是MySQL复制的着力结构,但伴随时间的延期以及数额的膨胀会见世转手几类题材。

  • 在此之前几十台DB服务器,人工登陆服务器就能保证好,也从未高可用,当master挂了,公告业务将IP切换成slave然后重启也能基本满意工作须求,不过工作高速发展,实例数不断追加,复制集不断增多,数据库架构三种化,而那种人造维护格局鲜明大大扩充了DBA工作量,而且效能低下、不难失误。

  • DB规模的叠加,机器故障、SQL故障、实例故障出现的票房价值也加码、还有来自业务方的DB变更,比如大表扩张字段、扩张索引、批量剔除数据等足够维护操作,当然这么些在听之任之原则下可用选拔在线变更,比如利用pt-online-schema-change工具,但是当不满足在线变更规范、可能在线变更复杂的状态下,就供给接纳滚动变更的法子,先在依次slave上改动、在线切换后再在master上转移,然后再展开一次切换还原,而这么些切换操作假若全勤手工业敲命令来开始展览明白是不可取的。

  • 随着用户数的不断增多,业务方对DB那种基础服务的可用性也就更是高,在小米业务对DB的可用性须求是各种月须求完成八个9,也就意味着各类月的故障时间唯有不到四分钟,从前那种布告工作转移IP重启的章程显著是达不到那个要求的。

    在那几个背景和须要下,大家须求摆脱手工业操作,供给一套立竿见影的MySQL高可用方案和1个火速的高可用平台来支持DB的快捷增加。MySQL高可用平台要求达成的靶子有以下几点:

    1.多少一致性保险那个是最大旨的还要也是前提,假设主备的多少的不平等,那么切换就无法开始展览,当然那里的一致性也是3个相持的,可是要大功告成最终一致性。
    2.故障火速切换,当master故障时那里能够是机械故障或许是实例故障,要保管工作能在最短期切换来备用节点,使得业务受影响时间最短。那里也能够指工作例行维护操作,比如前边提到的力不从心使用在线举行DDL的DDL操作,很多分表批量的DDL操作,这几个操作通过在线切换方式来滚动落成。
    3.简化平常爱戴,通过高可用平台来机关实现高可用的配备、维护、监察和控制等职分,能够最大程度的解放DBA手动操作,进步普通运维功用。
    4.联结管理,当复制集众多的景色下,能够合并管理高可用实例新闻、实例音信、监察和控制消息、切换音信等。
    高可用的配置要对现有的数据库架构无影响,即使因为安排高可用,要求转移或然调整数据库架构则会促成资本扩张。

关于数据库标准化创设

2.MHA原理

2015年,当自身入职公司时,大致经过了两周的耳熟能详,几乎发现商行数据库自动化的影子。

2.1.MHA干活原理

澳门金沙国际网址 2

image.png

当master出现故障时,通过对照slave之间I/O线程读取masterbinlog的职位,选用最接近的slave做为latestslave。
其余slave通过与latest slave相比变化差别中继日志。在latest
slave上选用从master保存的binlog,同时将latest
slave进步为master。最后在任何slave上应用相应的歧异中继日志并初步从新的master初步复制。

在MHA完成Master故障切换进度中,MHA
Node会试图访问故障的master(通过SSH),如若能够访问(不是硬件故障,比如InnoDB数据文件损坏等),会保留二进制文件,以最大程度保险数据不丢掉。MHA和半一起复制一起使用会大大下降数据丢失的险恶。流程如下:

  • 从宕机崩溃的master保存二进制日志事件(binlog events)。
  • 识别含有最新更新的slave。
  • 运用差别的对接日志(relay log)到此外slave。
  • 使用从master保存的二进制日志事件(binlog events)。
  • 晋级叁个slave为新master并记录binlog file和position。
  • 使别的的slave连接新的master实行复制。
  • 形成切换manager主进度OFFLINE

这几个是规范,标准化是自动化的关键前提。这一个时候,大家那边标准化是做得相比好的,从OS的规格到DB层的规格都独具统一的正经。比如OS的操作系统版本、文件系统格式、磁盘挂载点、预装软件、内核参数等等,大家富有MySQL服务器基本都是如出一辙的。

2.2.MHA工具介绍

1.Manager工具:

  • masterha_check_ssh : 检查MHA的SSH配置。
  • masterha_check_repl : 检查MySQL复制。
  • masterha_manager : 启动MHA。
  • masterha_check_status : 检查和测试当前MHA运转情状。
  • masterha_master_monitor : 监测master是不是宕机。
  • masterha_master_switch : 控制故障转移(自动或手动)。
  • masterha_conf_host : 添加或删除配置的server音讯。

2. Node工具

  • save_binary_logs : 保存和复制master的二进制日志。
  • apply_diff_relay_logs : 识别差距的交接日志事件并选择于其余slave。
  • filter_mysqlbinlog :
    去除不要求的ROLLBACK事件(MHA已不复接纳这么些工具)。
  • purge_relay_logs : 清除中继日志(不会阻塞SQL线程)。
    专注:Node那些工具平日由MHA Manager的本子触发,无需人手操作。

那边我们是如何做到保持一致的啊?

2.3.当下高可用方案

  • keepalived+mysql复制
    该组织与MHA类似,但keepalived的优势在于无状态组件的故障切换,常用来web前端的故障转移,应用于数据库场景中,最致命的标题就是脑裂现在数据乱写的高风险,为集团带来巨大麻烦。

  • MySQL Cluster
    MySQL
    Cluster真正达成了高可用,但是使用的是NDB存款和储蓄引擎,并且SQL节点有单点故障难题。

  • 半联合复制(5.5+)
    半同步复制大大收缩了“binlog
    events只设有故障master上”的题材。在提交时,保障至少二个slave(并不是全部的)接收到binlog,由此部分slave恐怕没有收受到binlog。

  • PXC
    PXC完成了劳动高可用,数据同步时是出现复制。不过仅协助InnoDB引擎,全部的表都要有主键。锁争论、死锁难题相对较多等等难点。

先是是大家DBA对当中一台服务器经过开始化设置和优化,比如按数据库的最优政策调整基本参数,分区和挂在磁盘,预装pt-tool
\ MHA Node \ Xtrbackup \ Innotop \
oak-tool等数据库常用的管理软件,然后交付给运营同学实行打包镜像,之后有所交付给DBA的服务器都以按此镜像进行铺排。那样一来,大家的OS服务器就相当规范了,同时也预装了我们常用的管理工科具。

2.4.MHA的优势

  • 障切换快

    主从复制集群中,只要从库在复制上尚无延迟,MHA平时能够在数秒内完毕故障切换。9-10秒内检查到master故障,能够选择在7-10秒关闭
    master以制止出现裂脑,几分钟内,将差异中继日志(relay
    log)应用到新的master上,因而总的宕机时间日常为10-30秒。复苏新的master后,MHA并行的上涨其他的slave。即便在有数万台
    slave,也不会潜移默化master的过来时间。
    DeNA在超过1肆1玖个MySQL(主要5.0/5.1本子)主从环境下利用了MHA。当mater故障后,MHA在4秒内就做到了故障切换。在古板的主动/被动集群化解方案中,4秒内形成故障切换是不容许的。

  • master故障不会招致数据分歧
    当 方今的master现身故障是,MHA自动识别slave之间连结日志(relay
    log)的例外,并运用到拥有的slave中。那样具有的salve能够维持同步,只要持有的slave处于存活状态。和Semi-
    Synchronous Replication一起利用,(大概)能够确认保证没有数据丢失。

  • 需修改当前的MySQL设置
    MHA的设计的基本点尺度之一就是不择手段地回顾易用。MHA工作在古板的MySQL版本5.0和之后版本的主从复制环境中。和其他高可用化解格局比,MHA并不供给改变MySQL的铺排环境。MHA适用于异步和半齐声的主从复制。
    起步/结束/升级/降级/安装/卸载MHA不需求转移(包扩运维/截至)MySQL复制。当须要进步MHA到新的版本,不供给截止MySQL,仅仅替换来新本子的MHA,然后重启MHA Manager就好了。
    MHA运维在MySQL
    5.0初始的原生版本上。一些别样的MySQL高可用化解方案供给一定的版本(比如MySQL集群、带全局工作ID的MySQL等等),但并不仅为了
    master的高可用才迁移应用的。在多数情景下,已经铺排了相比旧MySQL应用,并且不想单独为了落到实处Master的高可用,花太多的年月迁移到不相同的蕴藏引擎或更新的前敌发行版。MHA工作的总结5.0/5.五分之一.5的原生版本的MySQL上,所以并不需求迁移。

  • 不必扩充大气的服务器
    MHA由MHA Manager和MHA Node组成。MHA
    Node运维在急需故障切换/苏醒的MySQL服务器上,因而并不须要额外扩张服务器。MHA
    Manager运维在一定的服务器上,因此要求追加一台(达成高可用须求2台),不过MHA
    Manager可以监察和控制大批量(甚至上百台)单独的master,由此,并不供给扩张大气的服务器。尽管在一台slave上运转MHA
    Manager也是足以的。综上,实现MHA并没用额外扩充大气的劳务。

  • 无品质下跌
    MHA适用与异步或半联袂的MySQL复制。监察和控制master时,MHA仅仅是每隔几秒(私下认可是3秒)发送2个ping包,并不发送重查询。能够赢得像原生MySQL复制一样快的品质。

  • 适用于其余存款和储蓄引擎
    MHA能够运作在只要MySQL复制运维的存款和储蓄引擎上,并不仅限制于InnoDB,固然在科学迁移的价值观的MyISAM引擎环境,一样能够动用MHA。

大家的数据库也有谈得来的陈设专业,比如配置文件原则,除了部分可调参数是变量,其余参数全部施用原则模板;别的像MySQL的设置目录、数据目录、二进制日志目录、一时文件目录都有联合的正儿八经,依据差异的实例端口来分别。

3.MHA最佳实践

澳门金沙国际网址 3

图形来源于网络

当然MySQL严酷要做到口径,在未形成自动化陈设在此之前,是比较辛苦的,困难的不是安插技术,而是规则意识。日常贰个铺面都有许八个DBA共管数据库,由于事先的办事习惯我们喜欢安份守己本人的措施来配置数据库,恐怕尚未正儿八经安顿规则、有平整不过没有严刻遵循,都以心有余而力不足形成标准化的。大家是从一始发就做了条件规则和自动化布署脚本,所以我们最近线上具有数据库的配备都以规范的,为持续自动化平台建设打下了老大好的底子。

3.1.背景介绍

例如,我们在管理机使用如下命令,则会在相应的IP服务器上创办三个innodb_buffer_pool等于10GB的数据库实例,端口为3306,挂载设备为fioa,版本为MySQL-5.6.28-OS7-x86_64,数据库编码为utf8:

3.1.1.软件参考文书档案

参考文书档案:
MHA原理:https://code.google.com/p/mysql-master-ha/wiki/HowMHAWorks
MHA原理PPT:http://www.slideshare.net/matsunobu/automated-master-failover
Linux配置代理方法:http://blog.csdn.net/bojie5744/article/details/42148719

软件下载:
Centos Base Yum Repository:
http://mirrors.163.com/.help/CentOS6-Base-163.repo
epel(RHEL 6)Yum
Repository:http://dl.fedoraproject.org/pub/epel/6/x86\_64/epel-release-6-8.noarch.rpm
MySQL5.7 Yum
Repository:https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm
mysql-master-ha(mgr):https://github.com/linyue515/mysql-master-ha/raw/master/mha4mysql-manager-0.57-0.el7.noarch.rpm
mysql-master-ha(node):https://github.com/linyue515/mysql-master-ha/raw/master/mha4mysql-node-0.57-0.el7.noarch.rpm

#pythonInstall_MySQL_Multi.py –ip=xx.xx.xx.xx –port=3306
–mem=10240
–device=/storage/fioa–mysql-version=MySQL-5.6.28-OS7-x86_64
–character=utf8

3.1.2.系统环境介绍

澳门金沙国际网址 4

图表来源原创

  • 系统版本
    CentOS release 6.7 (Final) x86_64

  • MySQL版本
    mysql-5.7.20.-x86_64(RPM)

  • MHA版本
    mha4mysql-manager-0.57
    mha4mysql-node-0.57

自动化创造的实例依照端口实行规范铺排,如下所示,某台服务器安装了330⑥ 、330⑦ 、3308多个端口,则布署目录如下所示:

3.1.3.装置系统需要
  • 论及全数服务器关闭iptables、NetworkManager服务、selinux安全安排

# /etc/init.d/NetworkManager stop
# chkconfig NetworkManager off
# /etc/init.d/iptables stop
# chkconfig iptables off

/etc/selinux/config 改成disable

布置文件路径:

3.2.安装MySQL实例

/etc/my3306.cnf

3.2.1.安装mysql数据库
  • 创建mysql用户

# useradd mysql
# passwd mysql
  • 设置软件

# yum -y install mysql-community-server.x86_64

/etc/my3307.cnf

3.2.2.创设布局文件目录
# mkdir /etc/mysql

/etc/my3308.cnf

3.2.3.创建布局文件
[mysqld]
# GENERAL #
user                           = mysql
port                           = 3389
default_storage_engine         = InnoDB
socket                         = /data1/db3389/my3389.sock
pid_file                       = /data1/db3389/mysql.pid
#read-only =0
tmpdir                  = /data1/tmp
#key_buffer_size                = 128M
max_allowed_packet             = 32M
max_connect_errors             = 1000000
datadir          = /data1/db3389/
log_bin = 2171303389-bin
relay-log=  2171303389-relay-bin
expire_logs_days               = 7
#sync_binlog                    = 0
tmp_table_size                 = 32M
max_heap_table_size            = 32M
max_connections                = 5000
thread_cache_size              = 512
table_definition_cache         = 4096
table_open_cache               = 4096
wait_timeout            = 28800
interactive_timeout     = 28800
transaction-isolation = READ-COMMITTED
binlog-format=row
character-set-server=utf8
skip-name-resolve
back_log=1024
explicit_defaults_for_timestamp=true
server_id=2171303389

# INNODB #
innodb_flush_method            = O_DIRECT
#innodb_data_home_dir = /data1/db3389
innodb_data_file_path = ibdata1:100M:autoextend
#redo log
#innodb_log_group_home_dir=./
innodb_log_files_in_group      = 3
innodb_log_file_size           = 128M
#innodb performance
innodb_flush_log_at_trx_commit = 0
innodb_file_per_table          = 1
innodb_buffer_pool_instances   = 8
innodb_io_capacity             = 2000
innodb_lock_wait_timeout       = 30
binlog_error_action = ABORT_SERVER
innodb_buffer_pool_size        = 128M
innodb_max_dirty_pages_pct=90
innodb_file_format=Barracuda
innodb_support_xa=0
innodb_buffer_pool_dump_at_shutdown = 1
innodb_buffer_pool_load_at_startup = 1
#innodb undo log
innodb_undo_tablespaces=4
innodb_undo_logs=2048
innodb_purge_rseg_truncate_frequency=512
innodb_max_undo_log_size=2G
innodb_undo_log_truncate=1

log_error                      = error.log
#log_queries_not_using_indexes = 1
slow_query_log                 = 1
slow_query_log_file            = slow-queries.log
long_query_time=2
gtid_mode=ON
enforce-gtid-consistency
log-slave-updates
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync_master_info = 10000
slave_sql_verify_checksum=1
skip-slave-start
init-connect='SET NAMES utf8'
character-set-server=utf8
skip-character-set-client-handshake
bind-address=0.0.0.0
skip-external-locking
slave-parallel-workers=6

[mysql5.6]
myisam_recover                 = FORCE,BACKUP

数据库安装路径:

3.2.4.创立授权目录
# mkdir -p /data1/db3389
# mkdir -p /data1/tmp
# chown -R mysql:mysql /data1/db3389
# chown -R mysql:mysql /data1/tmp

/storage/fioa/mysql3306:

3.2.5.初始化MySQL实例
# mysqld --defaults-file=/etc/mysql/my3389.cnf --initialize --user=mysql
# mysql_ssl_rsa_setup 

binlog

3.2.6.启动mysql实例
# mysqld_safe --defaults-file=/etc/mysql/my3389.cnf &
# cat /data1/db3389/error.log | grep temp
# mysql -S /data1/db3389/my3389.sock -p'z&Di4b_oSM*-'
mysql> set password=''; #重置密码为空

data

3.3.部署MySQL复制

mysql-error.log

3.3.1.主库创制复制用户
mysql> grant replication slave, replication client on *.* to replica@'192.168.217.%' identified by 'mycatDBA';

mysql-tmpdir

3.3.2.主库成立mha用户
mysql> grant all privileges on *.* to mha@'192.168.217.132' identified by 'mysqlDBA';

/storage/fioa/mysql3307:

3.3.3.主库备份数据库
# mysqldump -S /data1/db3389/my3389.sock --single-transaction --master-data=2 --opt -A | gzip >  /data1/tmp/full_3389.tar.gz

binlog

3.3.4.主库传输至从库
# scp /data1/tmp/full_3389.tar.gz 192.168.217.131:/data1/tmp

data

3.3.5.从库恢复生机数据库
# gunzip < /data1/tmp/full_3389.tar.gz | mysql -S /data1/db3389/my3389.sock

留神:复苏数据库前,从库最好reset master;,否则将应运而生转手荒谬:
ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

mysql-error.log

3.3.6.从库初叶化同步数据
mysql> change master to master_host='192.168.217.130',master_port=3389,master_user='replica',master_password='mycatDBA',master_auto_position=1;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql> start slave;
Query OK, 0 rows affected (0.03 sec)


mysql> show slave status \G
*************************** 1. row ***************************
...... 省略 ......
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
...... 省略 ......

mysql-tmpdir

3.4.部署MHA软件

/storage/fioa/mysql3308:

3.4.1.设置软件
  • epel yum源安装情势

# yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
# #根据MHA角色安装对应的软件包即可
# yum -y --nogpgcheck install mha4mysql-node-0.57-0.el7.noarch.rpm
# yum -y install --nogpgcheck mha4mysql-manager-0.57-0.el7.noarch.rpm
  • 本地安装情势

# yum -y --nogpgcheck install perl-DBD-MySQL*
# yum -y --nogpgcheck install perl-Config-Tiny*
# yum -y --nogpgcheck install perl-Parallel-ForkManager*
# yum -y --nogpgcheck install  perl-MailTools*
# yum -y --nogpgcheck install perl-Email-Date-Format*
# yum -y --nogpgcheck install perl-Mail-Sender*
# yum -y --nogpgcheck install perl-MIME-Types*
# yum -y --nogpgcheck install perl-MIME-Lite*
# yum -y --nogpgcheck install perl-Mail-Sendmail*
# yum -y --nogpgcheck install perl-Log-Dispatch*
# #根据MHA角色安装对应的软件包即可 
# yum -y --nogpgcheck install mha4mysql-node-0.57-0.el7.noarch.rpm
# yum -y install --nogpgcheck mha4mysql-manager-0.57-0.el7.noarch.rpm

binlog

3.4.2.挂在VIP
  • master

# /sbin/ifconfig eth0:1 192.168.217.201 broadcast 192.168.217.255 netmask 255.255.255.0
# /sbin/arping -f -q -c 5 -w 5 -I eth0 -s 192.168.217.201 -U 192.168.217.2

data

3.4.3.配置SSH互信

在现网环境中差不离都以禁止root远程登陆服务器得,所以ssh免密码登陆要在mysql用户下实行布署,那是地处安全角度考虑出发。

  • master:

# su - mysql
$ ssh-keygen -t rsa
$ rm -rf ~/.ssh/*
  • slave:

# su - mysql
$ ssh-keygen -t rsa
$ rm -rf ~/.ssh/*
  • manager:

# su - mysql
$ ssh-keygen -t rsa
$ cd ~/.ssh
$ mv id_rsa.pub authorized_keys
$ scp * 192.168.217.130:~/.ssh/
$ scp * 192.168.217.131:~/.ssh/
$ #测试ssh
$ ssh 192.168.217.130 date 
Wed Nov 22 05:48:54 PST 2017
$ ssh 192.168.217.131 date 
Wed Nov 22 05:47:58 PST 2017

mysql-error.log

3.4.4.配置mysql用户sudo权限
  • 加上普通用户登陆tty终端权限

# vim /etc/sudoers

#将以下的参数注释,意思就是sudo默认需要tty终端。注释掉就可以在后台执行了。
#Defaults    requiretty
  • 盛开普通用户执行sudo命令权限

# cd /etc/sudoers.d/
# vim mysql

User_Alias  MYSQL_USERS = ALL
Runas_Alias MYSQL_RUNAS = root
Cmnd_Alias  MYSQL_CMNDS = ALL
MYSQL_USERS ALL = (MYSQL_RUNAS) NOPASSWD: MYSQL_CMNDS

mysql-tmpdir

3.4.5.创办MHA配置文件
  • 开创布局文件目录

# mkdir /etc/mha
  • 创办MHA配置文件

# cat app3389.cnf 
[server default]
user=mha
password=mysqlDBA
manager_workdir=/data1/mha/masterha/app3389
manager_log=/data1/mha/masterha/app3389/app3389.log
remote_workdir=/data1/mha/masterha/app3389
ssh_user=mysql
repl_user=replica    
repl_password=mycatDBA
ping_interval=3         

secondary_check_script="masterha_secondary_check -s 192.168.1.122 -s 192.168.1.122"
master_ip_failover_script="/etc/mha/master_ip_failover.sh 192.168.1.201 1"
master_ip_online_change_script="/etc/mha/master_ip_online_change.sh 192.168.1.201 1"
shutdown_script="/etc/mha/power_manager"
#report_script="/etc/mha/end_report"

[server1]
hostname=192.168.1.120
port=3389
master_binlog_dir=/data1/db3389
candidate_master=1   
master_pid_file=/data1/db3389/mysql.pid               

[server2]
hostname=192.168.1.121
port=3389
master_binlog_dir=/data1/db3389
candidate_master=1
master_pid_file=/data1/db3389/mysql.pid    

[binlog1]
hostname=192.168.1.122
master_binlog_dir=/data1/mha/binlog/3389
no_master=1
ignore_fail=1

如此布置的数据库达到了原则的程度,所以大家DBA只要精通IP和端口,就足以很不难地知道这一个实例的持有音信,无疑是自动化的完美基础。

3.4.6.上传MHA切换脚本

master_ip_failover.sh
master_ip_online_change.sh
power_manager

只顾:脚本内容中要修改网卡名字

my $vip  = shift;
my $interface = 'eth1';
my $key = shift;
  • 上传故障切换脚本并授权

# chmod 755 master_ip_*
# chmod 755 power_manager

发表评论

电子邮件地址不会被公开。 必填项已用*标注