需求:
在服务迁移中经常会遇到这么一个问题
像mysql配置,memcached配置,redis配置,迁移服务后各种配置信息会改变,在机器数量较多的情况下,一个一个去修改明显是不方便的,如果业务对配置信息较为敏感,则有可能因为配置修改不及时导致服务down掉。
说明来源:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/
Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等, Zookeeper 的典型的应用场景(配置文件的管理、集群管理、同步锁、Leader 选举、队列管理等)
安装
ubuntu
wget http://download.nextag.com/apache/zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz
mv zookeeper-3.3.6 zookeeper
cd zookeeper
调整配置文件
mv conf/zoo_samle.cfg conf/zoo.cfg
启动zk
sudo ./bin/zkServer.sh start
查看是否安装成功,quit退出
./bin/zkCli.sh -server 127.0.0.1:2181
示例
下面示例中用到的Zookeeper_Example来自
https://github.com/andreiz/php-zookeeper/examples
1、zkMgr.php
添加一个节点到zookeeper,并把mysql配置信息添加到节点上
<?php
require_once ‘Zookeeper_Example.php’;
$zk = new Zookeeper_Example(‘127.0.0.1:2181’);
$bbs_mysql_config = array(
‘dbhost’ => ‘127.0.0.1’,
‘dbuser’ => ‘root’,
‘dbpwd’ => ‘root’,
‘dbname’ => ’test'
);
$zk->set(‘/BBS_MYSQL_CONFIG', json_encode($bbs_mysql_config));
2、业务端
例如在业务信息配置脚本中,去请求zookeeper获取配置信息。
<?php
try{
require_once ‘Zookeeper_Example.php’;
$zk = new Zookeeper_Example(‘127.0.0.1:2181’);
$bbs_mysql_config = json_decode($zk->get(‘/BBS_MYSQL_CONFIG’));
$db[‘host’] = $bbs_mysql_config[‘dbhost’];
$db[‘dbuser’] = $bbs_mysql_config[‘ dbuser’];
$db[‘dbpwd’] = $bbs_mysql_config[‘dbpwd’];
$db[‘dbname’] = $bbs_mysql_config[‘dbname’];
}catch(Exception e){
echo ‘Zookeeper Server ERROR’;
exit(1);
}
后记:
其实关于配置集中管理,我个人认为如果业务不复杂并且机器数量不多,不建议使用,因为这会使业务逻辑变得更加复杂,配置管理只是zookeeper的冰山一角,他还有更多的功能等我们深挖,如有错误,还等各位批评指证,谢谢。