LNMP+memcached搭建,在memcached上做upstream,session共享


memcached服务器 (高性能的的分布式缓存服务器)
本身也是个数据库,跟mysql一样。
优点:MeMcAcess是简单而强大的。它的简单设计促进了快速部署,便于开发,并解决了大型数据缓存面临的许多问题。
作用: 用来集中缓存数据库查询结果(使查询更快!) 减少数据库的访问次数,以提高web应用响应数度麻!

 

一,  构建memcached服务

一。一
yum装包   memcached
查看配置    vim /usr/lib/systemd/system/memcached.service


配置文件解释
/usr/lib/systemd/system下的http.service (可以参照启动方式,通过写改路径来达到启动某程序的目的,例如start执行什么,stop执行什么)
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful

这个vim /usr/lib/systemd/system/memcached.service里的变量存放在 vim /etc/sysconfig/memcached里面


启服务    systemctl  start  memcached
客户端装telnet包   是个访问工具(能访问memcached服务器类是vsftpd,客户端也要装ftp)
ss -antulp | grep memcached验证是否启动

二,    用telnet验证memcached是否可用(这个工具有点古老,但官方没有提供专用工具)
 客户端装telnet(类是于服务器mariadb.server,客户端mariadb。telnet是远程工具)

二。一
[root@zabbixclient_web1 ~]# telnet 192.168.2.5 11211 (端口就是那个配置文件的端口)
Trying 192.168.2.5...
Connected to 192.168.2.5.
Escape character is '^]'.
已经连接上了,没有连接上可能你没启动服务

测试
##提示:0表示不压缩,180为数据缓存时间,3为需要存储的数据字节数量。
set name 0 180 3                //定义变量,变量名称为name
plj                            //输入变量的值,值为plj                
STORED
get name                        //获取变量的值
VALUE name 0 3                 //输出结果
plj
END


**************************************************************************************
//
工作中一般使用php脚本操控memcached
这个脚本在/lnmp_soft/php_scripts里面

[root@zabbixserver php_scripts]# pwd
/root/lnmp_soft/php_scripts
[root@zabbixserver php_scripts]# ls
mem.php  mysql.php  php-memcached-demo.tar.gz  test.php
mem.php就是操控memcached的脚本,打开可以看到$memcache->connect('localhost',11211) or die ('could not connect!! ');
需要执行这个php脚本实现操控的话需要LNMP环境(你懂的)


一:部署LNMP环境
(可以脚本一键执行,我有分享在博客里)
[root@proxy ~]# yum -y install gcc openssl-devel pcre-devel zlib-devel
[root@proxy ~]# tar -xf nginx-1.12.2.tar.gz
[root@proxy ~]# cd nginx-1.12.2
[root@proxy nginx-1.12.2]#  ./configure   \   (nginx -V 可以查看安装过那些模块)
> --with-http_ssl_module
[root@proxy nginx-1.12.2]# make && make install
[root@proxy ~]# yum -y install  mariadb  mariadb-server  mariadb-devel
[root@proxy ~]# yum -y install  php  php-mysql
[root@proxy ~]# yum -y install  php-fpm-5.4.16-42.el7.x86_64.rpm
修改Nginx配置文件
location / {
            root   html;
            index  index.php  index.html   index.htm;
        }
 location  ~  \.php$  {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
           # fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi.conf;
        }

systemctl stop  httpd        
 systemctl start mariadb
 systemctl status mariadb
systemctl start php-fpm
 setenforce 0
firewall-cmd --set-default-zone=trusted
nginx启动不了可能是http没关
systemctl start mariadb  systemctl start php-fpm


三:创建PHP页面,使用PHP语言测试memcached服务
cp /lnmp_soft/php_scripts/mem.php  /usr/local/nginx/html/
访问firefox http://192.168.2.5/mem.php
如果空白可能装一个支持php支持memcachaed的包
(可以用yum list | grep memca 找到这个包的名字)
systemctl restart php-fpm

[root@proxy ~]# yum -y install  php-pecl-memcache
再次访问成功!

 

 


 案例3:PHP的本地Session信息
Session
每个用户访问服务器都会建立一个session,那服务器是怎么标识用户的唯一身份呢?事实上,用户与服务器建立连接的同时,服务器会自动为其分配一个SessionId。
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上


cookeie
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。
   当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容

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


web1/2都装LNMP环境
[root@web1 ~]# yum -y install gcc openssl-devel pcre-devel zlib-devel
[root@web1 ~]# tar -xf nginx-1.12.2.tar.gz
[root@web1 ~]# cd nginx-1.12.2
[root@web1 nginx-1.12.2]#  ./configure   \
> --with-http_ssl_module   (只加载网页用一个模块就可以了)
[root@web1 nginx-1.12.2]# make && make install
root@web1 ~]# yum -y install  mariadb  mariadb-server  mariadb-devel  php  php-mysql

