Memcached,session共享

memcached是高性能的分布式缓存服务器,用来集中缓存数据库查询结果,减少数据库访问次数,以提高动态Web

应用的响应速度。访


通过Nginx调度器负载后端两台Web服务器,实现以下目标:
部署Nginx为前台调度服务器
调度算法设置为轮询
后端为两台LNMP服务器
部署测试页面,查看PHP本地的Session信息
 

  • 部署LNMP环境

关闭SELinux、防火墙

]# setenforce 0

]# firewall-cmd --set-default-zone=trusted

for i in 100 200 \
>do \
>ssh 192.168.2.$i  \   
> yum -y install mariadb mariadb-server mariadb-devel php php-mysql
gcc pcre-devel openssl-devel  \
>cd /root/lnmp_soft/   \
>tar -xf nginx-1.12.2.tar.gz   \
>cd  nginx-1.12.2              \
>./configure --with-http_ssl_module \
>make && make install  \
>/usr/local/nginx/sbin/nginx  \
>cd ..    \
>yum -y install /root/lnmp_soft/php-fpm-5.4.16-42.el7.x86_64.rpm   \
>systemctl restart mariadb php-fpm   \
>done

--------
主机名为web1,web2
修改配置文件动静分离vim /usr/local/nginx/conf/nginx.conf

location / {
root html;
index  index.php  index.html  index.htl;#默认.php
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastxgi_index  index.php;
include fastcgi.conf;
}


  
scp /usr/local/nginx/conf/nginx.conf  [email protected]:/usr/local/nginx/conf/
ss -nutlp | grep mysql/php-fpm/nginx确认服务全起了


web1编写php测试脚本:

vim /usr/local/nginx/html/test.php
<?php
$i=33;
echo $i;
?>
web2机上同上脚本,33值改44
firefox 192.168.2.100/test.php proxy上测试2个LNMP能够使用

  • 部署前端nginx调度服务器(proxy代理)

前面已做请忽略
 yum -y install gcc pcre-devel openssl-devel
tar-xf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure 
make && make install

修改配置文件vim /usr/local/nginx/conf/nginx.conf 

...
upstream webs {
server 192.168.2.100;    #如果做ssh代理就加22端口,这里默认80端口
server 192.168.2.200;
}
server {
  listen 80;
server_name locahost;
location / {
proxy_pass http://webs;
root html;
index  index.php index.html index.htm;
}
}

nginx -s reload


client客户端测试:curl http://192.168.4.5/test.php   #反复测试,配置文件改了默认index.php为首页,写test.php也行

[root@web1 ~]# cd lnmp_soft/php_scripts/
[root@web1 php_scripts]# tar -xf php-memcached-demo.tar.gz
[root@web1 php_scripts]# cd php-memcached-demo
[root@web1 php-memcached-demo]# cp -a  *  /usr/local/nginx/html/
cp -a(保留链接、文件属性,并复制目录下的所有内容)
注意:可用修改 index.php 和 home.php 两个文件的内容,添加页面颜色属性,以区
别后端两台不同的服务器 :<body bgcolor=blue>
firefox 192.168.2.100  #填写信息,默认首页没改则后面加/index.php 
[root@web1 ~]# cd /var/lib/php/session/            //查看服务器本地的Session信息
[root@web1 ~]# ls
sess_ahilcq9bguot0vqsjtd84k7244                        //注意这里的ID是随机的
[root@web1 ~]# cat sess_ahilcq9bguot0vqsjtd84k7244


Session(服务器上)+cookie(客户端上)
      请求、回应
用户---------------------服务器(网站)


1.输入用户、密码 --> 检查正确性
2.<---服务器返回home  (同时)在服务器新建uuid文件(文件名uuid)[用户名,登陆状态]内容为Session
在返回home页面同时。通过包头信息cookie:uuid
keep-alive保持连接,一次连接多次通话
客户端浏览器保存cookie
3.客户端F5刷新页面
浏览器自动把cookie发送给服务器
4.服务器根据cookie的值找uuid(不需重复登陆)
其他用户浏览器访问服务器(没有cookie。需要登陆)
其他用户第二次访问 (有自己的cookie,不需要重复登陆)
uuid文件名长方便不冲突,在/var/lib/php/session/
以上为单机不适合集群(独享)

