phpize ##预编译
##########php添加模块##########
tar zxf memcache-2.2.5.tgz ##先下载模块 然后解压
cd memcache-2.2.5
cd /usr/local/lnmp/php/bin
vim ~/.bash_profile ##添加一个变量路径
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/php/bin
export PATH
which phpize
source ~/.bash_profile ##加载路径
which phpize
cd memcache-2.2.5
phpize ##预编译
./configure ##
make ##编译
make install ##安装
cd /usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20131226/
ls
php -m ##查看php的模块
php -m | grep memcache
/etc/init.d/php-fpm status ##打开php-fpm
/etc/init.d/php-fpm start
cd /usr/local/lnmp/php/etc
vim php.ini ##添加模块
850 extension=memcache.so
/etc/init.d/php-fpm reload
php -m | grep memcache ##查看添加模块模块添加成功
cd memcache-2.2.5
cp example.php memcache.php /usr/local/lnmp/nginx/html/
netstat -autlp | grep 11211
yum install memcached -y ##因为memcacahe要连接11211端口 所以安装memcached 它监听的就是11211端口
vim example.php
cd /usr/local/lnmp/nginx/html/
vim memcache.php
22define('ADMIN_USERNAME','memcache'); // Admin Username
23define('ADMIN_PASSWORD','yiyibushe'); // Admin Password
24 define('DATE_FORMAT','Y/m/dH:i:s');
25 define('GRAPH_SIZE',200);
26 define('MAX_ITEM_DUMP',50);
27
28 $MEMCACHE_SERVERS[] ='localhost:11211'; // add more as an array
vim /etc/sysconfig/memcached
/etc/init.d/memcached start
nginx
##############jdk tomcat#############
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
cd /usr/local/
ln -s jdk1.7.0_79/ java
vim /etc/profile
80 exportJAVA_HOME=/usr/local/java
81 exportCLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
82 export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
echo $JAVA_HOME
echo $CLASSPATH
echo $PATH
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
cd /usr/local/
ln -s apache-tomcat-7.0.37/ tomcat
cd tomcat/
bin/startup.sh ##开启tomcat
netstat -antlp | grep :8080
cd webapps/ROOT/ ##tomcat的发布文件
cd /usr/local/lnmp/nginx/conf/
vim nginx.conf
68 location ~ \.jsp$ { ##代理所有的.jsp文件 8080端口的
69 proxy_passhttp://172.25.14.1:8080;
nginx -t
nginx -s reload
重新开启一台虚拟机 安装jdk和tomcat 然后启动tomcat 让跑8080端口
把压缩包传过来 然后按上面步骤解压就行
作业 nginx怎么家memcache模块
############基于cookies的nginx负载均衡算法 url_hash#########
tar zxf nginx-1.10.1.tar.gz ##安装版本10的nginx
cd nginx-1.10.1
cd auto/cc/gcc
vim auto/cc/gcc ##注释掉debug
tar nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz zxf
tar zxf nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz ##解压模块
cd nginx-1.10.1
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module--with-http_stub_status_module --with-threads --with-file-aio --add-module=/root/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d ##重新添加一个模块
make
make install
cd /usr/local/lnmp/nginx/
cd conf/
vim nginx.conf ##修改的时候先把nginx stop
然后修改完了在打开
17 http { upstream westos{
18 sticky;
19 server 172.25.14.1:8080;
20 server 172.25.14.2:8080;
21 }
68 location ~ \.jsp$ {
69 proxy_passhttp://westos;
70 }
############tmocat 解决单点故障 交叉存储#############
<T1><T2>
. \ /.
. X .
. / \.
<M1><M2>
Tomcat-1 (T1) 将 session 存储在memcached-2 (T2)上。只有当 M2 不可用时,T1才将 session 存
储在 memcached-1 上(M1 是 T1 failoverNode)。使用这种配置的好处是,当 T1 和 M1 同时崩
溃时也不会丢失 session 会话,避免单点故障。
把如下软件包放置到/usr/local/tomcat/lib 目录中
kryo-1.03.jar
kryo-serializers-0.8.jar
memcached-2.5.jar
memcached-session-manager-1.5.1.jarmemcached-session-manager-tc7-1.5.1.jar
minlog-1.2.jar
msm-kryo-serializer-1.5.1.jar
reflectasm-0.9.jar
vi /usr/local/tomcat/conf/context.xml
<Context>
......
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.0.91:11211,n2:192.168.0.92:11211"
failoverNodes="n1"
#在 node2 上此项设置为“n2”
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>
以下为测试页面,保存到/usr/local/tomcat/webapps/ROOT/test.jsp<%@page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster AppTest</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " +request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " +session.getId()+"<br>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>
访问 172.25.14.1/test.jsp,不同的主机访问时会调度到不同的 tomcat 实例上处理
来自同一主机的请求会交给同一个 tomcat 实例处理,此时你 down 掉当前正在响应的 tomcat 实
例,nginx 会自动把用户的请求调度到另一个 tomcat 实例上,同时 session 也没有丢掉。
############varnish##############
处理过程大致分为如下几个步骤:
(1)Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或
Pipe,或者进入 Lookup(本地查询)。
(2)Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进
入 miss 状态。
(3)Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。
(4)Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地
的存储。
(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求
2. 配置
# vi /etc/varnish/default.vcl
###配置一个后端服务器
backend web1 {
.host = "192.168.0.188";
.port = "80";
}
###配置 varnish 服务端口
# vi /etc/sysconfig/varnish
VARNISH_LISTEN_PORT=80
# service varnish start
###查看缓存命中情况
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";
}
return (deliver);
}
/etc/init.d/varnish start ##开启varnish
[root@foundation14 mnt]# curl -I 172.25.14.3
HTTP/1.1 200 OK
Server: nginx/1.10.1
Content-Type: text/html; charset=UTF-8
X-Powered-By: PHP/5.6.20
Content-Length: 85023
Accept-Ranges: bytes
Date: Sat, 20 May 2017 08:27:25 GMT
X-Varnish: 1251144347
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Cache: MISS from westos cache
[root@foundation14 mnt]# curl -I 172.25.14.3
HTTP/1.1 200 OK
Server: nginx/1.10.1
Content-Type: text/html; charset=UTF-8
X-Powered-By: PHP/5.6.20
Content-Length: 85023
Accept-Ranges: bytes
Date: Sat, 20 May 2017 08:27:26 GMT
X-Varnish: 1251144348 1251144347
Age: 2
Via: 1.1 varnish
Connection: keep-alive
X-Cache: HIT from westos cache
### 通过 varnishadm 手动清除缓存
# varnishadm ban.url .*$
#清除所有
# varnishadm ban.url /index.html
#清除 index.html 页面缓存
# varnishadm ban.url /admin/$
#清除 admin 目录缓存
###########不用域名站点的后端服务器##############
###定义多个不同域名站点的后端服务器
backend web1 {
.host = "172.25.14.1";
.port = "80";
}
backend web2 {
.host = "172.25.14.2";
.port = "80";
}
#当访问 www.westos.org 域名时从 web1 上取数据,访问 bbs.westos.org 域名时到 web2 取数据,
访问其他页面报错。
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = web1;
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}
################vanish的负载均衡###################
真机里面
vim /etc/hosts
172.25.14.3 server3.example.comwww.westos.org westos.org bbs.westos.org
vm1里面开启nginx 80 端口
vm2里面做虚拟主机
1011 <VirtualHost *:80>
1012 DocumentRoot /var/www/html
1013 ServerNameserver2.example.com
1014 </VirtualHost>
1015
1016 <VirtualHost *:80>
1017 DocumentRoot /www1
1018 ServerName www.westos.org
1019 </VirtualHost>
1020 <VirtualHost *:80>
1021 DocumentRoot /www2
1022 ServerName bbs.westos.org
1023 </VirtualHost>
vim /etc/hosts
172.25.14.2 server2 www.westos.org bbs.westos.org server2.example.org ##本地解析
开启httpd80端口
curl www.westos.org ##测试虚拟主机
curl bbs.westos.org
vm3 里面 修改httpd的端口为8080
然后修改vanish的配置文件
director lb round-robin { ##轮询
{
.backend = web1;
{
}
.backend = web2;
#把多个后端聚合为一个组,并检测后端健康状况
}
}sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = lb;
return (pass);
#为了测试方便,不进行缓存。
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {
error 404 "westos cache";
}
}
重启httpd 和varnish服务
在浏览器里面测试www.westos.org
###########把varnish里面的ttl'值设置为过期##############
###varnish cdn 推送平台
http://code.google.com/p/varnish-php-bansys/
#需要安装 php 支持
# unzip bansys.zip -d /var/www/html
# vi /var/www/html/bansys/config.php
#只保留如下设置,其余注释掉
<?php
$var_group1 = array(
'host' => array('172.25.14.3'),
'port' => '80',
);
//varnish 群组定义
//对主机列表进行绑定
$VAR_CLUSTER = array(
'www.westos.org' => $var_group1,
);
//varnish 版本//2.x 和 3.x 推送命令不一样
$VAR_VERSION = "3";
?>
#bansys 有两种工作模式,分别是:telnet 和 http 模式。
#telnet 模式需要关闭 varnish 服务管理端口的验证,注释掉/etc/sysconfig/varnish 文件中的 “ -S $
{VARNISH_SECRET_FILE}”这行,重启varnish 服务即可。
#如果是 http 模式需要对 varnish 做以下设置:
# vi /etc/varnish/default.vcl
acl westos {
#设置访问控制
"127.0.0.1";
"172.25.14.0"/24;
}
sub vcl_recv {
if (req.request == "BAN") {
if (!client.ip ~ westos) {
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}
}
还需要把负载均衡里面的 return(pass);注释掉
然后重新启动vanish服务
在浏览器里里面输入172.25.14.3:8080 进行测试
用http
.* 代表清楚全部的缓冲
/index.html ##html文件将ttl值设置为过期
#####################高可用集群###############
重新创建两个虚拟机
然后修改主机名 ip 本地解析 还有两台虚拟机的时间要同步 关闭selinux iptables
修改yum源 http://172.25.14.250/rhel6.5 ##这样只会读到镜像下面的Server 所以我们要对yum源进行修改
两台虚拟机一致
server]
name=Red Hat Enterprise Linux
baseurl=http://172.25.14.250/rhel6.5/Server
enabled=1
gpgcheck=1
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.14.250/rhel6.5/HighAvailability
gpgcheck=0
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.14.250/rhel6.5/LoadBalancer
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.14.250/rhel6.5/ResilientStorage
gpgcheck=0
[ScalableFileSystem]
name=ScalableFileSystem
baseurl=http://172.25.14.250/rhel6.5/ScalableFileSystem
gpgcheck=0
server1 yum install ricci luci -y
server2 yum install ricci
对server1和server2进行passwd ricci 对ricci用户进行修改密码
两台机器启动ricci 然后设置开机自启 chkconfig ricci on
对server1 上打开luci /etc/init.d/luci start
然后在浏览器里面进行https://172.25.14.1:8084
先输入你luci服务器的root用户和密码进行登陆
进去之后然后创建
创建用主机名server1 server2 密码用ricci用户的密码进行创建
完了之后点Download 那个 还有下面两个选项打勾
然后两台ricci主机会安装高可用套件
安装完成后在server1中启动luci
###############fence栅栏##############
fence的作用是当vm2 昏迷的时候,又可能会有醒来的时候 这个时候他的内存里面还存有数据 这样如果写入数据的话 会造成存储脑裂 所以我们应该直接让vm2跳电重启 luci服务机会联合vm1 直接把vm2 跳电重启
在真机里面 :
yum install fence-virtd.x86_64 fence-virtd-libvirt.x86_64fence-virtd-multicast.x86_64 -y
然后fence_virtd -c
一直空格 遇到virt0的时候写br0
然后最后按y
因为没有这个目录所有我们需要先创建这个目录
mkdir /etc/cluster/
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1 ##写入128位随机数字
scp fence_xvm.key root@172.25.14.1:/etc/cluster/ ##将key传到两个ricci服务机上面
scp fence_xvm.key root@172.25.14.2:/etc/cluster/
然后 systemctl start fence_virtd.service ##启动fence_virtd服务
浏览器里面操作 先点Fence Devices
add
选择Fence virt(mul....)
然后submit 输入一个名字vmfence(随便)
在Nodes里面将虚拟机的id和fence绑定 server1和server2一样
add fence method 输入一个名字fence1(随便)
add fence instance 然后输入id
测试:因为server1是luci服务机 所以我们不能把server1down掉
在server1上面 fence_node server2 ##server2立马跳电重启
php添加模块,tomcat 负载均衡 session共享 varnish HA
最新推荐文章于 2021-04-01 19:22:49 发布