php集群数据库 php mysql集群

PHP集群如何部署?当网站的访问,数据过多时.程序应该如何调整?个人建议 至少4台服务器,并且最好是以局域网方式互通(服务器4可以完全独立)
服务器1和服务器2都只放php代码程序 , 暴露在外网,分别当电信服务器和网通服务器
服务器3只放数据库,通过用户权限,仅允许被服务器1和2访问——不暴露在外网
服务器4只放附件 , 暴露在外网,所有的附件请求,都直接对这个服务器进行
需要指出的是 , 你如果作为网站管理者,每次管理数据库 , 都要用1或者2当跳板,才可以访问 。
php如何实现两台服务器数据库同步问题 - 技术问答基于数据库 Log 日志分析可以实现,网上搜一下 CDC 数据同步 。。
不过你也可以尝试下 cloud.tapdata.net  ,  一个在线的数据同步工具 , 支持一次性全量同步,也支持实时的增量同步 。
如何实现php+session+memcached高可用集群在这个互联网高度发达的时代 , 许多应用的用户动辄成百上千万,甚至上亿 。为了支持海量用户的访问,应用服务器集群这种水平扩展的方式是最常用的 。这种情形下 , 就会涉及到许多单机环境下完全不需要考虑的问题,这其中session的创建、共享和存储是最常见之一 。
在单机环境中,Session的创建和存储都是由同一个应用服务器实例来完成,而存储也仅是内存中,最多会在正常的停止服务器的时候,把当前活动的Session钝化到本地,再次启动时重新加载 。
而多个实例之间,Session数据是完全隔离的 。而为了实现Session的高可用,多实例间数据共享是必然的,下面我们以Redis 的SessionManager实现多Tomcat实例Session共享的配置为例,我们来梳理下一般session共享的流程:
添加具体要使用的manager的Jar文件及其依赖
【php集群数据库 php mysql集群】redis session manager依赖jedis, commons-pool, commons-pool2
对应版本的redis session manager的jar文件
在TOMCAT_HOME/conf/context.xml中增加如下配置
Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /
Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="localhost"
port="6379" database="0"
maxInactiveInterval="30" /
其中host和port等替换为对应的配置信息
启动多个Tomcat实例,以自带的examples应用为例进行验证
访问examples应用的servlets/servlet/SessionExample,
在页面中添加数据到session中,并查看页面上对应的session信息
访问另一个实例上相同应用的页面,查看session信息,两者应该是一致的
使用redis-cli查看redis中存储的对应数据,相应的sessionId对应的数据已经保存了下来
以上是一个基本的配置过程,而在这些配置与验证的步骤中,第二步是核心逻辑实现 。前面的文章,曾介绍过Tomcat的Valve,在请求处理时,Pipeline中的各个Valve的invoke方法会依次执行 。Tomcat的AccessLogValve介绍
此处的session处理,就是以一个自定义Valve的形式进行的 。关于Session的文章,前面也写过几篇,会附在结尾处 。
以下是RedisSessionhandlerValve的invoke方法,我们看,主要是在Valve执行后进行Session的存储或移除 。
public void invoke(Request request, Response response) {
try {
getNext().invoke(request, response);
} finally {
final Session session = request.getSessionInternal(false);
storeOrRemoveSession(session);
manager.afterRequest();
}
}
而session的保存和移除又是通过manager执行的 。manager.save(session); manager.remove(session);
这里,manager就是前面定义的RedisSessionManager 。默认单实例情况下,我们使用的都是StandardManager,对比一下两者,标准的Manager对于session的创建和删除,都会调到其父类ManagerBase中相应的方法 , 

推荐阅读