mysql zk切换整个过程
<pre name="code" class="html">mysql master:
test:/root/zk# cat zk.pl
use ZooKeeper;
use AnyEvent;
use AE;
use Data::Dumper;
use IO::Socket;
my $zk = ZooKeeper->new(hosts => '120.55.118.6:2181, 120.55.118.6:2182, 120.55.118.6:2183');
my $stat = $zk->exists('/mysql');
unless ($stat){
$zk->create('/mysql');
}
my $created_path = $zk->create('/mysql/0001' ,
ephemeral => 1
);
print "----------------\n";
print $created_path;
print "----------------\n";
###获取数据
print Dumper($zk->get("/mysql/0001")); ###修改数据
$zk->set('/mysql/0001' =>'192.168.32.6');
print Dumper($zk->get("/mysql/0001"));
my $cv = AE::cv;
##所有子节点数组
my $zk_value = $zk->get('/mysql/0001', watcher => sub {
###事件状态
my $event = shift;
print "触发了事件.";
print $event->{'type'}."\n";
print "事件状态.";
print $event->{'state'}."\n";
$cv->send($event) }
);
print "------------------\n";
print $zk_value;
print "\n";
###检测3306端口
sub check_port {
( $server, $port ) = ('127.0.0.1','3306');
$sock = IO::Socket::INET->new(PeerAddr => $server,
PeerPort => $port,
Proto => 'tcp');
print "$sock\n";
if ($sock)
{return 1}
else
{$zk->close; print "close zk\n"; exit 0 };
};
##定义watch
my $t = AnyEvent->timer(
after => 0,
interval => 5,
cb => \&check_port
);
##不要再每秒打印时间
##undef $t;
print Dumper($cv);
my $child_event = $cv->recv;
test:/root/zk# mysql slave: slave:/root/zk# cat zk.pl
use ZooKeeper;
use AnyEvent;
use AE;
use Data::Dumper;
use IO::Socket;
my $zk = ZooKeeper->new(hosts => '120.55.118.6:2181,120.55.118.6:2182,120.55.118.6:2183');
my $stat = $zk->exists('/mysql');
unless ($stat){
$zk->create('/mysql');
}
my $created_path = $zk->create('/mysql/0002',
ephemeral => 1
);
print "----------------\n";
print $created_path;
print "----------------\n";
###获取数据
print Dumper($zk->get("/mysql/0002")); ###修改数据
$zk->set('/mysql/0002' =>'192.168.32.116');
print Dumper($zk->get("/mysql/0002"));
my $cv = AE::cv;
##所有子节点数组
my $zk_value = $zk->get('/mysql/0002', watcher => sub {
###事件状态
my $event = shift;
print "触发了事件.";
print $event->{'type'}."\n";
print "事件状态.";
print $event->{'state'}."\n";
$cv->send($event) });
print "------------------\n";
print $zk_value;
print "\n";
###检测3306端口
sub check_port {
( $server, $port ) = ('127.0.0.1','3306');
$sock = IO::Socket::INET->new(PeerAddr => $server,
PeerPort => $port,
Proto => 'tcp');
print "$sock\n";
if ($sock)
{return 1}
else
{$zk->close; print "close zk\n"; exit 0 };
};
##定义watch
my $t = AnyEvent->timer(
after => 0,
interval => 5,
cb => \&check_port
);
##不要再每秒打印时间
##undef $t; my $child_event = $cv->recv; 测试脚本:
zjtest7-redis:/root/zk# cat test_zk.pl
use ZooKeeper;
use AnyEvent;
use AE;
use Data::Dumper;
use IO::Socket;
sub check_port {
( $server, $port ) = ('127.0.0.1','3306');
$sock = IO::Socket::INET->new(PeerAddr => $server,
PeerPort => $port,
Proto => 'tcp');
if ($sock)
{return 1}
else
{return 0 };
}; my @ip_list=();
my $zk = ZooKeeper->new(hosts => '120.55.118.6:2181,120.55.118.6:2182,120.55.118.6:2183') ;
print Dumper($zk);
eval { my $stat = $zk->exists('/mysql/0001');
if ($stat){
$mysql_ip = $zk->get('/mysql/0001');
print $mysql_ip."\n";
}
else{
$mysql_ip = $zk->get('/mysql/0002');
print $mysql_ip."\n";
}; use DBI;
my $database='zjzc';
my $user="zjzc_app";
my $passwd="1234567";
my @arr2=();
my $dbh = DBI->connect("dbi:mysql:database=$database;host=$mysql_ip;port=3306",$user,$passwd,{
RaiseError => 1,
AutoCommit => 0
} ) or die "can't connect to database ". DBI-errstr;
my $hostSql = qq{select id,name from scan; };
my ($a1, $a2, $a3,$a4,$a5,$a6,$a7,$a8,$a9);
my $selStmt = $dbh->prepare($hostSql);
$selStmt->execute();
$selStmt->bind_columns(undef, \$a1, \$a2);
$selStmt->execute();
while( $selStmt->fetch() )
{ push (@arr2, "$a1 $a2 $a3\n" );
};
print "\@arr2 is @arr2\n";
$dbh->disconnect;
}; 第一步测试mysql 高可用; zjtest7-redis:/root/zk# perl test_zk.pl
$VAR1 = bless( {
'default_acl' => [
{
'id' => 'anyone',
'perms' => 31,
'scheme' => 'world'
}
],
'hosts' => '120.55.118.6:2181,120.55.118.6:2182,120.55.118.6:2183',
'timeout' => 10000,
'dispatcher' => bless( {
'ae_watcher' => bless( do{\(my $o = '¸¢Yʂ¿X秂9')}, 'EV::IO' ),
'watchers' => {},
'ignore_session_events' => 1,
'dispatch_cb' => sub { "DUMMY" },
'channel' => bless( {}, 'ZooKeeper::Channel' )
}, 'ZooKeeper::Dispatcher::AnyEvent' ),
'buffer_length' => 2048
}, 'ZooKeeper' );
192.168.32.6
@arr2 is 1 aaabbb
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe
2 cccddeqe 此时连接的是192.168.32.6节点: 观察zk 节点信息: [zk: 127.0.0.1(CONNECTED) 85] ls /mysql
[0002, 0001] 关闭32.6的mysql 此时32.6上的zk :
IO::Socket::INET=GLOB(0x220a300)
IO::Socket::INET=GLOB(0x22ed950)
IO::Socket::INET=GLOB(0x203ea60)
IO::Socket::INET=GLOB(0x2131bd0)
IO::Socket::INET=GLOB(0x215fc88) close zk
You have mail in /var/spool/mail/root 观察zk信息:
[zk: 127.0.0.1(CONNECTED) 90] ls /mysql
[0002] zjtest7-redis:/root/zk# perl test_zk.pl
$VAR1 = bless( {
'default_acl' => [
{
'id' => 'anyone',
'scheme' => 'world',
'perms' => 31
}
],
'buffer_length' => 2048,
'hosts' => '120.55.118.6:2181,120.55.118.6:2182,120.55.118.6:2183',
'timeout' => 10000,
'dispatcher' => bless( {
'channel' => bless( {}, 'ZooKeeper::Channel' ),
'watchers' => {},
'ae_watcher' => bless( do{\(my $o = 'Һ¹|%{')}, 'EV::IO' ),
'dispatch_cb' => sub { "DUMMY" },
'ignore_session_events' => 1
}, 'ZooKeeper::Dispatcher::AnyEvent' )
}, 'ZooKeeper' );
192.168.32.116
@arr2 is 99 dadsgdf243 已切换;
mysql zk切换整个过程的更多相关文章
- mysql主从切换
mysql 主从切换 主停,从做主步骤如下: 1 确认从服务器已经完成所有同步操作:stop slave io_thread show processlist 直到看到状态都为:xxx has rea ...
- keepalived 结合mysql 自动切换
启动keepalived:/usr/local/sbin/keepalived -D -d -S 0 master ip:192.168.32.6 master:/root/sbin# cat /et ...
- MySQL主库切换那些事
最近连续经历了机架掉电和交换机挂掉,着实切了不少主库,虽然过程心惊胆跳,但是也算是上过战场,经过了实战演习,相信TEAM中的小伙伴们对于切主库已经可以驾轻就熟了. MySQL的主库切换也属于DBA的一 ...
- mysql主从切换步骤
1> 正常切换 1)从server检查SHOW PROCESSLIST语句的输出,直到你看到Has read all relaylogwaiting for the slave I/O th ...
- EntityFramework For Mysql 动态切换数据源
1.简介 在工作中遇到一个问题.项目有三个数据库(三个数据库表结构一样),用户可以选择使用哪个数据库.其实就是动态切换数据库连接. 2.EntityFramework For Mysql 先来简单的介 ...
- master_pos_wait函数与MySQL主从切换
背景 主从切换是高可用MySQL架构的必要步骤(即使用不发生,也要有备无患).一般设置为双M(M1.M2),假设当前状态为写M1,而M2只读,切换的大致流程如下: 1. 停止应用写M1,将M1设置为 ...
- (转)mysql主从切换步骤
原文:http://6226001001.blog.51cto.com/9243584/1723273 1> 正常切换 1)从服务器检查SHOW PROCESSLIST语句的输出,直到你看到Ha ...
- mysql 主从切换
4)提升slave为master Stop slave: Reset master; Reset slave all; 在5.6.3版本之后 Reset slave; 在5.6.3版本之前 查看sla ...
- mysql主从切换摘要
1.需要提升为主的从库,停止io线程等待slave数据全部更新完毕 stop slave IO_THREAD #show processlist的输出,直到看到状态是Slave has read al ...
随机推荐
- .Net MVC4 加.html后缀报404问题
一.配置方法: routes.MapRoute( name: "User_Default1", url: "user/{action}.html", defau ...
- Oracle EBS-SQL (PO-17):检查供货比例不为100%.sql
select * from apps.MRP_SOURCING_RULES msrwhere organization_id=X. a ...
- win7 安装 redis +php扩展
1:首先下载redis:redis-2.0.2.zip (32 bit),解压. 从下面地址下:http://code.google.com/p/servicestack/wiki/RedisWind ...
- jquery $ dollar符号用法总结
参考:https://github.com/chyingp/blog/blob/master/jquery/jQuery%E6%BA%90%E7%A0%81-%E7%BE%8E%E5%85%83$%E ...
- Debian安装JAVA环境(转载)
Debian官方没有维护专门的Java软件包,所以不能直接用apt-get工具来安装.在Debian系统中要安装Java,有两种方式,一种是用传统方式:一种是Debian方式. 1. 传统方式 在 s ...
- flex-linkbutton
LinkButton 控件是没有边框的 Button 控件,当用户将鼠标移动到该控件位置时,其内容将加亮显示.这些特征通常借助包含在浏览器页面中的 HTML 链接进行展示.为使 LinkButton ...
- Oracle 表的常见操作
--创建表并指定表空间 create table goods( id VARCHAR2(20) primary key, name VARCHAR2(20) NOT NULL, price NUMBE ...
- sso单点登录解决方案收集
本文来自:http://blog.csdn.net/huwei2003/article/details/6038017 我的想法是使用集中验证方式,多个站点集中Passport验证. 主站:Passp ...
- UVA 489-- Hangman Judge(暴力串处理)
Hangman Judge In ``Hangman Judge,'' you are to write a program that judges a series of Hangman gam ...
- 关于Windows的139和445端口
上次的月赛中,遇到了一个经典的MS08-067的漏洞,这是一个经典的教科书的漏洞.但是仅限于使用metasploit来攻击这个漏洞.现在我想简单写一些关于139和445端口的东西. 首先提到的是Net ...