欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

windows环境下memcache配置方法 详细篇

程序员文章站 2022-07-07 08:54:42
将memcache服务器安装包解压到c:\memcached文件夹后,使用cmd命令窗口安装。 1>开始>运行:cmd(确定) 2>cd c:\memca...
将memcache服务器安装包解压到c:\memcached文件夹后,使用cmd命令窗口安装。

1>开始>运行:cmd(确定)

2>cd c:\memcached(回车)

3>memcached -d install(回车 这步执行安装)

4>memcached -d start(回车 这步执行启动memcache服务器,默认分配64m内存,使用11211端口)

此时memcache服务器已经可以正常使用了。


在服务端运行:
# ./memcached -d -m 2048 -l 10.0.0.40 -p 11211
这将会启动一个占用2g内存的进程,并打开11211端口用于接收请求。由于32位系统只能处理4g内存的寻址,所以在大于4g内存使用pae的32位服务器上可以运行2-3个进程,并在不同端口进行监听。

又如:memcached -d -m 10 -u root -l 192.168.105.73 -p 12000 -c 256 -p /tmp/memcached.pid

-d选项是启动一个守护进程,
-m是分配给memcache使用的内存数量,单位是mb,我这里是10mb,
-u是运行memcache的用户,我这里是root,
-l是监听的服务器ip地址,如果有多个地址的话,我这里指定了服务器的ip地址192.168.105.73 ,
-p是设置memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-p是设置保存memcache的pid文件,我这里是保存在 /tmp/memcached.pid

memcache服务器安全:

memcache服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,这样如果服务器是直接暴露在互联网上的话是比较危险,轻则数据泄露被其他无关人员查看,重则服务器被入侵,况且里面可能存在一些我们未知的bug或者是缓冲区溢出的情况,这些都是我们未知的,所以危险性是可以预见的。为了安全起见,做两点建议,能够稍微的防止黑客的入侵或者数据的泄露。

现在就关于修改memcache服务器配置的问题说明如下:

1>用内网ip的方式提供web应用服务器调用,不允许直接通过外网调用,如将memcache服务器放在192.168.1.55的服务器上

2>修改端口,如改为11200

3>分配内存,如分配1024m(1g内存)

方法如下:



1>开始>运行:cmd(确定)

2>cd c:\memcached(回车)

3>memcached -m 1024 -p 11200 -l 192.168.1.55(回车)

注意,此时命令行不会回到c:\memcached>状态,并且实际上memcache服务器悄悄变为stop状态了。此窗口不可以关闭。新开一个cmd窗口

4>开始>运行:cmd(确定)

5>cd c:\memcached(回车)

6>memcached -d start(回车)可以关闭此cmd窗口。

此时可以使用新配置的memcache服务器了。


上述方法虽然解决了修改默认配置的问题,但是始终会有一个cmd窗口不可以关闭,否则就回到11211端口的默认配置。

更好的解决方案是通过修改服务的注册表配置:

1>开始>运行:regedit(回车)

2>在注册表中找到:hkey_local_machine\system\currentcontrolset\services\memcached server

3>默认的imagepath键的值是:"c:\memcached\memcached.exe" -d runservice,改为:"c:\memcached\memcached.exe" -d runservice -m 512 -p 11200 -l 192.168.1.55(确定,关闭注册表)

4>我的电脑(右键)>管理>服务 找到memcache的服务,重新启动一次即可生效。


此时,同网段内的电脑仍然可以利用这台memcache服务器,我们限定指定的web应用服务器才能够使用,通过防火墙的方式。如只允许192.168.1.2这台web服务器对memcache服务器的访问,能够有效的阻止一些非法访问,相应的也可以增加一些其他的规则来加强安全性,这个可以根据自己的需要来做。

