MHA高可用+VIP 集群故障转移(已测试成功)
192.168.158.201 mha管理,mysql主服
192.168.158.202 mha节点,mysql从服
192.168.158.203 mha节点,mysql从服
Manager命令说明
masterha_check_ssh 检查MHA的SSH配置状况
masterha_check_repl 检查MySQL复制状况
masterha_manger 启动MHA
masterha_check_status 检测当前MHA运行状态
masterha_master_monitor 检测master是否宕机
masterha_master_switch 控制故障转移(自动或者手动)
masterha_conf_host 添加或删除配置的server信息
Node命令说明
save_binary_logs 保存和复制master的二进制日志
apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs 清除中继日志(不会阻塞SQL线程)
[生产环境最好搭建专属yum源]
更新yum源为aliyun[可选操作]
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
yum clean all
yum makecache
配置各台服务器之间ssh连接免密码
ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.158.201
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.158.202
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.158.203
在各台服务器上安装
rpm -ivh epel-release-6-8.noarch
rpm -qa |grep epel-release
yum -y install perl-DBD-MySQL
rpm -ivh mha4mysql-node-0.56-0.el6.noarch
rpm -qa |grep mha4mysql
mkdir -p /etc/masterha/app1
mkdir -p /etc/masterha
#建立配置文件
##################################
cat >/etc/masterha/myha.cnf<< EOF
[server default]
manager_workdir=/masterha/app1
manager_log=/masterha/app1/manager.log
#mysql管理员和密码
user=manager
password=mgr2016
ssh_user=root
#mysql同步密码
repl_user=rep
repl_password=rep2016
ping_interval=1
shutdown_script=""
#主库发生故障后转移VIP脚本
master_ip_failover_script="/usr/local/bin/master_ip_failover"
master_ip_online_change_script=""
report_script=""
[server1]
hostname=192.168.158.201
#mysql logbin文件目录
master_binlog_dir=/data/binlog
#主库要有这个参数
candidate_master=1
[server2]
hostname=192.168.158.202
candidate_master=1
master_binlog_dir=/data/binlog
[server3]
hostname=192.168.158.203
candidate_master=1
master_binlog_dir=/data/binlog
EOF
##################################
cat >masterha_default.cnf<<EOF
[server default]
user=manager
password=mgr2016
ssh_user=root
repl_user=rep
repl_password=rep2016
ping_interval=1
master_ip_failover_script="/usr/local/bin/master_ip_failover"
master_ip_online_change_script="/usr/local/bin/master_ip_online_change"
#shutdown_script= /script/masterha/power_manager
#report_script=""
#secondary_check_script = masterha_secondary_check -s node1 -s node2 -s node3 --user=manager --master_host=node1 --master_ip=192.168.158.201 --master_port=3306
EOF
##################################
【安装mysql5.6数据库并设置主从,这里省略……】
chkconfig --add mysqld
service mysqld start
GRANT REPLICATION SLAVE ON *.* TO rep@'192.168.%' IDENTIFIED BY 'rep2016';
GRANT all ON *.* TO 'manager'@'192.168.%' IDENTIFIED BY 'mgr2016';
flush privileges;
CHANGE MASTER TO MASTER_HOST='192.168.158.201', MASTER_USER='rep',MASTER_PASSWORD='rep2016',master_port=3306;
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
echo 'PATH=$PATH:/usr/local/mysql/bin'>>/etc/profile
. /etc/profile
##################################
cat > /etc/my.cnf << EOF
[client]
port = 3306
socket = /data/mysql.sock
#Here follows entries for some specific programs
# The MySQL server
[mysqld]
port = 3306
user = mysql
log-bin = /data/binlog/mysqlbin
socket = /data/mysql.sock
pid-file = /data/mysql.pid
log_error = /data/mysql-error.log
expire-logs-days = 14
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
slow_query_log = 1
slow_query_log_file=/data/slowsql.log
basedir = /usr/local/mysql
datadir = /data
tmpdir = /data/tmp
character_set_server = utf8
skip-name-resolve
[mysql]
no-auto-rehash
prompt="\\u@\\h:\p \\R:\\m:\\s [\\d]>"
[mysqld_safe]
log-error=/data/logs/mysqld.log
EOF
##################################
管理节点上安装以下包
yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch \
perl-Parallel-ForkManager perl-Time-HiRes
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
VIP配置
ifconfig eth0:1 192.168.158.88/24
#测试ssh 配置
/usr/bin/masterha_check_ssh --conf=/etc/masterha/myha.cnf
#测试主从配置
masterha_check_repl --conf=/etc/masterha/myha.cnf
#master 切换测试
masterha_master_switch --master_state=alive --conf=/etc/masterha/myha.cnf --new_master_host=192.168.158.202 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=1000
#查看192.168.158.202主机IP情况
#查看192.168.158.203从库的slave status;
#开启管理节点进程
nohup masterha_manager --conf=/etc/masterha/myha.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha_manger.log 2>&1 &
#停止
masterha_stop --conf=/etc/masterha/myha.cnf
#查状态
masterha_check_status --conf=/etc/masterha/myha.cnf
##################################
VIP切换perl脚本
cat /usr/local/bin/master_ip_failover
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
use Getopt::Long;
my (
$command, $ssh_user, $orig_master_host, $orig_master_ip,
$orig_master_port, $new_master_host, $new_master_ip, $new_master_port
);
my $vip = '192.168.158.88/24'; # Virtual IP
my $key = "1";
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
$ssh_user = "root";
GetOptions(
'command=s' => \$command,
'ssh_user=s' => \$ssh_user,
'orig_master_host=s' => \$orig_master_host,
'orig_master_ip=s' => \$orig_master_ip,
'orig_master_port=i' => \$orig_master_port,
'new_master_host=s' => \$new_master_host,
'new_master_ip=s' => \$new_master_ip,
'new_master_port=i' => \$new_master_port,
);
exit &main();
sub main {
print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";
if ( $command eq "stop" || $command eq "stopssh" ) {
# $orig_master_host, $orig_master_ip, $orig_master_port are passed.
# If you manage master ip address at global catalog database,
# invalidate orig_master_ip here.
my $exit_code = 1;
eval {
print "Disabling the VIP on old master: $orig_master_host \n";
&stop_vip();
$exit_code = 0;
};
if ($@) {
warn "Got Error: $@\n";
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "start" ) {
# all arguments are passed.
# If you manage master ip address at global catalog database,
# activate new_master_ip here.
# You can also grant write access (create user, set read_only=0, etc) here.
my $exit_code = 10;
eval {
print "Enabling the VIP - $vip on the new master - $new_master_host \n";
&start_vip();
$exit_code = 0;
};
if ($@) {
warn $@;
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "status" ) {
print "Checking the Status of the script.. OK \n";
`ssh $ssh_user\@cluster1 \" $ssh_start_vip \"`;
exit 0;
}
else {
&usage();
exit 1;
}
}
# A simple system call that enable the VIP on the new master
sub start_vip() {
`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
# A simple system call that disable the VIP on the old_master
sub stop_vip() {
`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}
sub usage {
"Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}
##################################
MHA高可用+VIP 集群故障转移(已测试成功)的更多相关文章
- Keepalived之高可用LVS集群
前文我们聊了下keepalived的邮件通知相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13645163.html:今天我们来说说keepalive ...
- corosync+pacemaker实现高可用(HA)集群
corosync+pacemaker实现高可用(HA)集群(一) 重要概念 在准备部署HA集群前,需要对其涉及的大量的概念有一个初步的了解,这样在实际部署配置时,才不至于不知所云 资源.服务与 ...
- Redis高可用复制集群实现
redis简单介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库.Redis 与其他 key - value 缓存产品有以下三个特点: 支持数据的持久化,可以将 ...
- Keepalived+Nginx+Tomcat 实现高可用Web集群
https://www.jianshu.com/p/bc34f9101c5e Keepalived+Nginx+Tomcat 实现高可用Web集群 0.3912018.01.08 20:28:59字数 ...
- 搭建高可用mongodb集群(四)—— 分片(经典)
转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...
- [转]搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- [转]搭建高可用mongodb集群(二)—— 副本集
在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
- 搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
在上一篇文章<搭建高可用mongodb集群(二)—— 副本集> 介绍了副本集的配置,这篇文章深入研究一下副本集的内部机制.还是带着副本集的问题来看吧! 副本集故障转移,主节点是如何选举的? ...
随机推荐
- cocos2dc-x解决中文乱码
中文乱码: 方法一: 选中有中文的那个cpp,点文件另存为,在保存这里竟然有个小箭头 点之,再点编码保存 再选这个编码 这个cpp就UTF-8化了,然后中文就正常了. 但是发现:但字符串字符数为奇数时 ...
- PHP String函数分类
1.查找字符位置函数: strpos ($str,search,[int]): 查找search在$str中的第一次位置从int开始: stripos ($str,search,[int]): ...
- 内容在某div中滚动
1.设定外层div在屏幕中的高度. 2.设置div刷新style="-webkit-overflow-scrolling: touch; overflow: scroll“
- ArcGlobe点击IGlobeServerLayer图层读取信息
ArcGISServer将点图层发布成Globe服务,AE开发中自定义识别工具,读取点数据信息. 1) 通过Locate方法获取图层对象,图层对象中的SearchOID就是你点中的要素Objectid ...
- dzzoffice应用如何安装
在dzz应用市场中,进入到每个应用的详细介绍页面.里面有对于每个应用或者主题的安装说明. dzz应用市场:http://dev.dzzoffice.com/index.php?mod=dzzmarke ...
- TortoiseSVN 插件配置及使用方法
一.安装和配置 TortoiseSVN的下载地址 32bit:TortoiseSVN-1.8.2.24708-win32-svn-1.8.3.msi 64bit:TortoiseSVN-1.8.2.2 ...
- 重新开始吧(ADB+AndroidManifest.xml)
我现在默认已经搭建好了开发环境.如果没有,可以参见去Google一下,或者我上两篇文章中也有提到. 先补充一点: SDK不用FQ.也能更新 修改hosts文件 下载sdk版本: 在hosts文件中追加 ...
- python中使用多继承
python中使用多继承,会涉及到查找顺序(MRO).重复调用(钻石继承,也叫菱形继承问题)等 MRO MRO即method resolution order,用于判断子类调用的属性来自于哪个父类.在 ...
- Windows Azure 设置虚拟机静态外网IP地址
官方说法叫做“虚拟公共IP地址保留”,为容易理解,我们称之为静态外网IP地址. 如果在国内使用国际版Windows Azure服务时强烈推荐为虚拟机设置IP地址保留. 由于Windows Azure ...
- 应用删除后 Launchpad 上仍有应用图标无法删除的解决方法
应用删除后 Launchpad 上仍有应用图标上带有问号且无法删除时,可以将 launchpad 重置. 在终端输入: defaults write com.apple.dock ResetLaunc ...