MySQL高可用部署MHA

MHA简介

  • MHA 由两部分组成: MHA Manager(管理节点)和 MHA Node(数据节点)。 MHA Manager可以单独部署在一台独立的机器上管理多个 master-slave 集群,也可以部署在一台 slave 节点上。
  • MHA Node 运行在每台 MySQL 服务器上, MHA Manager 会定时探测集群中的 master节点,当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master,然后将所有其他的 slave 重新指向新的 master。整个故障转移过程对应用程序完全透明。

环境准备

服务器(安装MHA):172.20.29.201
主服务器:172.20.29.202
从服务器A:172.20.29.203
从服务器B:172.20.29.204

1. 同步时间

#定义计划任务
crontab -e 
        */5 * * * *     /usr/sbin/ntpdate 172.20.0.1 &> /dev/null   #每5分钟自动同步时间至服务器

2. 关闭防火墙,SELINUX

iptables -vnL                   #查看防火墙状态
systemctl stop firewall         #关闭防火墙
getenforce                      #查看SELinux状态
setenforce 0                    #关闭SElinux

3. 配置SSH公钥(基于key验证)

ssh-keygen -t rsa -P '' -f "/root/.ssh/id_rsa"  #生成私钥
ssh-copy-id 172.20.29.201       #复制公钥至本机
#四台主机共用一把钥匙
    scp -pr /root/.ssh 172.20.29.202:/root/ 
scp -pr /root/.ssh 172.20.29.203:/root/
scp -pr /root/.ssh 172.20.29.204:/root/

4. 所有服务器上安装MHA-node包

yum install mha4mysql-node-0.56-0.el6.noarch
mysql5.5

MHA服务器配置

#MHA服务器上安装MHA包(注意安装依赖epel源)
yum install mha4mysql-manager-0.56-0.el6.noarch

#创建并修改MHA配置文件
mkdir /etc/mha/ -p
vim /etc/mha/app1.cnf
    [server default]
    user=MHAuser            #连接每一台数据库的用户
    password=centos         #连接每一台数据库的密码
    manager_workdir=/data/mastermha/app1/
    manager_log=/data/mastermha/app1/manager.log
    remote_workdir=/data/mastermha/app1/
    master_binlog_dir=/data/binlogs/    #指定管理的二进制文件目录
    ssh_user=root           #使用什么账号来连接每台主机
    repl_user=MHAuser       #ssh协议连接的用户
    repl_password=centos    #ssh协议连接的密码
    ping_interval=1     #多长时间去探测每个节点
    [server1]
    hostname=172.20.29.202  #主服务器地址
    candidate_master=1      #设置为主服务器
    [server2]
    hostname=172.20.29.203  #从服务器地址
    candidate_master=1      #设置主服务器宕机立刻升级为主服务器
    [server3]
    hostname=172.20.29.204  #从服务器地址

#检查每一台主机ssh协议是否生效
masterha_check_ssh --conf=/etc/mha/app1.cnf 
#检查每一台主机复制是否正常
masterha_check_repl --conf=/etc/mha/app1.cnf

#开启MHA集群(注意此处前台执行,长期前台执行,建议在主机上运行)
masterha_manager --conf=/etc/mha/app1.cnf

主服务器配置.

#创建文件夹用于存放二进制日志文件(注意文件夹权限)
mkdir /data/binlogs
chown mysql.mysql /data/binlogs/
chmod 770 /data/binlogs/

#修改mysql配置文件
vim /etc/my.cnf
        server_id= 11           #主服务器ID标识
        log_bin=/data/binlogs/master-bin    #配置文件里指定二进制日志文件存放目录
        binlog_format=row       #以行模式复制数据
        skip_name_resolve=1       #做名字解析
        rpl_semi_sync_master_enabled=ON  #开启半同步插件

#授权从服务器登录本机数据库
grant replication slave,replication client on *.* to 'jian'@'172.20.29.%' identified by 'centos';
#授权所有权限给MHA管理所有服务器
grant all on *.* to MHAuser@'172.20.29.%' identified by 'centos';

#刷新系统权限列表
flush privileges;

从服务器A配置

#创建文件夹用于存放二进制日志文件(注意文件夹权限)
mkdir /data/binlogs
chown mysql.mysql /data/binlogs/
chmod 770 /data/binlogs/

#修改mysql配置文件
vim /etc/my.cnf     
server-id = 12                      #从服务器ID标识
log-bin=/data/binlogs/master-bin    #配置文件里指定二进制日志文件存放目录
read_only=on                        #配置从服务器只读
relay_log_purge=0                   #中继日志不清除
skip_name_resolve=1                 #做名字解析
rpl_semi_sync_slave_enabled=ON;     #开启半同步插件

#从库建立与主库的连接
change master to 
MASTER_HOST='172.20.29.202',
MASTER_USER ='jian',
MASTER_PASSWORD ='centos',
MASTER_LOG_FILE ='master-bin.000001',
MASTER_LOG_POS =245;

start slave;        #开启IO线程
show slave status\G #查看IO线程
    Slave_IO_Running: Yes   #这两项全部为yes,成功;否则失败.  
    Slave_SQL_Running: Yes

从服务器B配置

#创建文件夹用于存放二进制日志文件(注意文件夹权限)
mkdir /data/binlogs
chown mysql.mysql /data/binlogs/
chmod 770 /data/binlogs/

#修改mysql配置文件
vim /etc/my.cnf 
    server-id = 13                      #从服务器ID标识
    log-bin=/data/binlogs/master-bin    #配置文件里指定二进制日志文件存放目录
    read_only=on                        #配置从服务器只读
    relay_log_purge=0                   #中继日志不清除
    skip_name_resolve=1                 #做名字解析

#建立连接之前建议清理线程缓存
    stop slave;     
    reset slave;

#从库建立与主库的连接
change master to 
MASTER_HOST='172.20.29.202',
MASTER_USER ='jian',
MASTER_PASSWORD ='centos',
MASTER_LOG_FILE ='master-bin.000001',
MASTER_LOG_POS =245;

start slave;        #开启IO线程
show slave status\G #查看IO线程
    Slave_IO_Running: Yes   #这两项全部为yes,成功;否则失败.  
    Slave_SQL_Running: Yes

测试

  • 假设主服务器宕机
  • MHA程序将自动将从服务器A切换为主服务器,并停下MHA程序

    • 后续启用集群管理
  • 备注:本文只简单记录了mha的环境部署过程.

猜你喜欢

转载自blog.51cto.com/13769014/2130073
今日推荐