博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL + MHA + keepalive + VIP 高可用实验
阅读量:6946 次
发布时间:2019-06-27

本文共 7549 字,大约阅读时间需要 25 分钟。

hot3.png

一、总概:

本文介绍了MySQL高可用性的实现方案MHA,MHA由Node和Manager组成,Node运行在每一台MySQL服务器上,不管是MySQL主服务器,还是MySQL从服务器,都要安装Node。主从安装keepalived,实现虚拟ip漂移,程序不用改IP自动切换。
二、环境
1. 软件版本
操作系统版本:CentOS release 6.4
MySQL数据库版本:5.6.14
MHA版本:mha4mysql-node-0.54-0.el6.noarch.rpm、mha4mysql-manager-0.55-0.el6.noarch.rpm
keepalived版本:1.2.7
2. 主机部署
MHA管理机、客户端模拟:192.168.1.100
master:192.168.1.1
slave:192.168.1.2
三、实验步骤
. 安装MySQL
. MySQL配置主重复制
. 建立ssh无密码登录环境
. 安装MHAmha4mysql-node,mha4mysql-manager 软件包
. 管理机manager上配置MHA文件
. masterha_check_ssh工具验证ssh信任登录是否成功
. masterha_check_repl工具验证mysql复制是否成功
. 启动MHA manager,并监控日志文件
. 测试master宕机后,是否会自动切换
. 测试使用MHA的master_ip_failover,实现故障转移

. 主从安装keepalived ,实现虚拟ip漂移

1. 安装MySQL

master的my.cnf
more /etc/my.cnf

[mysqld]basedir = /usr/local/mysqldatadir = /usr/local/mysql/datasql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_UNSIGNED_SUBTRACTION port = 6603server_id = 1 lower_case_table_names = 1character_set_server = utf8autocommit = offinnodb_flush_log_at_trx_commit = 1skip_name_resolve = ONinnodb_strict_mode = ONlog_bin = mysql-bininnodb_data_home_dir = /usr/local/mysql/datainnodb_log_group_home_dir = /usr/local/mysql/databinlog_format=mixed

slave的my.cnf

more /etc/my.cnf

[mysqld]basedir = /usr/local/mysqldatadir = /usr/local/mysql/datasql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_UNSIGNED_SUBTRACTION port = 6603server_id = 2 lower_case_table_names = 1character_set_server = utf8autocommit = offinnodb_flush_log_at_trx_commit = 1skip_name_resolve = ONinnodb_strict_mode = ONlog_bin = mysql-bininnodb_data_home_dir = /usr/local/mysql/datainnodb_log_group_home_dir = /usr/local/mysql/databinlog_format=mixedread_only = ON

MySQL安装步骤略

2. MySQL配置主重复制(略)

3. 建立ssh无密码登录环境

在192.168.1.100、192.168.1.1、192.168.1.2上修改hostname:

vi /etc/hosts

192.168.1.100	manage192.168.1.1	master192.168.1.2	slave
# 在192.168.1.100:ssh-keygen -t rsassh-copy-id -i .ssh/id_rsa.pub root@192.168.1.1ssh-copy-id -i .ssh/id_rsa.pub root@192.168.1.2# 在192.168.1.1:ssh-keygen -t rsassh-copy-id -i .ssh/id_rsa.pub root@192.168.1.100ssh-copy-id -i .ssh/id_rsa.pub root@192.168.1.2# 在192.168.1.2:ssh-keygen -t rsassh-copy-id -i .ssh/id_rsa.pub root@192.168.1.100ssh-copy-id -i .ssh/id_rsa.pub root@192.168.1.1

测试:

# 在192.168.1.100:ssh 192.168.1.1ssh 192.168.1.2# 在192.168.1.1:ssh 192.168.1.100ssh 192.168.1.2# 在192.168.1.2:ssh 192.168.1.100ssh 192.168.1.1

4. 安装MHA mha4mysql-node,mha4mysql-manager 软件包

