Nginx作为七层负载均衡调度器
来源:互联网 发布:安卓模拟器知乎 编辑:程序博客网 时间:2024/06/03 05:29
Nginx可以作为静态web服务器
Nginx在实际运维中,用到最多的地方是反向代理服务器,或负载均衡服务器
(二)
ngx_http_proxy_module模块详解
Nginx在实际运维中,用到最多的地方是反向代理服务器,或负载均衡服务器
Nginx使用proxy_pass和fastcgi_pass实现单台主机的动静分离
(PHP以daemon方式运行)
# 如果用户请求的URI为/index.html# 所有的静态请求调度到httpd服务器# 用户请求的URI会加到http://192.168.23.11:8080,请求会变成http://192.168.23.11:8080/index.html location ~* \.html$ { proxy_pass http://192.168.23.11:8080; }# php以php-fpm的模式运行# 如果用户请求的URI为/index.php# 所有的动态请求调度到PHP服务器location ~* \.php$ { fastcgi_pass 192.168.23.12:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /app/php/$fastcgi_script_name; include fastcgi_params; }
Nginx使用proxy_pass和fastcgi_pass实现单台主机的动静分离
(PHP以httpd模块方式运行)
location ~* \.html$ { proxy_pass http://192.168.23.11:8080; }location ~* \.php$ { proxy_pass http://192.168.23.12:8080;}
解决内网服务器的日志中记录的客户端IP地址为反代的IP
(如果代理前端有CDN,需要在CDN上配置X-Forwarded-For)
通常的情况下,对内网中的web服务器的日志进行分析是非常关键的,但是基于前端调度器调度之后,所有的web服务器的日志信息中客户端IP地址都变成了调度器的内网IP地址。那么在这种情况下,需要使用Nginx的一个指令:proxy_set_header 将客户端的IP地址获得后,传递给内网的web服务器,让内网的web服务器的日志的客户端IP地址为真实的客户端IP地址
# 在Nginx中配置proxy_set_header X-Forwarded-For $remote_addr;# 在httpd中配置LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
add_header X-cache $uptream_cache_status;
如何使用反向proxy的cache机制
(与fastcgi的缓存类似,先在server中定义再调用)
# proxy定义缓存的方式与fastcgi的方式一样1:在http段中先定义缓存,其中/var/cache/nginx/proxy_cache为缓存在磁盘文件的路径,1:2:2表示存储在磁盘上的文件使用三个层次的目录结构,在内存中的keys缓存名为proxy_cache,大小为10M,磁盘最大缓存为10G。缓存目录/var/cache/nginx/proxy_cache需要提前创建好http{ proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2:2 keys_zone=proxy_cache:100m max_size=10g;} 2:调用缓存功能写在location中调用location / { proxy_pass http://192.168.23.11; index index.html index.htm; # 指定的key的名称 proxy_cache_key $request_uri; # 调用缓存 proxy_cache proxy_cache; # 指定不同的状态码的缓存时长 proxy_cache_valid 200 302 10m; proxy_cache_valid 301 1h; proxy_cache_valid any 1m;}
(三)
ngx_http_headers_module模块详解
这个模块可以给响应报文添加自定义首部
可以在location段中添加
# 添加一个响应头,指明响应请求的服务器的主机名add_header X-Server $server_name; # 指明缓存的超时时长,超过这段时间缓存服务器就会向后端真实服务器请求,并更新缓存expires 24h;# 告知客户端,响应客户端请求的报文是缓存中加载的,还是后端服务器响应的 add_header X-cache $uptream_cache_status;
(四)
ngx_stream_upstream_module模块详解
(做实验的时候,请关闭cache缓存功能)
这个模块是实现了Nginx的七层负载均衡
- 功用:
可以将后端响应客户端请求的真实的服务器进行分组,实现后端服务器的批量上线和下线
- 使用方式:
服务器组必须定义在http端中,在location段使用反代指令调用
# 服务器组的选项说明 1:weight=1 指定权重 2:max_fails=3 指定如果想后端服务器请求3次,依然不相应,则将其标记为不可用 3:fail_timeout=10s 指定如果请求超过了10秒,后端服务器任然无法响应,那么表示此次请求失败 4:backup 指定此服务器为备用服务器,当所有的后端服务器都不用时启用,俗称救火服务器 5:down 指定此服务器下线,不再接受用户的请求
http{ # 状态服务器组, 注意组名不能使用下划线 upstream static-servers { # 指定给静态服务器组调度请求的时候,使用最少连接算法进行调度,此调度算法也会考虑权重的影响 least_conn; # 指定后端服务器保持连接的个数 keepalive 3; server 192.168.23.11:80 weight=1 max_fails=3 fail_timeout=30s; server 192.168.23.12:80 weight=1 max_fails=3 fail_timeout=30s; server 192.168.23.13:80 weight=1 backup; server 192.168.23.14:80 weight=1 down; } # 动态服务器组, 注意组名不能使用下划线 upstream dynamic-servers { # 指定动态服务器组使用哈希调度算法进行调度,原地址hash算法hash的是客户端IP,那么就使得同一个客户端的IP地址始终发往同一个后端主机。粒度为IP级别 ip_hash; # 基于hash算法进行调度,同一个请求的URI调度到同一台动态服务器上,实现会话绑定。粒度为URI级别 hash $request_uri; server 192.168.23.16:80 weight=1 max_fails=3 fail_timeout=30s; server 192.168.23.17:80 weight=1 max_fails=3 fail_timeout=30s; server 192.168.23.18:80 weight=1 backup; server 192.168.23.19:80 weight=1 down; } # 调用后端服务器组 location ~* \.html$ { proxy_pass http://static-servers; } # 调用后端服务器组 location ~* \.php$ { proxy_pass http://dynamic-servers; }}
(五)
ngx_http_upstream_hc_module模块详解
(只有商业版才可以使用)
参考博客: http://blog.csdn.net/nimeijian/article/details/73302274
github 开源模块:https://github.com/yaoweibin/nginx_upstream_check_module
功用:
用于检查后端主机的健康状态
health_check指令详解
match=name:指定按照什么样的标准判断后端服务器的健康状态interval=3:指定多长时间检测一次后端服务器fails=3:指定如果想后端服务器请求3次,依然不相应,则将其标记为不可用passes=1:指定后端服务器只要有一次响应了请求,则将其标记为可用uri=/.health_page:指定健康状态检测所请求的URI资源路径,这里是请求站点下的.health_page页面port=80:向服务器的哪个端口发起健康状态的检查请求
http{ # 指明健康状态判定的条件 match health { status 200; header Content-Type = text/html; body ~ "health"; } # 调用后端服务器组 location ~* \.html$ { proxy_pass http://static-servers; health_check match=health interval=3 fails=3 passes=1 uri=/.health_page port=80; } # 调用后端服务器组 location ~* \.php$ { proxy_pass http://dynamic-servers; }}
(六)
memcached缓存入门
memcached基于K/V存储
将所有的数据都是存储在内存中
每一个存储项都包含 key(键)、flag(标志位)、expire time(过期时间)、size(值的字节大小)、value(值)
memcached的脚本参数配置文件
/etc/sysconfig/memcached
安装memcached
yum install -y memcached[root@7 ~]# rpm -ql memcached/etc/sysconfig/memcached/usr/bin/memcached/usr/bin/memcached-tool/usr/lib/systemd/system/memcached.service/usr/share/doc/memcached-1.4.15/usr/share/doc/memcached-1.4.15/AUTHORS/usr/share/doc/memcached-1.4.15/CONTRIBUTORS/usr/share/doc/memcached-1.4.15/COPYING/usr/share/doc/memcached-1.4.15/ChangeLog/usr/share/doc/memcached-1.4.15/NEWS/usr/share/doc/memcached-1.4.15/README.md/usr/share/doc/memcached-1.4.15/protocol.txt/usr/share/doc/memcached-1.4.15/readme.txt/usr/share/doc/memcached-1.4.15/threads.txt/usr/share/man/man1/memcached-tool.1.gz/usr/share/man/man1/memcached.1.gz
一些memcached的默认值说明
cat /etc/sysconfig/memcachedPORT="11211" :默认的端口USER="memcached" :默认运行memcached的用户MAXCONN="1024" :默认最大并发连接数1024CACHESIZE="64" : 默认内存缓存的空间64M
如何连接至memcached服务器,检查其缓存的信息
telnet 192.168.23.6 11211
1:stats //可以查看服务器的状态信息STAT pid 17357 //memcached服务进程的进程ID STAT uptime 1569 //从启动到当前所经过的时间,单位是秒。 STAT time 1439175334 //服务器当前的unix时间戳 STAT version 1.4.15 //memcache版本 STAT libevent 2.0.21-stable //libevent版本 STAT pointer_size 64 //当前操作系统的指针大小(32位系统一般是32bit,64就是64位操作系统) STAT rusage_user 0.027995 //进程的累计用户时间 STAT rusage_system 0.023996 //进程的累计系统时间 STAT curr_connections 10 //当前打开着的连接数 STAT total_connections 12 //表示从memcached服务启动到当前时间,系统打开过的连接的总数。 STAT connection_structures 11 //表示从memcached服务启动到当前时间,被服务器分配的连接结构的数量 STAT reserved_fds 20 STAT cmd_get 9 //get命令的请求次数 STAT cmd_set 3 //set命令的请求次数 STAT cmd_flush 0 //flush_all命令的请求次数 STAT cmd_touch 0 //touch命令的请求次数 STAT get_hits 0 //表示get数据命中的次数。 STAT get_misses 0 //表示get数据未命中的次数。 STAT delete_misses 0 //表示delete数据未命中的次数。 STAT delete_hits 0 //表示delete数据命中的次数。 STAT incr_misses 0 //表示incr数据未命中的次数。 STAT incr_hits 0 //表示incr数据命中的次数。 STAT decr_misses 0 //表示decr数据未命中的次数。 STAT decr_hits 0 //表示decr数据命中的次数。 STAT cas_misses 0 //表示cas数据未命中的次数。 STAT cas_hits 0 //表示cas数据命中的次数。 STAT cas_badval 0 //cas操作找到key,但版本过期,没有设置成功 STAT touch_hits 0 //表示touch数据命中的次数。 STAT touch_misses 0 //表示touch数据未命中的次数。 STAT auth_cmds 0 //认证命令处理的次数 STAT auth_errors 0 //认证失败的次数 STAT bytes_read 1248 //从网络读取的总的字节数。 STAT bytes_written 1052 //发送到网络的总的字节数。 STAT limit_maxbytes 67108864 //memcached服务缓存允许使用的最大字节数。这里为67108864字节,也就是是64M与我们启动memcached服务设置的大小一致。 STAT accepting_conns 1 //服务器是否达到过最大连接(0/1) STAT listen_disabled_num 0 //失效的监听数 STAT threads 4 //被请求的工作线程的总数量。 STAT conn_yields 0 STAT hash_power_level 16 STAT hash_bytes 524288 STAT hash_is_expanding 0 STAT malloc_fails 0 STAT bytes 0 //已用的缓存空间大小 STAT curr_items 1 //当前存储的数据总数 STAT total_items 1 //总共缓存的keyvalue数,包括过期删除的 STAT expired_unfetched 0 //连接操作主动放弃数目 STAT evicted_unfetched 0 STAT evictions 0 //为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items) STAT reclaimed 0 //已过期的数据条目来存储新数据的数目(回收再利用的条目) 2:stats itemsSTAT items:1:number 1 //缓存项数量STAT items:1:age 946 // 缓存了多长时间STAT items:1:evicted 0 STAT items:1:evicted_nonzero 0STAT items:1:evicted_time 0STAT items:1:outofmemory 0STAT items:1:tailrepairs 0STAT items:1:reclaimed 1STAT items:1:expired_unfetched 0STAT items:1:evicted_unfetched 03:stats slabs //查看STAT 1:chunk_size 96 //当前slab每个chunk的大小 STAT 1:chunks_per_page 10922 //每个Page有多少个chunk STAT 1:total_pages 1 //分配给当前slab的page总数 STAT 1:total_chunks 10922 //当前slab最多能够存放的chunk数,应该等于chunck_per_page * total_page STAT 1:used_chunks 1 //使用了多少个chunk STAT 1:free_chunks 10921 //过期数据空出的chunk里还没有被使用的chunk数 STAT 1:free_chunks_end 0 //新分配的但是还没有被使用的chunk数STAT 1:mem_requested 71 //请求存储在该slab的字节数 STAT 1:get_hits 7 STAT 1:cmd_set 6STAT 1:delete_hits 1 STAT 1:incr_hits 3STAT 1:decr_hits 1STAT 1:cas_hits 0STAT 1:cas_badval 0STAT 1:touch_hits 0STAT active_slabs 1STAT total_malloced 1048512END4:stats sizes //查看slabs大小stats sizes STAT 96 1 //大小为96的chunk有1个item END
memcached交互式shell中的命令详解
1:stats //查看memcached服务器的状态信息2:stats items //查看此时memcached服务器中缓存了多少缓存项3:stats slabs //查看slabs状态4:stats sizes //查看slabs大小5:set //指定一个key对于的value set name 0 60 3 yhy STORED6:add //添加一个key add class 0 600 3 ops STORED7:replace //替换key的value8:append // 向key的value后面再添加值 append class 0 6000 9 uplooking STORED9:prepend //向key的value前面再添加值 prepend class 0 6000 9 uplooking STORED10:get //获取key对于的value get name VALUE name 0 3 yhy11:delete //删除key delete class DELETED12:incr:当一个key对应的value为数值的时候,让其加一个数 add age 0 600 2 25 STORED incr age 60 85 get age VALUE age 0 2 85 END 13:decr:当一个key对应的value为数值的时候,让其减一个数 decr age 30 157 get age VALUE age 0 3 157 END14:flush_all:清空所有的缓存,将有效时长设置为0,不会删除key
memcached的常用选项详解
-l :设置监听的地址-d :以守护进程的模式运行-u :以哪个用户运行-m :指定缓存空间大小,默认是64 megabytes,-c :指定最大并发连接数,默认是1024-p :设置监听的端口-U :设置udp的端口,可选-M:缓存空间耗尽时,向客户端返回错误信息,而不是使用LRU算法进行缓存清理-f :设置每类slab中的chuck的倍数增长因子-t :设置处理用户请求的线程数-n:设置chuck的最小值启动命令运行memcached,指定chuck的增长因子为1.1memcached -u memcached -f 2 -vv
memcached内存管理机制---slabs 内存分配器
物理内存分配: 内存的大小有page决定,每一个page为4KB大小逻辑内存分配: 每一个slab是1M 每一个chunks是1KB
安装libmemcached工具包,可以在命令行分析memcached的状态信息
yum install -y libmemcached如:查看memcached服务器的状态信息memstat --servers=127.0.0.1memcached-tool 127.0.0.1:11211如果想详细了解,请移步gooble
(七)
PHP连接memcached
PHP、Python连接memcached的方式
1:php-pecl-memcached.x86_64 2:python-memcached.noarch
实际操作步骤
1:在安装了PHP的服务器上,安装php-pecl-memcachedyum install -y httpd php php-pecl-memcached2:修改配置文件/etc/php.ini,添加session.save_handler = memcachesession.save_path = "tcp://192.168.23.10:11211?persistent=1&weight=1&timeout=1&retry_interval=15"extension=/usr/lib64/php/modules/memcached.so3:将PHP的会话保存在memcached中,PHP页面如下<?php ini_set('display_errors', 'on'); $mem = new Memcached; $mem->addServer("192.168.23.10", 11211); $mem->set('key', 'www.uplooking.com'); $val = $mem->get('key'); echo $val;?>4:在memcached的服务器上安装telnet yum install -y memcachedyum install -y telnet5:在没有访问页面前,测试下是否memcached中有缓存项memcached-tool 127.0.0.1:112116:访问页面后,测试下是否memcached中有缓存项memcached-tool 127.0.0.1:112117:使用telnet登入telnet 127.0.0.1 11211 get key VALUE key 0 17 www.uplooking.com END
阅读全文
0 0
- Nginx作为七层负载均衡调度器
- haproxy作为七层负载均衡调度器
- nginx 四/七层负载均衡设备
- Nginx与七层负载均衡
- Nginx实现七层负载均衡配置指导
- nginx作为tcp负载均衡
- HAproxy七层负载均衡
- 了解七层负载均衡
- 四层负载均衡和七层负载均衡
- 四层负载均衡和七层负载均衡
- 四层负载均衡与七层负载均衡
- 四层负载均衡与七层负载均衡
- 四层与七层负载均衡
- 四层和七层负载均衡
- 四层 七层负载均衡
- 负载均衡 四层 七层
- 四层和七层负载均衡
- 四层和七层负载均衡
- a menu program
- 欢迎使用CSDN-markdown编辑器
- poj 3624
- LCS问题不全汇总
- Numpy 使用教程 4
- Nginx作为七层负载均衡调度器
- NKOJ-3775 数列操作
- 【学习笔记八】- JS 冒泡与捕获(事件流+事件处理程序+事件对象)
- mybatis入门dao方式写URUD(二)
- 数据结构:堆(heap)
- iOS UITableView~delegate(代理方法)
- C语言文件读写
- web网站加速之CDN技术原理
- pip安装错误:ImportError: No module named 'pkg_resources'