首页 » PHP教程 » phpnetdaemon技巧_Python运维Nginx作为七层负载均衡调解器

phpnetdaemon技巧_Python运维Nginx作为七层负载均衡调解器

访客 2024-12-13 0

扫一扫用手机浏览

文章目录 [+]

Nginx在实际运维中,用到最多的地方是反向代理做事器,或负载均衡做事器

(二)ngx_http_proxy_module模块详解

phpnetdaemon技巧_Python运维Nginx作为七层负载均衡调解器

Nginx在实际运维中,用到最多的地方是反向代理做事器,或负载均衡做事器

phpnetdaemon技巧_Python运维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/memcached

PORT=\"大众11211\"大众 :默认的端口

USER=\"大众memcached\"大众 :默认运行memcached的用户

MAXCONN=\公众1024\"大众 :默认最大并发连接数1024

CACHESIZE=\"大众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 items

STAT items:1:number 1 //缓存项数量

STAT items:1:age 946 // 缓存了多永劫光

STAT items:1:evicted 0

STAT items:1:evicted_nonzero 0

STAT items:1:evicted_time 0

STAT items:1:outofmemory 0

STAT items:1:tailrepairs 0

STAT items:1:reclaimed 1

STAT items:1:expired_unfetched 0

STAT items:1:evicted_unfetched 0

3: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 6

STAT 1:delete_hits 1

STAT 1:incr_hits 3

STAT 1:decr_hits 1

STAT 1:cas_hits 0

STAT 1:cas_badval 0

STAT 1:touch_hits 0

STAT active_slabs 1

STAT total_malloced 1048512

END

4: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

STORED

6:add //添加一个key

add class 0 600 3

ops

STORED

7:replace //更换key的value

8:append // 向key的value后面再添加值

append class 0 6000 9

uplooking

STORED

9:prepend //向key的value前面再添加值

prepend class 0 6000 9

uplooking

STORED

10:get //获取key对付的value

get name

VALUE name 0 3

yhy

11:delete //删除key

delete class

DELETED

12: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

END

14: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.1

memcached -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.1

memcached-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-memcached

yum install -y httpd php php-pecl-memcached

2:修正配置文件/etc/php.ini,添加

session.save_handler = memcache

session.save_path = \公众tcp://192.168.23.10:11211?persistent=1&weight=1&timeout=1&retry_interval=15\公众

extension=/usr/lib64/php/modules/memcached.so

3:将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 memcached

yum install -y telnet

5:在没有访问页面前,测试下是否memcached中有缓存项

memcached-tool 127.0.0.1:11211

6:访问页面后,测试下是否memcached中有缓存项

memcached-tool 127.0.0.1:11211

7:利用telnet登入

telnet 127.0.0.1 11211

get key

VALUE key 0 17

www.uplooking.com

END

相关文章

phphook功效技巧_php的钩子hook你有没有用过

钩子定义钩子是编程里一个常见观点,非常的主要。它使得系统变得非常随意马虎拓展,(而不用理解其内部的实现机理,这样可以减少很多事情量...

PHP教程 2024-12-15 阅读0 评论0