本文共 5194 字,大约阅读时间需要 17 分钟。
memcached是高性能的分布式缓存服务器,用来集中缓存数据库查询结果,减少数据库访问次数,以提高动态Web
应用的响应速度。访
通过Nginx调度器负载后端两台Web服务器,实现以下目标: 部署Nginx为前台调度服务器 调度算法设置为轮询 后端为两台LNMP服务器 部署测试页面,查看PHP本地的Session信息
关闭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.conflocation / { 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; } |
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能够使用
前面已做请忽略
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 -----web2memcached数据库软件(性能差)
没有数据库,没有表 基于内存,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 |
启动服务并查看网络连接状态验证是否开启成功
]# systemctl start memcached
[root@proxy system]# telnet 192.168.2.5 11211 set name(变量名) 0 (不压缩) 180(存多久/s) 3 (存几个字符要与值一致) abc get name 回车,显示值abcadd 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转载地址:http://ahiqi.baihongyu.com/