nginx session共享
By skyshappiness Posted 2017-03-21 14:18:19 In

一、背景:

    因为业务量的增加(QPS、PV等指标的上升),需要多台服务器处理现有业务逻辑,因此搭建了 nginx 的负载均衡,之后导致多台服务器之间,session无法共享


二、解决方案:

    1、ip-hash:

        对访问来源,按照来源 IP 进行分发,缺点:nginx必须为最前端的服务器,并且容易产生热点,无法平均分配

    2、存在数据库中:

        增加 数据库 I/O 开销,也表容易增加数据库的复杂度,特别是做了读写分离、集群等布置的时候,这时候需要考虑 数据库 同步的问题,是最终一致性还是原子一致性;况且,读写分离实际试验下来,主从复制还是会有毫秒级别的误差,并不是真的实时同步数据。

    3、memcache:

        搭建 memcache 之后存在 memcache 中,之后取用,只存在于一个地方(类似于新开一个应用,然后这个应用数据还一直存放在内存中)。


        配置方式:

            两台apache的主机IP分别是 192.168.74.235192.168.74.236
            Nginx主机IP是192.168.74.131
            Memcached主机的IP是192.168.74.131
            在192.168.74.131 安装memcached,并且启动
            以一台为例192.168.74.236,安装php及php对memcached的依赖库yuminstall memcached-devel.i686 libmemcached-devel.i686  php-pecl-memcache.i686

            配置php.ini
            session.save_handler= memcache
            session.save_path= "tcp://192.168.74.131:11211"
            或者(以下两个没有尝试)
            1.某个目录下的 .htaccess :
                php_value session.save_handler "memcache"
                php_value session.save_path  "tcp://IP:11211"
            2.在某个一个应用中:
                ini_set("session.save_handler", "memcache");
                ini_set("session.save_path", "tcp://IP:11211");  

                同时一定要把下面的;session.save_path= "/var/lib/php/session" 注释掉
                同时把extension=memcache.so 打开
                重启一下 apache,查看 phpinfo 中的 "Registered save handlers" 会有 "files usermemcache" 这3个可用,如果有就证明装好了

友情链接
联系方式
  • 邮箱 / E-mail:skyshappiness@gmail.com