# 在192.168.1.100:rpm -ivh rpmforge-release-0.5.2-1.el6.rf.x86_64.rpmyum install perl-DBD-MySQLyum install perl-Config-Tinyyum install perl-Log-Dispatchyum install perl-Parallel-ForkManagerrpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpmrpm -ivh mha4mysql-manager-0.55-0.el6.noarch.rpm# 在192.168.1.1:rpm -ivh rpmforge-release-0.5.2-1.el6.rf.x86_64.rpmyum install perl-DBD-MySQLyum install perl-Config-Tinyyum install perl-Log-Dispatchyum install perl-Parallel-ForkManagerrpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm# 在192.168.1.2:rpm -ivh rpmforge-release-0.5.2-1.el6.rf.x86_64.rpmyum install perl-DBD-MySQLyum install perl-Config-Tinyyum install perl-Log-Dispatchyum install perl-Parallel-ForkManagerrpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm

5. 管理机manager上配置MHA文件

在192.168.1.100:

mkdir -p /masterha/app1
mkdir /etc/masterha
vi /etc/masterha/app1.cnf

[server default]user=rootpassword=12345manager_workdir=/masterha/app1manager_log=/masterha/app1/manager.logremote_workdir=/masterha/app1ssh_user=rootrepl_user=replrepl_password=12345ping_interval=1[server1]hostname=192.168.1.1port=6603master_binlog_dir=/usr/local/mysql/datacandidate_master=1[server2]hostname=192.168.1.2port=6603master_binlog_dir=/usr/local/mysql/datacandidate_master=1

6. masterha_check_ssh工具验证ssh信任登录是否成功

在192.168.1.100:
masterha_check_ssh --conf=/etc/masterha/app1.cnf
7. masterha_check_repl工具验证mysql复制是否成功
在192.168.1.100:
masterha_check_repl --conf=/etc/masterha/app1.cnf
8. 启动MHA manager,并监控日志文件
在192.168.1.100:
nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log 2>&1
# 单开一个终端监控日志

tail -f tail -f /masterha/app1/manager.log

9. 测试master宕机后,是否会自动切换

在192.168.1.1:
service mysql stop
在192.168.1.2:
mysql> show slave status\G
mysql> show variables like 'read_only';

10. 测试使用MHA的master_ip_failover,实现故障转移

恢复主从配置(略)
在192.168.1.100:
在文件/etc/masterha/app1.cnf的[server default]段添加下面一行
master_ip_failover_script=/tmp/master_ip_failover
然后在/tmp/master_ip_failover写入如下代码:

#!/usr/bin/env php  
 $options['new_master_ip'],          'port' => $options['new_master_port'],      );      $string = '
';      file_put_contents('config.php', $string, LOCK_EX);  }  exit(0);  ?>

赋给这个文件可执行权限:

chmod +x /tmp/master_ip_failover

安装PHP:

yum install php
运行MHA进程:
nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log 2>&1
# 单开一个终端监控日志
tail -f tail -f /masterha/app1/manager.log

测试切换:

停止master上的mysql
在192.168.1.1:
service mysql stop
在192.168.1.2:
mysql> show slave status\G
mysql> show variables like 'read_only';
11. 主从安装keepalived,实现虚拟ip漂移
恢复主从配置(略)
vip:192.168.1.3/192.168.1.4
master:192.168.1.1
slave:192.168.1.2
在主从两个机器上安装keepalived(略)

配置keepalived

在192.168.1.1:
vim /etc/keepalived/keepalived.conf

global_defs { router_id MySQL-ha }vrrp_instance VI_1 {  state BACKUP  interface eth1  virtual_router_id 90  priority 100  advert_int 1  nopreempt    authentication {  auth_type PASS    auth_pass 1111  }virtual_ipaddress {  192.168.1.3  192.168.1.4  }}virtual_server 192.168.1.3 6603 {  delay_loop 6  lb_algo wrr  lb_kind DR  nat_mask 255.255.255.0  persistence_timeout 50  protocol TCP    real_server 192.168.1.1 6603 {  weight 1  notify_down /usr/local/mysql/bin/mysql.sh  TCP_CHECK {      connect_timeout 10      nb_get_retry 3      connect_port 6603      }  }}

