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.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
$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 两个文件的内容,添加页面颜色属性,以区
别后端两台不同的服务器 :
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]
[Service]
[Unit]
[Service] |
--------------------
[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
$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