MHA+MySQL主从配置实现MySQL高可用

前面文章已经介绍了MySQL的安装和主从配置

MySQL安装

MySQL主从配置

主从配置应该只能算是一套容灾方案,当主库崩溃之后,我们可以将程序切换到从库以保证系统正常运行,这个切换过程是手动的

主从配置的问题就在于主库down掉之后从库不能自动提升成为主库,今天我们就介绍一个MySQL高可用的解决方案:MHA+Mysql主从配置

MHA - Master High Availability,MySQL高可用方面相对成熟的解决方案,是一个用于故障切换和主从提升的软件

要搭建MHA,要求集群至少要有三个节点,即一主二从。MHA分为MHA-Manager(管理节点)和MHA-Node(数据节点)两部分,结合MySQL主从配置架构图如下(临时画的,略丑陋……):

架构简图

说明一下服务器情况:

1. 一共三台服务器,系统ubuntu16.04 64位
2. IP分别为:192.168.1.222、192.168.1.223、192.168.1.224
3. 222为master节点,223和224都是slave节点
4. mha-manager装在223上,三台机器都装了mha-node

下面介绍MHA的安装和配置

MHA安装

一般我们是将Manager装在某一个Mysql从节点上,当然也可以单独装在一台机器上

1. 下载安装包

MHA的安装包下载需要翻墙,这里我共享一个网盘链接方便大家下载吧

MHA-Manager:

[https://pan.baidu.com/s/1fhIV2XGLgM9tVrKKm6Uexw](https://pan.baidu.com/s/1fhIV2XGLgM9tVrKKm6Uexw "MHA-Manager")
密码:yoed

MHA-Node:

[https://pan.baidu.com/s/1onD8YY5P-DaV9BNObISgFQ](https://pan.baidu.com/s/1onD8YY5P-DaV9BNObISgFQ "MHA-Node")
密码:y5ml

2. 安装相关依赖

apt-get install libdbd-mysql-perl
apt-get install libconfig-tiny-perl
apt-get install liblog-dispatch-perl
apt-get install libparallel-forkmanager-perl

3. 安装MHA Node

由于MHA Manager会用到MHA Node提供的模块,不先安装MHA Node直接安装MHA Manager会报错

cd 安装包上传目录
dpkg -i mha4mysql-node_0.54-0_all.deb

4. 安装MHA Manager

cd 安装包上传目录
dpkg -i mha4mysql-manager_0.55-0_all.deb

MHA配置

1. 环境配置

MHA 集群中的各节点彼此之间均需要基于 ssh 互信通信,以实现远程控制及数据管理功能,所以MHA环境中的三台主机需要相互信任:实现三台主机之间相互免密钥登录

登录MHA Manager机器,建议直接使用root用户

# 生成公钥
ssh-keygen -t rsa
# 生成私钥
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.1.223
# 复制给本机
ssh root@192.168.1.223  'ifconfig'
# 将生成的公私钥传给MHA Node机器
scp -p .ssh/authorized_keys .ssh/id_rsa{,.pub} root@192.168.1.222:/root/.ssh/
scp -p .ssh/authorized_keys .ssh/id_rsa{,.pub} root@192.168.1.224:/root/.ssh/

分别登录MHA Node机器,同样直接使用root用户

# 复制给本机
# 222机器
ssh root@192.168.1.222 'ifconfig'
# 224机器 
ssh root@192.168.1.224 'ifconfig'

要是root登陆的话,需要修改ssh的配置文件

vim /etc/ssh/sshd_config
# PermitRootLogin,设置为YES,再重启SSH

Manager要是装到某一台MySQL上,则需要自己和自己无密码登入,单独到一台服务器则不需要

# 确保可以无密码与自己通信  
ssh 192.168.1.223

测试三台机器之间可以免密钥登录

# 223
ssh 192.168.1.222
ssh 192.168.1.224
# 222
ssh 192.168.1.223
ssh 192.168.1.224
# 224
ssh 192.168.1.222
ssh 192.168.1.223

2. 主从配置

由于之后slave节点会提升为master节点,所以主从配置要做一些修改

Master配置

log_bin = master-bin  # 启动二进制日志
log_bin_index = master-bin.index
relay-log = slave-relay-bin
relay-log-purge = 0  # 禁用或启用不再需要中继日志时是否自动清空它们

Slave配置

log_bin = master-bin
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index
relay-log-purge = 0
read_only = 1

3. MHA Manager配置

登录master,创建mha账号并授权,也可以直接使用root账户或其他有权限的已有用户

需要的权限:Super,select,create,insert,update,delete,drop,reload

mysql>GRANT ALL ON *.* TO 'mhaadmin'@'192.168.1.%' IDENTIFIED BY 'mhapassword';
mysql>FLUSH PRIVILEGES;

创建相关目录

mkdir /usr/local/masterha /usr/local/masterha/app1  # 创建数据文件目录
mkdir /etc/masterha  # 创建配置文件目录

创建配置文件

vi /etc/masterha/app1.cnf

[server default]
user=mhaadmin  # mysql用戶名
password=mhapassword  # mysql密码
ssh_user=root  # ssh免密钥登录的帐号名
repl_user=repl  # mysql复制帐号,主从配置里配的
repl_password=mysql  # mysql复制账号密码
ping_interval=1   # ping间隔,用来检测master是否正常,默认是3秒,尝试三次没有回应的时候自动进行failover

manager_workdir=/usr/local/masterha/app1  # 数据目录
manager_log=/usr/local/masterha/manager.log  # 日志文件
remote_workdir=/usr/local/masterha/app1  # 另外2台机子在运行时候需要创建的目录,注意ssh-keygen帐号的权限问题
master_binlog_dir=/var/log/mysql  # binlog目录,不指定会报错     

[server1] 
hostname=192.168.1.222
candidate_master=1  # master机宕掉后,优先启用这台作为新master
check_repl_delay=0  # 默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master

[server2] 
hostname=192.168.1.223  
no_master=1  # 一定不会选这个机器为master,根据情况设置 

[server3]
hostname=192.168.1.224
# port=3306  # port默认是3306,如果是其他的,需要在这里指定,否则会报错  
candidate_master=1

启动MHA

MHA提供了脚本测试服务是否能正常启动

SSH检查

masterha_check_ssh --conf=/etc/masterha/app1.cnf
ssh check

REPLICATION检查

masterha_check_repl --conf=/etc/masterha/app1.cnf
replication check

检查全部OK的话就可以启动服务了

nohup masterha_manager --conf=/etc/masterha/app1.cnf &> /usr/local/masterha/manager.log &

可以查看进程

ps aux|grep masterha
masterha progress

检查master节点状态

masterha_check_status --conf=/etc/masterha/app1.cnf
master status

启动检查中遇到的问题

User repl does not exist or does not have REPLICATION SLAVE privilege! Other slaves can not start replication from this host.

开始我们在做主从配置的时候,只在master节点创建了用于复制的账号,现在slave节点也可能提升为master节点了,所以在slave节点上也要创建用于复制的账号,账号密码要与master的相同

Can't exec "mysqlbinlog": No such file or directory at /usr/share/perl5/MHA/BinlogManager.pm

ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog

mysql: not found mysql command failed with rc 127:0

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容