linux高级运维之memcache服务

案例1:构建memcached服务

案例2:LNMP+memcached

案例3:PHP的本地Session信息

案例4:PHP实现session共享

memcache简介及理论基础:

关系型数据库:mysql mariadb

	RDBMS即关系数据库管理系统(Relational Database Management System)

NoSQL,泛指非关系型的数据库

	kv key=vaule数据库

	redis mongdb  

传统web架构的问题:

	许多web应用都将数据保存到RDBMS中,应用从服务器中读取数据并在浏览器中显示

	随着数据量的增大,访问的集中就会出现RDBMS负载加重,数据响应恶化,网站显示延迟等重大影响

数据储存位置对比

	性能:CPU缓存>内存>磁盘>数据库

	价格:CPU缓存>内存>磁盘>数据库

memcached是高性能的分布式缓存服务器

	用来集中缓存数据库查询结果,减少数据库访问次数来提高动态web响应速度

	官网:http://memcached.org/

内存管理机制:

	传统的内存分配机制

		使用完通过分配的内存后回收内存,这种方式容易产生内存碎片并降低操作系统对内存的管理效率

	slab allocation机制

		按照预先规定的大小,将分配的内存分割成特定长度的内存块(chunk)再把尺寸相同的内存块分成组(chunk集合)这些内存不会释放,可以重复利用

memcached使用名为least recently used(LRU)机制来分配空间

	删除“最近最少使用”的记录

	当memcached的内存空间不足时,从最近未被使用的记录中搜索,并将其空间分配给新的记录

/usr/lib/systemd/system/   这个是systemctl的配置(启动脚本)文件的目录。

	这个目录下有对应的服务才能启动服务成功 systemctl start memcached  有这个能启动

	这个命令所有选项都是在这个目录下的脚本文件所影响的,可以把nginx加入进来用这个启,参考Apache模板。

ExecStart(函数连接)=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS

/etc/sysconfig/memcached

构建memcached服务

安装memcached软件,并启动服务

使用telnet测试memcached服务

对memcached进行增、删、改、查等操作

	yum -y  install   memcached

	memcached配置文件(查看即可,不需要修改)

		vim /usr/lib/systemd/system/memcached.service

		ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS

		vim /etc/sysconfig/memcached

			PORT="11211"

			USER="memcached"

			MAXCONN="1024"

			CACHESIZE="64"

			OPTIONS=""

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

		systemctl  start  memcached

		systemctl  status  memcached

		netstat  -anptu  |  grep memcached	端口号11211

	使用telnet访问memcached服务器

		yum -y install telnet

		telnet  192.168.4.5  11211

			add name 0 180 10	//变量不存在则添加

			set name 0 180 10	//添加或替换变量

			replace name 0 180 10	//替换

			get name	//读取变量

			append name 0 180 10	//向变量中追加数据

			delete name	//删除变量

			stats	//查看状态

			flush_all	//清空所有

			STAT get_hits 14  hits 击中(成功)了14次

			STAT get_misses 7  失败  7次

			提示:0表示不压缩,180为数据缓存时间,10为需要存储的数据字节数量。

	缓存过期时间:

	人搜索   缓存20个 数据库

	用户传视频  (音乐) ————youku

	人搜索   缓存20个 数据库

	1小时后

	人搜索   缓存21个 数据库		

####################################################################

LNMP+memcached:

部署LNMP实现PHP动态网站架构

为PHP安装memcache扩展

创建PHP页面,并编写PHP代码,实现对memcached的数据操作

	安装源码包的依赖包 

	yum -y install gcc openssl-devel pcre-devel zlib-devel

	安装完成nginx并启服务

	cd lnmp_soft/

	cd nginx-1.12.2/

	useradd -s /sbin/nolgin/ nginx 

	./configure --help

	./configure --prefix=/usr/local/nginx/ --user=nginx --group=nginx --with-http_ssl_module --with-stream

	make && make install

	ln -s /usr/local/nginx/sbin/nginx /sbin/

	nginx

	netstat -natulp |grep 80

	修改配置文件实现动静分离

	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;

		}



	安装php php-mysql(调用mariadb数据库的模块)

	php-fpm  php-pecl-memcache  (调用memcache数据库的模块)



	cd php_scripts/

	yum -y install  php  php-mysql

	yum -y install php-pecl-memcache

	yum -y install php-fpm-5.4.16-42.el7.x86_64.rpm

	安装mariadb(客户端) mariadb-server(服务端) mariadb-devel(依赖包)

	yum -y install  mariadb  mariadb-server  mariadb-devel



	安装nosql数据库

	yum -y install memcached



	启服务和关防火墙

	nginx mariadb php-fpm memcached 服务

	  

	nginx

	systemctl restart mariadb

	systemctl enable mariadb

	systemctl restart php-fpm

	systemctl enable php-fpm

	systemctl restart memcached.service 

	systemctl enable memcached



	setenforce 0

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



	验证:

	cp mem.php  /usr/local/nginx/html

	curl 192.168.2.111/mem.php (结果为test)

