安装MySQL 5.7

  • yum源的配置文件如下
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
gpgcheck=0
  • 使用yum install mysql-community-server -y安装mysql

  • 安装完毕mysql之后的配置操作

    • systemctl start mysqld
    • cat /var/log/mysqld.log | grep password --> 获取临时密码
    • mysql -uroot -p -> 输入临时密码
    • set password for 'root'@'localhost' = password('New@password123');
    • flush privileges;
    • systemctl stop mysqld -> 先关闭mysqld, 注意: 如果卡住了, 使用Ctrl + C结束, 在使用ps aux | grep mysqld 查看到mysqld进程的id号, 使用kill -9 id杀死mysqld进程, 在使用systemctl stop mysqld
  • 修改/etc/my.cnf配置文件的[mysqld]域

    • master节点

      datadir=/var/lib/mysql
      socket=/var/lib/mysql/mysql.sock
      server_id=1
      innodb_file_per_table=1
      log_bin=master-bin
      relay_log=relay-bin
      read_only=1
      relay_log_purge=0 # 一定要开启
      plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
      rpl_semi_sync_master_enabled = 1
      rpl_semi_sync_slave_enabled = 1
      rpl_semi_sync_master_timeout = 5000
    • slave1 节点(主需要修改server_id)


      datadir=/var/lib/mysql
      socket=/var/lib/mysql/mysql.sock
      server_id=10
      innodb_file_per_table=1
      log_bin=master-bin
      relay_log=relay-bin
      read_only=1
      relay_log_purge=0
      plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
      rpl_semi_sync_master_enabled = 1
      rpl_semi_sync_slave_enabled = 1
      rpl_semi_sync_master_timeout = 5000
      • slave2 节点(主需要修改server_id)

      datadir=/var/lib/mysql
      socket=/var/lib/mysql/mysql.sock
      server_id=11
      innodb_file_per_table=1
      log_bin=master-bin
      relay_log=relay-bin
      read_only=1
      relay_log_purge=0
      plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
      rpl_semi_sync_master_enabled = 1
      rpl_semi_sync_slave_enabled = 1
      rpl_semi_sync_master_timeout = 5000
  • systemctl start mysqld 启动master, slave1, slave2节点

  • 这三个节点之间需要ssh互相密钥通信, 方便起见, 在master节点执行, ssh-keygen -i rsa -P "", 接着使用 ssh-copy-id -i .ssh/id_rsa.pub root@localhost, 接着将.ssh目录拷贝到其他节点即可

  • 在master节点创建用户'repl'@'192.168.1.%'(该repl用户只用在master上存在), 创建用户'mhaadmin'@'192.168.1.%'(该用户需要在所有的节点上都有, 因为该用户是监控用户)

  • 为repl用户赋予replication slave权限, 为mhaadmin赋予all权限

  • create user 'repl'@192.168.1.%' identified by 'New@password123';

  • grant replication slave on . to 'repl'@'192.168.1.%';

  • create user 'mhaamdin'@192.168.1.%' identified by 'New@password123';

  • grant all on . to 'mhaamdin'@'192.168.1.%';

安装配置mha4mysql

  • rpm(mha4mysql-manager, mha4mysql-node)包自己找
  • 在所有节点上使用yum安装这两个包, 安装时会安装很多的依赖包
  • 创建配置文件的目录(所有节点): mkdir -pv /etc/masterha
  • 在master节点中, vim /etc/masterha/app1.cnf
[server default]
user=mhaadmin # 监控用户, 在所有的mysql节点中都要有
password=yourpassword
manager_workdir=/data/masterha/app1 # 工作目录, 会自动创建的
manager_log=/data/masterha/app1/manager.log # 日志文件的路径
remote_workdir=/data/masterha/app1 # slave节点的工作目录, 一般与master一样
ssh_user=root # ssh连接登录时的用户, mha依赖于ssh
repl_user=repl # 复制的用户
repl_password=yourpassword
ping_interval=1 # 心跳频率
master_ip_failover_script= /usr/local/bin/master_ip_failover //设置自动failover时候的切换脚本,perl脚本, 实现VIP的切换
master_ip_online_change_script= /usr/local/bin/master_ip_online_change //设置手动切换时候的切换脚本 [server1]
hostname=172.20.10.7
port=3306
candidate_master=1 # 当master挂时提升为master [server2]
hostname=172.20.10.8
port=3306
candidate_master=1 当master挂时提升为master [server3]
hostname=172.20.10.9
port=3306
# candidate_master=1

配置MySQL的主从复制

  • 在slave1和slave2节点中, 使用change master to...命令配置好连接参数
  • 在slave1和slave2中使用start slave
  • 在master节点中使用show slave hosts查看是否成功构建复制架构

测试MHA

  • masterha_check_ssh --conf=/etc/masterha/app1.cnf # 测试ssh的连接
  • masterha_check_repl --conf=/etc/masterha/app1.cnf # 测试复制是否可用
  • masterha_check_status --conf=/etc/masterha/app1.cnf # 测试是否运行, 现在应该是NOT RUNNING

