php+redis实现多台服务器内网存储session并读取

大型网站由于大并发的问题会导致系统出现诡异的崩溃性问题这着实让人很是蛋疼,首先考虑的就是负载均衡服务器来处理这个,当然数据库的性能也是非常非常重要的,今天就说下在负载均衡情况下对于session这个问题如何处理,说实话不处理session其实也是可以的,但是在实际的情况中会出现一些让用户体验非常蛋疼的问题,比如购物下单的时候负载均衡调配服务器来回切换的过程中session丢失了,这个时候就尴尬了,用户就会郁闷我擦这什么鬼,于是乎各种担心就会出现,这破网站是不是有什么安全问题等等。下面就来说说这个问题的解决方案,配置php结合redis来存储session,假如我现在有2个(至少)服务器在做负载均衡:

1,主服务器安装php-redis 以及redis服务器端这个不多说去执行命令行yum或apt-get什么的,辅服务器只需要安装php-redis(这两个服务器必须在一个内网中不然外网访问着实不安全的)

2,来吧骚年打开的你服务器上的php.ini文件:

先看看php extension=redis.so是否开启

session.save_handler = redis
session.save_path = "tcp://【redis主服务器的内网ip】:6379″ 

主和辅服务器的php-redis需要绑定一下ip(ip一致主服务器的redis-server)

redis.conf
bind【redis主服务器的内网ip】

这个为了安全起见设置一个redis链接的密码:

打开 vim /etc/redis/redis.conf
requirepass 通信密码(修改这里)

 ok配置好重启redis :sudo service redis-server restart

3,测试Redis连接和验证:

redis-cli -h 【redis主服务器内网ip】

如果设置了redis链接密码,现在尝试访问数据,应该得到一个AUTH错误接下来执行下

> redis-cli
redis内网ip:6397> keys *

 ok了到这步的时候已经完成99%了还差一步就是各种重启额

service apache2 restart
service php5-fpm restart

 4,测试session是否写入redis:

<?php

 session_start();
