zoukankan      html  css  js  c++  java
  • 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 "----------------
    ";
        print  $created_path;
        print "----------------
    ";
        ###获取数据
        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'}."
    ";
            print "事件状态.";
            print $event->{'state'}."
    ";
            $cv->send($event) }
             );
            print "------------------
    ";
            print $zk_value;
            print "
    ";
            ###检测3306端口
        sub check_port {
                            ( $server, $port ) = ('127.0.0.1','3306');
                                  $sock = IO::Socket::INET->new(PeerAddr => $server,
                                  PeerPort => $port,
                                  Proto => 'tcp');
                                  print "$sock
    ";
                                 if ($sock)
                                    {return 1}
                                 else
                                    {$zk->close; print "close zk
    "; 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 "----------------
    ";
        print  $created_path;
        print "----------------
    ";
        ###获取数据
        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'}."
    ";
            print "事件状态.";
            print $event->{'state'}."
    ";
            $cv->send($event) });
            print "------------------
    ";
            print $zk_value;
            print "
    ";
            ###检测3306端口
        sub check_port {
                            ( $server, $port ) = ('127.0.0.1','3306');
                                  $sock = IO::Socket::INET->new(PeerAddr => $server,
                                  PeerPort => $port,
                                  Proto => 'tcp');
                                  print "$sock
    ";
                                 if ($sock)
                                    {return 1}
                                 else
                                    {$zk->close; print "close zk
    "; 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."
    ";
                 }
             else{
                $mysql_ip =   $zk->get('/mysql/0002');
                print $mysql_ip."
    ";
                 };
      
         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
    " );
             };
            print "@arr2 is @arr2
    ";
            $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 Error--存储inode用完后报设备没有空间
    MySQL Binlog--基于ROW模式的binlog event大小限制
    MySQL Transaction--网络丢包导致长时间未提交事务
    java核心技术第四篇之JDBC第二篇
    java核心技术第三篇之JDBC第一篇
    java核心技术第二篇之数据库SQL语法
    JVM垃圾回收器原理及使用介绍
    JVM中优化指南
    MySQL常用工具、日志及读写分离
    java基础第十九篇之Xml
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6199367.html
Copyright © 2011-2022 走看看