启动MHA

  • nohub masterha_manager --remove_dead_master_conf --ignore_last_failover --conf=/etc/masterha/app1.cnf > /data/masterha/app1/manager.log 2>&1 & # 所有的信息都重定向到/data/masterha/app1/manager.log中
  • masterha_check_status --conf=/etc/masterha/app1.cnf # 此时查看应该已经运行了
–remove_dead_master_conf 该参数代表当发生主从切换后,老的主库的ip将会从配置文件中移除。

关闭MHA

  • masterha_stop --conf=/etc/masterha/app1.cnf

在master节点当机时, 会将VIP迁移到候选那的master节点上, 在manager.log日志中可以看见

搭建MHA的更多相关文章

  1. 搭建MHA测试

    搭建MHA:  手工切换:  masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_maste ...

  2. 基于GTID搭建MHA

    一.简介 MHA 是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程 ...

  3. 搭建MHA环境【2】安装mysql-5.6 + mysql复制

    本例中mysql的安装方式选用了二进制包安装方案.mysql复制用半同步复制方案 [1]安装mysql-5.6.31 要在所有的数据节点上都安装上mysql,安装方式大致相同,所以我这里就不重复写多次 ...

  4. 搭建MHA时 yum 安装perl模块提示 baseurl 错误

    今天在搭建MySQL MHA  安装MHA node所需的perl模块(DBD:mysql)时遇到了一个小的错误,如果思路不对的话,还是产生不少麻烦. 现梳理记录下来. 问题现象 执行的命令 yum ...

  5. 搭建MHA环境【1】规划+linux相关的设置

    [1]规划 MHA这套软件包涵两个部分 1.manager :主要负责对MySQL集群状态的检查&在master 库宕机时对故障进行转移. 2.node      :主要包涵状态检查& ...

  6. 搭建MHA问题汇总

    1,Can't exec "mysqlbinlog": No such file or directory at /usr/share/perl5/vendor_perl/MHA/ ...

  7. MySQL高可用之MHA的搭建 转

     http://www.cnblogs.com/muhu/p/4045780.html http://www.cnblogs.com/gomysql/p/3675429.html http://www ...

  8. MHA环境的搭建

    MHA简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开 ...

  9. MySQL高可用之MHA的搭建

    MySQL MHA架构介绍: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Face ...

随机推荐

  1. html复杂url提交

    在使用手机向webapi发送照片请求的时候遇到一个问题,关于base64位字符串码无法识别,提交的表单是这样的: <form id="form1" method=" ...

  2. Kinect插件使用

    Kinect Scripts文件夹下所有managers(管理器)的用途: 这些在KinectScripts文件夹下的管理器都是组件,你可以根据你想实现的功能在项目中使用它. KinectManage ...

  3. javascript table排序之jquery.tablesorter.js

    table排序 jquery.tablesorter.js 一.Demo下载地址: 1.tablesorter.js下载地址: http://download.csdn.net/detail/zhan ...

  4. iOS开发进制转换

    1.十进制转换为二进制 /** 十进制转换为二进制 @param decimal 十进制数 @return 二进制数 */ + (NSString *)getBinaryByDecimal:(NSIn ...

  5. 「BZOJ 3270」博物馆「高斯消元」

    应该算高斯消元经典题了吧. 题意:一个无向连通图,有两个人分别在\(s,t\),若一个人在\(u\),每一分钟有\(p[u]\)的概率不动,否则随机前往一个相邻的结点,求在每个点相遇的概率 题解: 首 ...

  6. winform datagridview不显示滚动条

    datagridview 数据行数已经超出表格显示范围了,为什么右侧没有滚动条呢? 这个其实不是DataGridView的问题,实际上滚动条是出现了的,但被其他东西挡住了.如果网格是放在panel上的 ...

  7. 51nod1244 莫比乌斯函数之和(杜教筛)

    题面 传送门 题解 我--我忘记把预处理的块的大小调成\(n^{\frac{2}{3}}\)了--(仰天) 首先\(\mu*1=e\) 然后杜教筛就行了 //minamoto #include< ...

  8. React Native 在用户网络故障时自动调取缓存

    App往往都有缓存功能,例如常见的新闻类应用,如果你关闭网络,你上次打开App加载的数据还在,只是不能加载新的数据了. 我的博客bougieblog.cn,欢迎前来尬聊. 集中处理请求 如果你fetc ...

  9. 工具类_IsNull

    import java.util.List; /** * 判断是否为空 2015-08-17 *  * @author lipanquan *  */public final class IsNull ...

  10. Go语言基础环境配置(windows)

    一.基础软件包安装 需要安装go环境包.git.IDE(VScode),安装包见下图: 1.1 安装go windows环境直接双击安装包安装即可,在cmd窗口输入go,结果如下图所示即表示安装成功: ...