<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切换整个过程的更多相关文章

  1. mysql主从切换

    mysql 主从切换 主停,从做主步骤如下: 1 确认从服务器已经完成所有同步操作:stop slave io_thread show processlist 直到看到状态都为:xxx has rea ...

  2. keepalived 结合mysql 自动切换

    启动keepalived:/usr/local/sbin/keepalived -D -d -S 0 master ip:192.168.32.6 master:/root/sbin# cat /et ...

  3. MySQL主库切换那些事

    最近连续经历了机架掉电和交换机挂掉,着实切了不少主库,虽然过程心惊胆跳,但是也算是上过战场,经过了实战演习,相信TEAM中的小伙伴们对于切主库已经可以驾轻就熟了. MySQL的主库切换也属于DBA的一 ...

  4. mysql主从切换步骤

    1>   正常切换 1)从server检查SHOW PROCESSLIST语句的输出,直到你看到Has read all relaylogwaiting for the slave I/O th ...

  5. EntityFramework For Mysql 动态切换数据源

    1.简介 在工作中遇到一个问题.项目有三个数据库(三个数据库表结构一样),用户可以选择使用哪个数据库.其实就是动态切换数据库连接. 2.EntityFramework For Mysql 先来简单的介 ...

  6. master_pos_wait函数与MySQL主从切换

    背景 主从切换是高可用MySQL架构的必要步骤(即使用不发生,也要有备无患).一般设置为双M(M1.M2),假设当前状态为写M1,而M2只读,切换的大致流程如下: 1.  停止应用写M1,将M1设置为 ...

  7. (转)mysql主从切换步骤

    原文:http://6226001001.blog.51cto.com/9243584/1723273 1> 正常切换 1)从服务器检查SHOW PROCESSLIST语句的输出,直到你看到Ha ...

  8. mysql 主从切换

    4)提升slave为master Stop slave: Reset master; Reset slave all; 在5.6.3版本之后 Reset slave; 在5.6.3版本之前 查看sla ...

  9. mysql主从切换摘要

    1.需要提升为主的从库,停止io线程等待slave数据全部更新完毕 stop slave IO_THREAD #show processlist的输出,直到看到状态是Slave has read al ...

随机推荐

  1. [转]gcc -I -L -l区别

    我们用gcc编译程序时,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数,下面做个记录: 例: gcc -o hello hello.c -I /home/hello/inc ...

  2. HDU 1312 Red and Black(bfs)

    Red and Black Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descr ...

  3. gdal vc++ 配置说明

      1在VC中,打开菜Tool-Option,在Directories页面中的Library files中和Include files中分别添加GDAL的LIB文件目录和INCLUDE文件目录2打开菜 ...

  4. Zigbee2007协议中文介绍

    Zigbee2007中文介绍ZigBee2007规范定义了ZigBee和ZigBee Pro两个特性集,全新的ZigBee 2007规范建立在ZigBee2006之上,不但提供了增强型的功能而且在某些 ...

  5. INNO SETUP 获得命令行参数

    原文 http://www.cnblogs.com/ahuo/archive/2009/07/30/1534998.html );           Result := CmdLine;       ...

  6. js 中的switch

    前言 switch 这种表达式在很多语言中都有,比如java, C等待, 使用switch比使用if else 来得方便,来得清晰. 使用语法很简单: switch(n) { case 1: 执行代码 ...

  7. cf466C Number of Ways

    C. Number of Ways time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  8. VRay 2.0 SP1 2.10.01 for 3ds max 9/2008/2009/2010/2011/2012 32/64位 顶渲简体中文版+英文版[中国室内设计论坛-室内人]

    VRay 2.0 SP1 2.10.01 for 3ds max 9/2008/2009/2010/2011/2012 32/64位 顶渲简体中文版+英文版[中国室内设计论坛-室内人] 对最新版本的V ...

  9. 关于AndroidManifest.xml

    一.关于AndroidManifest.xml http://themeforest.net/item/metro-vibes-showcase-html-theme/full_screen_prev ...

  10. HTML5新特性学习-2

    本文在于巩固基础 HTML5绘图基础 <canvas>画布元素的使用 <div> <canvas id="can" width="200px ...