ttserver+nginx构建高并发高可用性应用

默北 Nginx419,9071字数 3172阅读10分34秒阅读模式

ttserver+nginx构建高并发高可用性应用

ttserver一款兼容memcached协议,也可以通过HTTP协议进行数据交换,支持故障转移,高可用性,高并发的分布式key-value持久存储系统。key-value分布式存储系统的特点是查询快,存储数量大,高并发,非常适合通过主键进行查询的操作。文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

下面的案例是将图片以二进制的方式存入到ttserver中,并通过http方式读取图片。文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

一.配置nginx文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

nginx_upstream_check_module模块地址: https://github.com/yaoweibin/nginx_upstream_check_module文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

nginx需要添加nginx_upstream_check_module模块,用于对后端服务器的健康情况检测,如果后端服务器不可用,则把这台服务器移除负载均衡轮循集群,所有的请求不往这台服务器上转发,待这台服务器恢复正常后,再把这台加入到负载均衡集群。这是LB的基本功能。文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

# vi nginx.conf文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

user www-data;文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

worker_processes 8;文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

error_log /var/log/nginx/error.log crit;文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

pid /var/run/nginx.pid;文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

worker_rlimit_nofile 65535;文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

events {文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

use epoll;文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

worker_connections 65535;文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

}文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

http {文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

include /etc/nginx/mime.types;文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

default_type application/octet-stream;文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

server_tokens off;文章源自运维生存时间-https://www.ttlsa.com/nginx/ttserver-nginx-1429/

access_log off;

sendfile on;

tcp_nopush on;

keepalive_timeout 0;

tcp_nodelay on;

client_max_body_size 200m;

gzip on;

gzip_min_length 1k;

gzip_buffers 4 16k;

gzip_http_version 1.1;

gzip_comp_level 5;

gzip_disable "MSIE [1-6]\.(?!.*SV1)";

gzip_types text/plain application/x-javascript text/css application/xml text/javascript;

include /etc/nginx/conf.d/*.conf;

include /etc/nginx/sites-enabled/*;

}

# vi default

server {

listen 80;

server_name 192.168.1.213;

memcached_connect_timeout 1s;

location / {

root /www/web/tmp;

error_page 404 = @fallback;

}

location ~ ^/ttlsa/ttlsa_([0-9a-zA-Z]\.+)$ {

set $memcached_key $1; //memcached键值

add_header X-ttserver-key $memcached_key; //添加一个header信息

memcached_pass ttserver;

memcached_next_upstream error timeout; //当发生错误或超时时,将请求转发到upstream下一个服务器

default_type text/html;

error_page 404 = @fallback;

}

location @fallback {

rewrite ^ https://www.ttlsa.com redirect;

}

}

# vi upstream.conf

upstream ttserver {

server 192.168.1.60:1978;

server 192.168.1.60:1979;

check interval=3000 rise=2 fall=2 timeout=1000; //interval检测周期3s一次,fall宕机标记2次失败后标记不可用

}

二.配置ttserver

需要将ttserver配置成主主结构。

ttserver的介绍,安装,配置参见: https://www.ttlsa.com/html/1220.html

三.测试

1.上传界面

# vi upload.php

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

<title>Upload Files</title>

</head>

<body>

<h2>Select files to upload</h2>

<form enctype="multipart/form-data" action="/store.php" method="post">

<input type="file" name="file"><br>

<input type="submit" name="submit" value="Upload">

</form>

</body>

</html>

2.存入ttserver

# vi store.php

[codesyntax lang="php"]

<?php

/*

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

### author: www.ttlsa.com ###

### QQ群: 39514058 ###

### E-mail: service@ttlsa.com ###

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

*/

print_r($_FILES);

echo "<br>";

if($_FILES['file']['error'] !== 0){

die('Error upload file. Error code '.$_FILES['file']['error']);

}

$filename=$_FILES['file']['name'];

$tmpfilepath=$_FILES['file']['tmp_name'];

$content=file_get_contents($tmpfilepath);

echo '<img src="data:image/jpeg;base64,', base64_encode($content), '"/>';

echo "<br>";

$ttserver=new Memcache;

$ttserver->addServer('192.168.1.60',1978);

$ttserver->addServer('192.168.1.60',1979);

$rt=$ttserver->set($filename,$content,0,0);

if($rt){

echo "存储成功!\n";

}else{

echo "存储失败!\n";

}

?>

[/codesyntax]

3.结果截图

上传图片:

Memcache

通过HTTP从ttserver中取图片:

Memcache

存在问题:

1.二进制传输问题: 二进制数据通过非纯8-bit的传输层传输时,会出现错误。最好是经过base64_encode编码后再传输。

2.序列化问题: Tokyo Tyrant使用memcached协议连接,用php的memcached客户端读取时不会自动反序列化。可使用unserialize()函数进行反序列化操作。此问题稍后再议。

表情图片,用户头像等等场景都可以使用此种方案。比如以用户ID号作为键值等等。

如需转载请注明出处: https://www.ttlsa.com/html/1429.html

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
默北
  • 本文由 发表于 20/07/2012 15:49:26
  • 转载请务必保留本文链接:https://www.ttlsa.com/nginx/ttserver-nginx-1429/
  • Memcache
  • nginx
  • nginx_upstream_check_module
  • ttserver
  • 高可用性
  • 高并发
评论  4  访客  0