设为首页 收藏本站
查看: 1932|回复: 0

[经验分享] php 连接zookeeper实例

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-21 14:43:15 | 显示全部楼层 |阅读模式
  1、安装成功zookeeper后,在zookeeper 的bin目录下有启动相应的启动脚本

  启动Server
  ./zkServer.sh start

  启动client:(*注:cli需要安装java)
  zkCli.sh
  2、PHP实例:
  
<?phpclass ZookeeperDemo extends Zookeeper{   public function watcher($i, $type, $key ) {    echo &quot;InsiderWatcher\n&quot; ;     // Watcher gets consumedso we need to set a new one    $this->get( '/test', array ($this, 'watcher' ));  }}$zoo = new ZookeeperDemo( '127.0.0.1:2181' );$zoo->get( '/test', array ($zoo, 'watcher' ));while ( true ){  echo '.' ;  sleep(2);}

leader与worker任务的分配:
class Worker extends Zookeeper{   const CONTAINER= '/cluster' ;   protected $acl = array(                    array (                      'perms' =>Zookeeper:: PERM_ALL,                      'scheme' => 'world' ,                      'id' => 'anyone' ));   private $isLeader = false;   private $znode ;   public function __construct($host = '', $watcher_cb = null ,$recv_timeout = 10000 ) {    parent:: __construct($host, $watcher_cb, $recv_timeout );  }   public function register(){    if(! $this->exists( self ::CONTAINER )) {      $this->create( self ::CONTAINER , null,$this-> acl );    }     $this->znode = $this->create( self ::CONTAINER. '/w-' ,                                  null ,                                  $this->acl,                                  Zookeeper::EPHEMERAL| Zookeeper::SEQUENCE );     $this-> znode =str_replace( self ::CONTAINER .'/' , '' ,$this-> znode );     printf( &quot;I'm registredas: %s\n&quot;, $this-> znode );     $watching = $this->watchPrevious();     if($watching == $this-> znode ){      printf( &quot;Nobodyhere, I'm the leader\n&quot; );      $this->setLeader( true );    }    else {      printf( &quot;I'm watching%s\n&quot; , $watching );    }  }   public function watchPrevious(){    $workers = $this->getChildren( self ::CONTAINER );    sort( $workers );    $size = sizeof( $workers );    for($i = 0 ; $i < $size ; $i&#43;&#43; ) {      if($this-> znode == $workers[$i ] ) {        if ($i > 0 ) {          $this->get( self ::CONTAINER . '/' .$workers[ $i - 1 ], array ($this, 'watchNode' ));          return $workers[$i - 1 ];        }         return $workers[$i ];      }    }     throw new Exception( sprintf( &quot;Something went very wrong! I can't find myself: %s/%s&quot;,                          self ::CONTAINER ,                          $this-> znode ));  }   public function watchNode($i, $type, $name ) {    $watching = $this->watchPrevious();    if($watching == $this-> znode ){      printf( &quot;I'm thenew leader!\n&quot; );      $this->setLeader( true );    }    else {      printf( &quot;Now I'mwatching %s\n&quot; , $watching );    }  }   public function isLeader(){    return $this-> isLeader ;  }   public function setLeader($flag){    $this-> isLeader =$flag;  }   public function run(){    $this->register();     while( true ){      if($this->isLeader() ) {        $this->doLeaderJob();    }    else {      $this->doWorkerJob();    }       sleep( 2 );    }  }   public function doLeaderJob(){    echo &quot;Leading\n&quot; ;  }   public function doWorkerJob(){    echo &quot;Working\n&quot; ;  }}$worker = new Worker( '127.0.0.1:2181' );$worker->run();可以启动3个php进程,查看脚本的运行。
进程1:
[iyunv@localhost zookeeper]# php -f worker.php
I'm registred as: w-0000000010
Nobody here, I'm the leader
Leading
进程2:
[daniel.luo@localhost zookeeper]$ php -f worker.php
I'm registred as: w-0000000011
I'm watching w-0000000010
Working
进程3:
[daniel.luo@localhost zookeeper]$ php -f worker.php
I'm registred as: w-0000000012
I'm watching w-0000000011
Working

ctrl &#43; c 关闭leader进程后,会发现进程2与3会选举出新的leader





  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-141886-1-1.html 上篇帖子: solrCloud+tomcat+zookeeper配置 下篇帖子: zookeeper windows 下配置和基础命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表