最近由于业务的发展,系统web压力越来越大,为了应付接下来的业务需要,需要增加机器来应付。但是,增加机器后,php这块的Session共享成为一个问题。本来采用nginx的ip_hash机制来解决session的问题,但是,运行一段时间后,客户老是由于session状态丢失,导致功能使用出问题(登录、注册等),所以,就把这种方式pass掉了。幸好php支持一种利用memcache方式来实现多机共享session。具体配置如下:
由于我们系统前端是采用nginx来处理静态内容,同时把动态请求转发给后端的apache来处理。所以,前端的负载均衡通过nginx的模块upstream来处理,利用weight参数来调节机器之间负载的权重。
在freeBSD下,利用ports方式安装软件比较方便
1、安装libmemcache(这是访问memcache服务器的客户端库)
cd /usr/ports/database/libmemcache (记住是libmemcache 不是libmemcached)
make install clean
2、安装php的memcache扩展
cd /usr/ports/databases/pecl-memcache
make install clean
3、第二步安装完后,会在php扩展模块目录下生成一个memcache.so文件,需要找到php的extension.ini文件,在该文件中添加extension=memcache.so
4、打开php.ini文件,找到session.save_handler,设置该配置选项的值为memcache,即为session.save_handler = memcache,然后,设置session.save_path="tcp://192.168.1.188:12000" (这个地址和端口号memcache服务器的地址和端口号),后面其实还可以设置一些参数。
5、重启apache。
验证是否设置正确
如果上述有"test"输入出,就说明配置成功。
至于怎么搭建memcached的服务器,可以到google搜索一下,好多这方面的介绍。这里就不再说了。