varnish mysql_mysql 触发器 Varnish:高速http缓存 varnish cdn 推送平台

sendfile(数据直接从 kernal的buffer出去)适合小文件

Aio(nginx)全异步(与事件驱动io的区别是:数据会到达mem才会通知,其实也不需要通知 可以直接返回给客户端) 支持:mmap event drive(处理大文件)

上一回说到,在数据库修改后,redis里面的数据不能做到自动更新,必须手动删除更改过的数据 根据以上问题我们做出如下改进:

所以接下来就要通过 mysql 触发器将改变的数据同步到 redis 中

配置 gearman 实现数据同步

Gearman是一个支持分布式的任务分发框架:

Gearman Job Server: Gearman 核心程序,需要编译安装并以守护进程形式运行在后台。

Gearman Client:可以理解为任务的请求者。

Gearman Worker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式

运行,Gearman Worker 接收到 GearmanClient 传递的任务内容后,会按顺序处理。

大致流程:下面要编写的 mysql 触发器,就相当于 Gearman 的客户端。修改表,插入表就相当于直接

下发任务。然后通过 lib_mysqludf_json UDF 库函数将关系数据映射为 JSON 格式,然后

在通过 gearman-mysql-udf 插件将任务加入到Gearman 的任务队列中,最后通过

redis_worker.php,也就是 Gearman 的worker 端来完成 redis 数据库的更新。

dd1:

cd /root/redis

安装gearman软件包:

yum install gearmand-1.1.8-2.el6.x86_64.rpm libgearman-1.1.8-2.el6.x86_64.rpm

/etc/init.d/php-fpm start

netstat -antlpeFudJKBv7F1XnwcMmF7zMm2W92uJidd1:安装php的gearman扩展

tar zxf gearman-1.1.2.tgz

cd gearman-1.1.2

phpizerpm -ivh libgearman-devel-1.1.8-2.el6.x86_64.rpmlibevent-devel-1.4.13-4.el6.x86_64.rpm libevent-doc-1.4.13-4.el6.noarch.rpmlibevent-headers-1.4.13-4.el6.noarch.rpm

./configure

make && make install

cd /etc/php.d/

cp mysql.ini gearman.ini

vim gearman.ini

FqqnsZ2zgRc8MHrBDGolsvLyDEdG/etc/init.d/php-fpm restart查看php已经安装过的扩展:

php -m | grep gearman

php -m | grep mysql

php -m | grep redis

Fl4xtk9SVTkPLtC5FxRpRONZZ5UBcd redis/

scp gearman-mysql-udf-0.6.tar.gz 172.25.42.12

scp lib_mysqludf_json-master.zip 172.25.42.12:

scp libevent-* libgearman-* 172.25.42.12:

dd3:

/etc/init.d/mysqld start

tar zxf gearman-mysql-udf-0.6.tar.gz

yum install mysql-devel -y

rpm -ivh libgearman-devel-1.1.8-2.el6.x86_64.rpmlibevent-devel-1.4.13-4.el6.x86_64.rpm libevent-doc-1.4.13-4.el6.noarch.rpmlibevent-headers-1.4.13-4.el6.noarch.rpm

cd gearman-mysql-udf-0.6

./configure --libdir=/usr/lib64/mysql/plugin/make && make install

cd /usr/lib64/mysql/plugin/进入mysql环境:

注册 UDF 函数

mysql> CREATE FUNCTION gman_do_background RETURNS STRING SONAME

"libgearman_mysql_udf.so";mysql>CREATE FUNCTION gman_servers_set RETURNS STRINGSONAME

"libgearman_mysql_udf.so";查看函数

mysql> select * from mysql.func;FipPC6kIHRsb0A3fTmYvPbHEpduj安装 lib_mysqludf_json

lib_mysqludf_jsonUDF库函数将关系数据映射为 JSON 格式。通常,数据库中的数据映射为 JSON 格式,是通过程序来转换的

unzip lib_mysqludf_json-master.zip

cd lib_mysqludf_json-maste

gcc $(mysql_config --cflags) -shared -fPIC -olib_mysqludf_json.so

lib_mysqludf_json.c查看 mysql 的模块目录:

mysql> show global variables like "plugin_dir"

拷贝 lib_mysqludf_json.so 模块:

cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/

注册 UDF 函数

mysql> CREATE FUNCTION json_object RETURNS STRING SONAME

"lib_mysqludf_json.so"查看函数