memcache服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,这样如果服务器是直接暴露在互联网上的话是比较危险,轻则数据泄露被其他无关人员查看,重则服务器被入侵,因为mecache是以root权限运行的,况且里面可能存在一些我们未知的bug或者是缓冲区溢出的情况,这些都是我们未知的,所以危险性是可以预见的。为了安全起见,我做两点建议,能够稍微的防止黑客的入侵或者数据的泄露。

内网访问
最好把两台服务器之间的访问是内网形态的,一般是web服务器跟memcache服务器之间。普遍的服务器都是有两块网卡,一块指向互联网,一块指向内网,那么就让web服务器通过内网的网卡来访问memcache服务器,我们memcache的服务器上启动的时候就监听内网的ip地址和端口,内网间的访问能够有效阻止其他非法的访问。
# memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -p /tmp/memcached.pid
memcache服务器端设置监听通过内网的192.168.0.200的ip的11211端口,占用1024mb内存,并且允许最大1024个并发连接

设置防火墙
防火墙是简单有效的方式,如果却是两台服务器都是挂在网的,并且需要通过外网ip来访问memcache的话,那么可以考虑使用防火墙或者代理程序来过滤非法访问。
一般我们在linux下可以使用iptables或者freebsd下的ipfw来指定一些规则防止一些非法的访问,比如我们可以设置只允许我们的web服务器来访问我们memcache服务器,同时阻止其他的访问。
# iptables -f
# iptables -p input drop
# iptables -a input -p tcp -s 192.168.0.2 –dport 11211 -j accept
# iptables -a input -p udp -s 192.168.0.2 –dport 11211 -j accept
上面的iptables规则就是只允许192.168.0.2这台web服务器对memcache服务器的访问,能够有效的阻止一些非法访问,相应的也可以增加一些其他的规则来加强安全性,这个可以根据自己的需要来做


很多时候需要监控服务器上的memcached运行情况,比如缓存的查询次数,命中率之类的。但找到的
那个memcached-tool是linux下用perl写的,我也没试过windows能不能用。后来发现个简单的办法可以做到,就是使用telnet。

1、windows系统连接memcached端口 cmd命令行中键入telnet 192.168.1.1 11211 11211是memcached绑定的端口号。
2、连接上端口后输入 stats命令,即可得到描述memcached服务器运行情况的参数。
stat pid 4356 服务器进程id
stat uptime 56625 服务器运行时间,单位秒
stat time 1225249079 服务器当前的unix时间
stat version 1.1.0 服务器的版本号
stat pointer_size 64
stat rusage_user 151.845489 该进程累计的用户时间(秒:微妙)
stat rusage_system 121.667603 该进程累计的系统时间(秒:微妙)
stat ibuffer_size 4096
stat curr_connections 13 连接数量
stat total_connections 54136 服务器运行以来接受的连接总数
stat connection_structures 318 服务器分配的连接结构的数量
stat cmd_get 100595 取回请求总数
stat cmd_set 6510 存储请求总数
stat get_hits 96543 请求成功的总次数
stat get_misses 4052 请求失败的总次数
stat bytes_read 4427679 服务器从网络读取到的总字节数
stat bytes_written 6585596 服务器向网络发送的总字节数

1>、uptime 是memcached运行的秒数,
2>、cmd_get是查询缓存的次数。
3>、这两个数据相除一下就能得到平均每秒请求缓存的次数——最近niupu的流量很低,所以平均也就一秒请求一次多,
这么点大的压力,用文件系统缓存一样没问题,根本不会体现出使用memcached的优越。
4>、下面的cmd_set 就是设置key=>value的次数。整个memcached是个大hash,用cmd_get没有找到的内
容,就会调用一下cmd_set写进缓存里。
5>、紧跟着是get_hits,就是缓存命中的次数。缓存命中率 = get_hits/cmd_get * 100%。
6>、下面的get_misses的数字加上get_hits应该等于cmd_get。
7>、而total_itemscurr_items表示现在在缓存中的键值对个数.
8>、在图上total_items == cmd_set == get_misses,不过当可用最大内存用光时,memcached就会删掉一些内容,上面的等式就不成立了