vim /usr/local/mysql/bin/mysql.sh

#!/bin/bashpkill keepalived

chmod +x /usr/local/mysql/bin/mysql.sh

# 先启动mysql,再启动keepalived
service mysql start
service keepalived start
在192.168.1.2:
vim /etc/keepalived/keepalived.conf

global_defs { router_id MySQL-ha}vrrp_instance VI_1 {  state BACKUP  interface eth1  virtual_router_id 90  priority 80  advert_int 1  authentication {    auth_type PASS    auth_pass 1111  }virtual_ipaddress {  192.168.1.3  192.168.1.4  }}virtual_server 192.168.1.3 6603 {  delay_loop 6  lb_algo wrr  lb_kind DR  nat_mask 255.255.255.0  persistence_timeout 50  protocol TCP    real_server 192.168.1.2 6603 {  weight 1  notify_down /usr/local/mysql/bin/mysql.sh  TCP_CHECK {      connect_timeout 10      nb_get_retry 3      connect_port 6603      }  }}

vim /usr/local/mysql/bin/mysql.sh

#!/bin/bashpkill keepalived

chmod +x /usr/local/mysql/bin/mysql.sh

# 先启动mysql,再启动keepalived
service mysql start
service keepalived start

在192.168.1.100:

运行MHA进程:
nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log 2>&1
# 单开一个终端监控日志
tail -f tail -f /masterha/app1/manager.log

测试:

在192.168.1.1:
ip a
在192.168.1.2:
ip a
mysql> show slave status\G
在192.168.1.100:
mysql -u u1 -p12345 -P 6603 -h 192.168.1.3 -e "show variables like 'server_id'"
mysql -u u1 -p12345 -P 6603 -h 192.168.1.3 -e "show variables like 'read_only'"
停master的mysql,再查看
在192.168.1.1:
service mysql stop
ip a
在192.168.1.2:
ip a
mysql> show slave status\G
在192.168.1.100:
mysql -u u1 -p12345 -P 6603 -h 192.168.1.3 -e "show variables like 'server_id'"
mysql -u u1 -p12345 -P 6603 -h 192.168.1.3 -e "show variables like 'read_only'"
四、参考
http://os.51cto.com/art/201307/401702.htm
http://www.tuicool.com/articles/ZFfqua
http://www.tuicool.com/articles/ErU7nu
http://www.tuicool.com/articles/2ENRjaI
http://blog.itpub.net/14594028/viewspace-1073516/

转载于:https://my.oschina.net/ydsakyclguozi/blog/392638

你可能感兴趣的文章
管理团队时,怎样保证一直做正确的事?
查看>>
如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为 IUSR_MACHINENAME)或经过身份验证的请求用户。...
查看>>
表单元素之搭车系
查看>>
mysql+redis
查看>>
[Android]Dagger2Metrics - 测量DI图表初始化的性能(翻译)
查看>>
sublime开启vim模式
查看>>
Rikka with Chess(规律)
查看>>
【设计模式】迭代器模式
查看>>
MATLAB中imshow()和image()
查看>>
Atitit.eclipse git使用
查看>>
JAVA逆向&反混淆-追查Burpsuite的破解原理(转)
查看>>
cocos2dx 3.1从零学习(一)——入门篇(一天学会打飞机)
查看>>
文档批量格式化之word技能
查看>>
C#~异步编程再续~await与async引起的w3wp.exe崩溃
查看>>
c3p0数据库连接池死锁问题
查看>>
SVN版本冲突解决
查看>>
java多线程知识点汇总(四)多线程知识点脉络图
查看>>
nginx的upstream目前支持5种方式的分配
查看>>
android图像处理(3) 底片效果
查看>>
stl 之set图解
查看>>