user           -----proxy     -----web1
                                       ----web2

会导致重复输入用户密码
谷歌浏览器或firefox 192.168.4.5/index.php登陆进去F5反复刷新
解决方法集群下加ip_hash


user -----proxy+memcached(共享)-----web1
                                                           -----web2

memcached数据库软件(性能差)
没有数据库,没有表
基于内存,key=value(kv数据库)
致命问题:重启服务内存会丢失
一个月一次重启客户无感知,误以自己电脑出错
再装一个连数据库memcached的telnet来测试(他们不是原装原配的,一般和php脚本使用)
php脚本里加多点if (if先读memcache数据,else在查mysql)/usr/lib/systemd/system/所有服务的目录
-----------------------------

]# yum -y install   memcached   telnet


配置文件 /usr/lib/systemd/system/memcached.service(查看即可)

[Unit]
Description=Memcached
Before=httpd.service
After=network.target

[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/memcached
ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE数据库大小 -c $MAXCONN最大连接并发  $OPTIONS

[Unit]
Description=Memcached
Before=httpd.service
After=network.target

[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/memcached


--------------------


[root@proxy system]# cat /etc/sysconfig/memcached 
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
 

启动服务并查看网络连接状态验证是否开启成功

]# systemctl start memcached


[root@proxy system]# telnet 192.168.2.5 11211
set name(变量名) 0 (不压缩)  180(存多久/s) 3 (存几个字符要与值一致)
abc
get name 回车,显示值abc

add myname 0 180 10 //新建,myname 不存在则添加,存在则报错
set myname 0 180 10 //添加或替换变量
replace myname 0 180 10 //替换,如果 myname 不存在则报错
get myname //读取变量
append myname 0 180 10 //向变量中追加数据
delete myname //删除变量
flush_all //清空所有,相当于删根
quit //退出登录


--------------------------------------------------------------------------------------
web1,web2机上都操作
LNMP+memcached
为 PHP 安装 memcache 扩展  yum list memcache---> php-pecl-memcache.x86_64 (扩展模块)   
创建 PHP 页面,并编写 PHP 代码,实现对 memcached 的数据操作

   cd    ~/lnmp_soft/
   ls
   cd php_scripts/
   ls
   cp mem.php    /usr/local/nginx/html/
   cd /usr/local/nginx/html/
   ls
   vim mem.php 

<?php
$memcache=new Memcache;  #创建 memcache 对象
$memcache->connect('192.168.2.5',11211) or die ('could not connect!! ');  #192.168.2.5是memcached数据库,原是localhost
$memcache->set('key', 'test');   #定义变量
$get_values=$memcache->get('key');  #获取变量值
echo $get_values;
?>
------------------
firefox 192.168.2.100/mem.php  会访问失败
yum -y install php-pecl-memcache
systemctl start php-fpm
firefox 192.168.2.100/mem.php   结果成功
session会话信息默认保存在/var/lib/php/session本地
vim /etc/php-fpm.d/www.conf
...
最后两行
php_value[session.save_handler] = memcache  
#定义Session信息存储在公共的memcached服务器上,主机参数中为memcache(没有d)
php_value[session.save_path] = "tcp://192.168.2.5:11211"
#//通过path参数定义公共的memcached服务器在哪(服务器的IP和端口)

systemctl restart php-fpm
清除浏览器cookie记录
谷歌浏览器访问192.168.2.5/index.php
此时进去了就算变了服务器也不用输入用户名密码


session存到了数据库
用proxy机telnet 192.168.4.5 11211
get cookie

发布了67 篇原创文章 · 获赞 13 · 访问量 4090

猜你喜欢

转载自blog.csdn.net/tongzhuo1220/article/details/101364459