[root@web1 ~]cd lnmp_soft ; yum -y install  php-fpm-5.4.16-42.el7.x86_64.rpm


修改Nginx配置文件(修改默认首页与动静分离) (访问动态网站是要有的)
[root@web1 ~]# vim /usr/local/nginx/conf/nginx.conf
location / {
            root   html;
            index  index.php  index.html   index.htm;
        }
 location  ~  \.php$  {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
           # fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi.conf;
        }

启动LNMP服务器相关的服务
systemctl start mariadb nginx php-fpm
[root@web1 ~]# setenforce 0
[root@web1 ~]# firewall-cmd --set-default-zone=trusted



部署前端Nginx调度服务器
[root@proxy ~]# yum  -y  install   pcre-devel openssl-devel
[root@proxy ~]# tar -xf nginx-1.12.2.tar.gz
[root@proxy ~]# cd nginx-1.12.2
[root@proxy nginx-1.12.2]# ./configure
[root@proxy nginx-1.12.2]# make && make install

Nginx配置文件中,通过upstream定义后端服务器地址池,默认调度策略为轮询,使用proxy_pass调用upstream定义的服务器地址池:

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
upstream webs  {                       (写在http里面server上面)
        server 192.168.2.100:80;
        server 192.168.2.200:80;
  }
 server  {
          listen       80;
          server_name  localhost;
          location  /  {
              proxy_pass http://webs;
            root   html;
            index  index.php index.html index.htm;
          }
}

重新加载配置文件nginx -s reload
关闭SELinux、防火墙

测试环境是否配置成功[root@client ~]# curl  http://192.168.4.5/index.html


五:部署测试页面
部署测试页面(Web1和web2服务器)。
测试页面可以参考lnmp_soft/php_scripts/php-memcached-demo.tar.gz。(这个是一个网页的模版)(解压它并拷贝到nginx的html里测试用)
[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 在保留原文件属性的前提下复制文件
你在/usr/local/nginx/html/下面可以看到拷贝来的 页面文件
为了区别web1/2可以给页面改个颜色(要在LNMP环境的php下的页面改才能显示网页颜色。改index.php)
vim /usr/local/nginx/html/index.php
     (直接在body后添加颜色 )

访问后端服务器的测试页面
[root@web1 ~]# firefox http://192.168.2.100            //填写账户信息
[root@web1 ~]# cd /var/lib/php/session/            //查看服务器本地的Session信息
[root@web1 ~]# ls
sess_ahilcq9bguot0vqsjtd84k7244                        //注意这里的ID是随机的
[root@web1 ~]# cat sess_ahilcq9bguot0vqsjtd84k7244

***************************************************************************************
测试
google-chrome http://192.168.2.5
可以使用你的真机器当客户打端访问代理服务器来测试它的upstream功能和你刚刚改字体的颜色是否生效。
前提是你的真机器要有2网段,或者你可以给你的代理服务器添加一个eth1的4网段也行。
///用F5刷新即可看到一个页面类两种颜色变化///
如果找不到页面就把nginx配置文件动态页面注释


///
4:PHP实现session共享
主要点
修改PHP-FPM配置文件,实现session会话共享(客户端访问web1/2都是一个session信息!)

配置PHP使用memcached服务器共享Session信息
客户端访问两台不同的后端Web服务器时,Session 信息一致


构建memcached服务
[root@proxy ~]# yum -y install memcached

[root@proxy ~]# systemctl restart memcached
[root@proxy ~]# netstat  -anptu  |  grep memcached

关闭SELinux、防火墙


在后端LNMP服务器上部署Session共享

注意:这些操作在两台后端Web服务器上均需要执行,以下操作以Web1(192.168.2.100)服务器为例。

为PHP添加memcache扩展[root@web1 ~]# yum -y install  php-pecl-memcache

修改PHP-FPM配置文件,并重启服务

[root@web1 ~]# vim  /etc/php-fpm.d/www.conf            //修改该配置文件的两个参数
//文件的最后2行
修改前效果如下:
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
//原始文件,默认定义Sessoin会话信息本地计算机(默认在/var/lib/php/session)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
修改后效果如下:
php_value[session.save_handler] = memcache
php_value[session.save_path] = "tcp://192.168.2.5:11211"
//定义Session信息存储在公共的memcached服务器上,主机参数中为memcache(没有d)
//通过path参数定义公共的memcached服务器在哪(服务器的IP和端口)
[root@web1 ~]# systemctl  restart  php-fpm


三:客户端测试

客户端使用浏览器访问两台不同的Web服务器。
操作步骤与练习三一致,最终可以获得相关的Session ID信息

你可能感兴趣的:(memcached)