$_SESSION[‘bieanju‘] = array(‘name‘ => ‘别安驹‘, ‘num‘ => ‘http://www.bieanju.com/‘);
//连接redis
$redis = $this->connectRedis();
//
//检查session_id
echo ‘session_id:‘ . session_id() . ‘<br/>‘;

//redis存入的session(redis用session_id作为key,以string的形式存储)
echo ‘redis_session:‘ . $redis->get(‘PHPREDIS_SESSION:‘ . session_id()) . ‘<br/>‘;

echo ‘php_session:‘ . json_encode($_SESSION[‘class‘]);
print_r($_SESSION[‘bieanju‘]);

?>

速来围观,没错session写入redis了可以读取了,ok至此对于负载均衡的session也就基本解决了,剩下的就是在项目如何应用那就看你自己的业务需要。

最后在说一下php是世界上最好的语言,呵呵……

时间: 2024-10-16 09:30:34

php+redis实现多台服务器内网存储session并读取的相关文章

DHCP服务器内网攻击测试

原文地址:http://www.freebuf.com/articles/network/74995.html 通常内网渗透都是基于ARP的攻击,但ARP攻击对内网的负担太重,很容易被发现.今天讲的是基于DHCP协议的攻击. 基于DHCP的攻击理解起来很简单,首先伪造Mac地址耗竭正常的DHCP服务器的IP地址,然后黑客用自己的主机伪造一个DHCP服务器,那么新连上内网的主机只能使用流氓DHCP服务器分配的IP,这样黑客的主机就变成了内网网关,可以借此控制内网中其他主机的网络流量. 攻击环境 操

windows通过linux下的openvpn登入远程服务器内网

需求:在某些网络要求比较严格的环境中,我们在异地无法远程访问公司内网,给我们的工作带来了极大的不便:但是通过openvpn我们可以轻松实现,下面就来介绍下. 1.网络环境: 公司openvpn服务器(linux):wan 75.126.207.84 lan 10.61.53.84 本地服务器(windows): wan 115.238.239.132 lan 10.10.1.132 2.所需安装软件: openvpn版本:openvpn-2.2.2.tar.gz (linux,可以到http:/

联想网御防火墙内网地址映射不能直接访问临时解决方法

今天到一单位,该单位有个问题想让我解决一下.该单位使用联想网御防火墙保护网络,网络拓扑如图1所示. 图1网络拓扑 单位核心交换机的网段是192.168.0.0-192.168.8.0/24,服务器使用192.168.9.0网段,服务器核心交换机之间采用联想网御防火墙.单位有台服务器内网地址是192.168.9.9,在防火墙上映射了一个公网地址61.n1.n2.n4.在没有映射之前,工作站可以直接使用192.168.9.9这个"内网"地址访问,但在地址映射之后,只能使用"公网&

内网服务器使用python程序遇到的问题

背景: 最近服务器上需要实现一个拼接图片的功能,于是使用了python的PIL库写了一个. 在向服务器上放置程序时发现,服务器系统为Centos6.5,且处于内网,使用的是自带的python2.6.6,没有太多的库支持,无法运行该py程序. 想要在内网服务器上使用这个工具有两种方案: 一.在该内网服务器上使用PIL库源码编译安装,然后直接运行py程序 二.在另外一台安装好库的服务器上把python代码打包成二进制文件,然后复制到内网服务器上使用 *第二个方法需要注意操作系统的版本和py版本要一致

openvpn连接后与服务端内网服务器连接

客户端连接vpn服务端后会获取一个10.8.0.x的地址,而openvpn服务器上面有一个10.8.0.1的地址,此时客户端就能连接服务端了.如果配置文件内没有配置"push "route xx.xx.oo.oo 255.255.255.0""这条,客户端不能通过服务器内网连接服务器,在配置文件中添加此条文件即可.xx.xx.oo.oo为服务器内网网段. 如果想要和同在一个网段的其他服务器通信,有三种方法.1.在需要访问的服务器上面添加一条到10.8.0.0的静态路

内网服务器无外网上网 &&端口映射

一内网上网 环境说明: 主机A: 1.宿主上网机器 eth0:10.0.0.8   #作为外网地址 eth1:172.16.1.8   #内网地址 外网网卡信息: [[email protected] ~]# cat  /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none IPADDR=10.0.0.8 NETMASK=255.

用静态NAT实现外网PC访问内网服务器

在我们的生产环境中常常处于安全考虑将服务器置于内网环境中,但同时得向外网提供各种服务功能,此时就需要用到NAT技术.下面是我用思科的仿真软件搭建的一个实验环境,实现外网PC访问内网服务器. 先说明一下实验环境: 路由器R0左边为内网环境,右边为外网环境,内网服务器IP地址为192.168.1.2,网关为R0接口地址192.168.1.1,外网PC机IP地址为211.211.211.2,网关为路由器R1接口地址211.211.211.1,现在要求实现外网PC访问内网服务器. 数据配置如下: 路由器

centos6.5 Open×××服务搭建部署,访问内网服务器

centos6.5 Open×××服务搭建部署,访问内网服务器 1 简介 ×××(Virtual Private Network)直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道. ? ? Open×××无疑是Linux下开源×××的先锋,提供了良好的性能和友好的用户GUI.该软件最早由James Yonan编写.Open×××允许参与建立×××的单点使用预设的私钥,第三方证书,或者用户名/密码来进行身份验证.它大量使用了OpenSSL加密库,以及SSLv3/TLSv1

Redis 分布式缓存,是如何实现多台服务器SESSION 实时共享的

现在提到多服务器的共享session,几乎都是回答用redis.对于redis实现几台服务器共享session,不是很理解.假如一个网站分别部署在A B C 3 台服务器上,他们的代码都是相同的.用户在访问的过程中是随机切换到其他服务器,使用redis来共享session,那么是这3台服务器是如何实现session 实时共享的? 首先要明确session和cookie的区别.浏览器端存的是cookie每次浏览器发请求到服务端是http 报文头是会自动加上你的cookie信息的.服务端拿着用户的c