####################################################

PHP的本地Session信息

	部署Nginx为前台调度服务器

	调度算法设置为轮询

	后端为两台LNMP服务器

	部署测试页面,查看PHP本地的Session信息



		会员卡ID001

		人--------------------------------------》超市会员『登记信息』

						001.txt信息	

						002.txt信息

						002.txt信息

		会员卡ID002

		人--------------------------------------》超市会员『登记信息』

						001.txt信息	

						002.txt信息

						002.txt信息

		会员卡ID003

		人--------------------------------------》超市会员『登记信息』

						001.txt信息	

						002.txt信息

						002.txt信息

		firefox----------------------->登陆Session信息

		(cookie=001)		001.txt信息	

						002.txt信息

						002.txt信息

	ip_hash解决:

											                   web1  id1.txt{信息}

		user(IP)   proxy(代理)   		 web2  id2.txt{信息}	公共服务器

												                web3  id3.txt{信息}
											            



		cookie="Hm_lvt...sessionid=287679e630584099aa29780a0f7658bd%7CP%23375184726%40qq.com%7C%7C1%7C0%7C0%7C%7C0%7C0%7C0"

			//浏览器中可以看到sessionid。

步骤:

	部署后端LNMP服务器相关软件(两台后端服务器操作相同)

		//实现动静分离即可   不必安装memcached

	启动LNMP服务器相关的服务并关闭防火墙

	部署前端Nginx调度服务器

		安装nginx软件

		修改Nginx配置文件实现调度

		nginx -s reload

		关闭SELinux、防火墙

		curl  http://192.168.4.5/index.html  //测试

	部署后端LNMP服务器测试页面(两台后端服务器操作相同)

			//可用修改index.php和home.php两个文件的内容,添加页面颜色属性

			  以区别后端两台不同的服务器:<body bgcolor=blue>

		cd lnmp_soft/php_scripts/

		tar -xf php-memcached-demo.tar.gz

		cd php-memcached-demo

		cp -a  *  /usr/local/nginx/html/

			修改默认首页

			location / {

       			 root   html;

        			index  index.php index.html index.htm;  

				//这个是以顺序来找的,第一个没找到就找第二个。

   					 }

		firefox http://192.168.2.100            //填写账户信息

				//这步测试时只能访问后端的web不能访问代理

				而且要清空流量器的缓存才能 在/var/lib/php/session/下记录ID2 ID3等

		ls /var/lib/php/session/            //查看服务器本地的Session信息

			sess_ahilcq9bguot0vqsjtd84k7244   //注意这里的ID是随机的

	浏览器访问前端调度器测试(不同后端服务器Session不一致)

		google-chrome http://192.168.4.5	//推荐用google

			//填写注册信息后,刷新,还需要再次注册,说明两台计算机使用的是本地Session

			//第二台主机并不知道你再第一台主机已经登录,第一台主机的登录信息也没有传递给第二台主机

			//实际情况是:能进入登录后跳转界面,一刷新会由web1变到web2,且能看出用户名不一样!!!

			Welcome : haha 

			Welcome : xixi 

			这里的用户名会变化 意味着你之前登陆的用户名和帐号在另外一台web服务器上不生效了。

PHP实现session共享(续上实验)

Nginx服务器除了承担调度器外,还需要担任memcached数据库的角色,并在两台后端LNMP服务器上实现PHP的session会话共享

	

在上实验前端Nginx调度服务器上再搭建memcache服务器

	安装Memcached服务

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

	关闭SELinux、防火墙

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

	yum -y install php-pecl-memcache

	//因为后端两台web服务器(web1,web2)都需要连接memcached数据库,所以两台主机都需要安装PHP扩展模块

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的值session对话信息交给谁处理 处理者(handler)是memcache

	php_value[session.save_path] = "tcp://192.168.2.5:11211"

		#传输对话信息的路径是通过tcp协议传给memcache服务器的11211这个端口

	//定义Session信息存储在公共的memcached服务器上,主机参数中为memcache(没有d)

	//通过path参数定义公共的memcached服务器在哪(服务器的IP和端口)

systemctl  restart  php-fpm