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
访问后端服务器的测试页面
[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信息