mysql> select * from mysql.func;FnUIZggplVdQsP-c-Sd968Y6a6An指定 gearman 的服务信息

mysql>SELECT gman_servers_set("172.25.42.10:4730");编写 mysql 触发器 test.sql

Fkzk85J25LdhROTGO_LClhFCWN6Pmysql < test.sql查看触发器

mysql> SHOW TRIGGERS FROM test

FoINxlrJmPXNUeq6Z866uvzJopnu

Fkdp2YKVnMjBlujSHtfA8lbN26sp

dd1:编写 gearman 的 worker 端

nohup php worker.php &>/dev/null & (后台运行)FtNegIoNedhu_HfwnlyCY8ieUyv9测试:

更新 mysql 中的数据

Flj0_v-hNbAv7846Mh7KcR9DI9Bbmysql> update test set name="test1" where id=1FhTqvPIf6OTG27CJw06YXXqGJVybmysql> update test set name="dangdang" where id=1

FpGlU_k5xG5cjBsOFgJP8BmogSVo

FsPXG6JAGIWkAFo9E_jjVnjxf-S_

Varnish:高速http缓存:dd1:

varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm

rpm Civh

FnfOH0byA8MJ4ulqXSgPmaXnVyHzvim /etc/sysconfig/varnish

Fg_vYHqX4hfjUP8vGcx3yvyb0nwkcd /etc/varnish/

vim default.vcl

Fnh7GZC7X-pyZyVjhK0p560jeTcL/etc/init.d/varnish start

dd3:/etc/init.d/httpd startFlBebrwJHfN1JsV-P03JM4c_Q6so###通过 varnishadm 手动清除缓存

# varnishadm ban.url .*$

#清除所有

# varnishadm ban.url /index.html

#清除 index.html 页面缓存

# varnishadm ban.url /admin/$

#清除 admin 目录缓存vim default.vcl

###查看缓存命中情况

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);

}

测试缓存命中:

FpPRCJeWHhA9mMjRkX0MGYuDsWuD

FtdCWtHTXxba4VUb7UKhRGz8iNag

定义多个不同域名站点的后端服务器:

backend default {

.host = "172.25.42.12";

.port = "80";

}

backend web {

.host = "172.25.42.11";

.port = "80";

}

sub vcl_recv {

if (req.http.host ~ "^(www.)?dd.org") {

set req.http.host = "www.dd.org";

set req.backend = default;

} elsif (req.http.host ~ "^bbs.dd.org") {

set req.backend = web;

} else {error 404 "westos cache";

}

测试:www.dd.org 和 dd.org 是同一个缓存

Ftpg69fwtQoTDBdM-6U88HwUlyWg

而bbs.dd.org是一个缓存

FvP54P5NK4ltHyBSktmka_UoX27k

#当访问 www.dd.org 域名时从 default 上取数据,访问 bbs.dd.org 域名时到web 取数据,访问其他页面报错 //注意:测试主机加解析

负载均衡:(域名负载均衡)

访问www.dd.org 时 两台主机响应它

避免再开一台虚拟机 给dd2 做虚拟主机(一个ip 多个域名)Fge9Pm1eHUUN5JsLgRepKwBKypz7dd1:

vim default.vcl

director lb round-robin {

{.backend = default;}

{.backend = web;}

}

sub vcl_recv {

if (req.http.host ~ "^(www.)?dd.org") {

set req.http.host = "www.dd.org";

set req.backend = lb;

return (pass); (测试用)

} elsif (req.http.host ~ "^bbs.dd.org") {

set req.backend = web;

} else {error 404 "westos cache";

}

}

FtkkCwyieHX3-jJo_weEGJrcQFAS

Fmoh57t6PjhnR3G5ntmmy7b5o5y0

FliEXlPlvhkaALD3wJh280IAVKVO

varnish cdn推送平台 (清空缓存)#需要安装 php 支持

# unzip bansys.zip -d /var/www/html

# vi /var/www/html/bansys/config.php

#只保留如下设置,其余注释掉

$var_group1 = array(

"host" => array("172.25.42.10"),

"port" => "80",

);

//varnish 群组定义

//对主机列表进行绑定

$VAR_CLUSTER = array(

"www.dd.org" => $var_group1,

);

vim /etc/varnish/default.vcl

/etc/init.d/varnish reload

测试:

FsW_NOTXY9nqz9a7khlD9uRLTg8A

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值