标签:ip地址配置 大型 bin stat 集群 mysql数据库 deb 设置 mcrypt
一、Memcached概述当向memcached集群存入/取出key/value时,memcache客户端会根据一定算法计算存入那台服务器(第一步:选择服务器,第二步:存取数据)
- 余数算法:先求得键的整数散列值,再除以服务器数量,根据余数存储那台服务器(特点:简单、高效;但是扩展性差,服务器数量变更时,几乎所有的缓存都会失效)
- 散列算法:先计算memcached的散列值,并将其分布在0—2^32的圆上,然后用同样的方法算出存储数据键的散列值并映射至圆上,最后从数据映射到的位置开始顺顺时针查找,将数据保存在查找到的第一台服务器,如果超过2^32还是找不到,则将数据保存在第一台memcached服务器上;如果添加一台memcached服务器,则只在圆上添加的逆时针方向的第一台服务器上的键会受到影响
一次性哈系原理
添加一台服务器后
Memcached会在内存里维护一张巨大的hash表,存储经常被读写的一些数组与文件,在Server端启动服务进程,在启动时可以指定监听的ip,自己的端口号,所使用的内存大小等几个关键参数(采用了单进程,单线程,异步I/O,基于事件 (event_based) 的服务方式)使用libevent作为事件通知实现;每个Server只是对自己的数据进行管理Client端通过指定Server端的ip地址;数据以key -->value形式,key的值通过hash进行转换,然后通过分布式算法确定对哪台Sever存储/获取数据
主机 | 系统 | IP | 网卡 | 软件 |
---|---|---|---|---|
LAMP+Memcache(Client) | Centos 6.7 64Bit | 192.168.1.10 | vmnet1 | LAMP、memcache |
Memcached(Server) | Centos 6.7 64Bit | 192.168.1.100 | vmnet1 | libevent memcached |
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 //网卡名称
TYPE=Ethernet //网卡类型为以太网
ONBOOT=yes //开机自启该网卡
NM_CONTROLLED=no //关闭NetworkManager
BOOTPROTO=static //网卡设置为静态方式
IPADDR=192.168.1.100 //IP地址配置
NETMASK=255.255.255.0 //子网掩码配置
/etc/init.d/network restart //重启网络服务
安装libevent
libevent是memcached 所依赖的异步时间通知库,作为Memcached的依赖需要先完成安装
tar -zxvf libevent-1.4.9-stable.tar.gz -C /usr/src/
cd /usr/src/libevent-1.4.9-stable/
./configure --prefix=/usr/local/libevent
make && make install
安装Memcached
tar -zxvf memcached-1.2.6.tar.gz -C /usr/src/
cd /usr/src/memcached-1.2.6/
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
选项:
--with-libevent:指定libevent事件库位置
make && make install
echo "PATH=$PATH:/usr/local/memcached/bin">>/etc/profile
source /etc/profile
memcached -d -m 32m -p 11211 -u root //启动Memcached服务
参数说明:
-d:启动为守护进程
-m <num>:分配给Memcached使用的内存数量,单位是MB,默认为64MB
-u <username>:运行Memcached的用户,仅当作为root运行时
-l <ip_addr>:(小写L)监听的服务器IP地址,默认为环境变量INDRR_ANY的值
-p <num>:设置Memcached监听的端口,最好是1024以上的端口
-c <num>:设置最大并发连接数,默认为1024
-P <file>:设置保存Memcached的pid文件,与-d选择同时使用
注:启动过程中会出现"memcached : error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory"错误,这是由于Memcached没有寻找到libevent库,需在系统中增加libevent库文件位置
解决方案:
vim /etc/ld.so.conf //打开系统额外加载库定义文件
/usr/local/libevent/lib //增加libevent事件库文件夹路径
ldconfig //重新读取/etc/ld.so.conf文件内容
memcached -d -m 32m -p 11211 -u root //无报错
netstat -utpln | grep 11211 //查看Memcahced监听端口
注:停止Memcached,可使用"pkill memcahced"及"killall memcached"等其它相关方式
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 //网卡名称
TYPE=Ethernet //网卡类型为以太网
ONBOOT=yes //开机自启该网卡
NM_CONTROLLED=no //关闭NetworkManager
BOOTPROTO=static //网卡设置为静态方式
IPADDR=192.168.1.10 //IP地址配置
NETMASK=255.255.255.0 //子网掩码配置
/etc/init.d/network restart //重启网络服务
yum -y install zlib-devel libxml2-devel libtool-ltdl-devel //安装依赖包
安装httpd
rpm -e httpd httpd-manual webalizer subversion mod_python mod_ssl mod_perl system-config-httpd php php-cli php-ldap php-common mysql dovecot --nodeps
//忽略依赖关系卸载系统已安装的RPM包软件(如果有的话,最好输入确认下)
tar -zxvf httpd-2.2.17.tar.gz -C /usr/src/
cd /usr/src/httpd-2.2.17/
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
选项:
--enable-so:启动动态加载模块支持
--enable-rewrite:启动网页地址重写功能
--enable-charset-lite:启用字符集支持,以支持使用各种字符集编码的网页
--enable-cgi:启用CGI脚本程序支持
make && make install
echo "PATH=$PATH:/usr/local/httpd/bin">>/etc/profile
source /etc/profile
cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
vim /etc/init.d/httpd
\# chkconfig:35 67 55
\# description: Apache Service
chkconfig --add httpd
安装MySQL
rpm -e mysql-server mysql /卸载使用RPM方式安装MySQL软件包
yum -y install ncurses-devel cmake //安装依赖软件包
useradd -M -s /sbin/nologin mysql //新建程序用户并加入mysql组,不允许登陆系统
tar -zxvf mysql-5.5.22.tar.gz -C /usr/src/
cd /usr/src/mysql-5.5.22/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc
选项:
-DCMAKE_INSTALL_PREFIX:指定MySQL安装位置
-DDEFAULT_CHARSET:指定默认字符集编码
-DDEFAULT_COLLATION:指定默认使用字符集校对规则
-DWITH-EXTRA-CHARSETS:指定额外支持的其他字符集编码
-DSYSCONFDIR:配置文件存储位置
make && make install
chown -R mysql:mysql /usr/local/mysql/
cp support-files/my-medium.cnf /etc/my.cnf
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ //执行初始化脚本
选项:
--user:指定运行用户
--basedir:指定MySQL数据库位置
--datadir:指定MySQL数据存储位置
echo "PATH=$PATH:/usr/local/mysql/bin">>/etc/profile
//添加MySQL到搜索路径,方便执行命令
source /etc/profile //立即让profile文件内容生效
cp support-files/mysql.server /etc/init.d/mysqld
//拷贝服务脚本文件到/etc/rc.d/init.d位置
chmod +x /etc/init.d/mysqld
chkconfig --level 35 mysqld on
/etc/init.d/mysqld start 或 service mysqld start
netstat -utpln | grep mysqld
安装PHP加密工具
rpm -e php php-cli php-ldap php-common php-mysql --nodeps
//忽略依赖关系卸载系统已安装的RPM包软件(如果有的话,最好输入确认下)
tar -zxvf libmcrypt-2.5.8.tar.gz -C /usr/src/
cd /usr/src/libmcrypt-2.5.8/
./configure && make && make install
ln -s /usr/local/lib/libmcrypt.* /usr/lib/
tar -zxvf mhash-0.9.9.9.tar.gz -C /usr/src/
cd /usr/src/mhash-0.9.9.9/
./configure && make && make install
ln -s /usr/local/lib/libmhash.* /usr/lib/
tar -zxvf mcrypt-2.6.8.tar.gz -C /usr/src/
cd /usr/src/mcrypt-2.6.8/
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
./configure && make && make install
安装PHP
tar -zxvf php-5.3.28.tar.gz -C /usr/src/
cd /usr/src/php-5.3.28/
./configure --prefix=/usr/local/php --with-mcrypt --with-apxs2=/usr/local/httpd/bin/apxs --with-config-file-path=/usr/local/php --enable-mbstring --with-mysql=/usr/local/mysql/
选项:
--with-mcrypt:加载数据加密等扩展工具支持
--with-apxs2:设置Apache HTTP Server提供的apxs模块支持程序的文件位置
--with-config-file-path:设置PHP的配置文件php.ini将要存放的位置
--enable-mbstring:启动多字节字符串功能,以便支持中文等代码
--with-mysql:设置MySQL数据库服务程序的安装位置
make && make install
PHP配置(LAMP+Memcache)
cp /usr/src/php-5.3.28/php.ini-development /usr/local/php/php.ini
//拷贝PHP模板文件到PHP工作目录
vim /usr/local/php/php.ini
226 short_open_tag = On //允许识别PHP短语法标记,即<?...?>
784 default_charset = "utf-8" //设置默认字符集为utf-8,注意删除前面";"
tar -zxvf ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz -C /usr/src/
cd /usr/src/ZendGuardLoader-php-5.3-linux-glibc23-x86_64/
cp php-5.3.x/ZendGuardLoader.so /usr/local/php/lib/php/
vim /usr/local/php/php.ini
zend_extension=/usr/local/php/lib/php/ZendGuardLoader.so
zend_loader.enable=1
vim /usr/local/httpd/conf/httpd.conf
310 AddType application/x-httpd-php .php
167 DirectoryIndex index.php index.html
httpd -t
/etc/init.d/httpd start
vim /usr/local/httpd/htdocs/test1.php //测试PHP网页能否正确显示
<?php
phpinfo();
?>
vim /usr/local/httpd/htdocs/test3.php
<?php
$link=mysql_connect(‘localhost‘,‘root‘,‘‘);
if($link) echo "恭喜你,数据库连接成功啦!";
mysql_close();
?>
tar -zxvf memcache-2.2.7.tgz -C /usr/src/
cd /usr/src/memcache-2.2.7/
/usr/local/php/bin/phpize //根据系统信息生成对应的configure文件
若出现报错:
……
Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script.
解决方法:
yum -y install autoconf
注:以上为解决方案,只当执行"/usr/local/php/bin/phpize"报错时使用
./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config
make && make install
Build complete.
Don‘t forget to run ‘make test‘.
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/ //复制扩展目录
vim /usr/local/php/php.ini
819 extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/" //指定目录
820 extension = memcache.so //启动扩展模块
/etc/init.d/httpd restart
vim /usr/local/httpd/htdocs/test2.php
<?php
$memcache = new Memcache();
$memcache->connect(‘192.168.1.100‘,11211);
$memcache->set(‘key‘,‘Memcache test successful!‘,0,60);
$result = $memcache->get(‘key‘);
unset($memecache);
echo $result;
?>
//测试调用memcache程序接口来测试memcached服务器与客户端系统工作是否正常
Memcached每个被存取的对象都有唯一的标识符key,存取操作均通过key进行,例如可以把后端数据库中的select操作提取出来,然后对相应的SQL进行hash计算得出key,然后以这个key在memcached中查找数据,如果数据不存在,说明其尚未被写入缓存中,缓存不存在时将key存储在缓存中,并设置一个失效时间(比如1小时),在失效时间内的数据都是从缓存中提取,这样就有效地减少了数据库的压力
数据存取命令:
如果只是想获取部分项目的信息,可以指定参数,格式:stats <参数>:这个指令将只返回指定参数的项目状态信息
参数:
stats
Pid:memcache 服务器的进程 ID
uptime:服务器已经运行的秒数
Time:服务器当前的 unix 时间戳
version:memcache 版本
pointer_size:当前操作系统的指针大小(32 位系统一般是 32bit)
rusage_user:进程的累计用户时间
rusage_system:进程的累计系统时间
curr_items:服务器当前存储的 items 数量
Total_items:从服务器启动以后存储的 items 总数量
Bytes:当前服务器存储 items 占用的字节数
curr_connections:当前打开着的连接数
Total_connections:从服务器启动以后曾经打开过的连接数
connection_structures:服务器分配的连接构造数
cmd_get:get 命令(获取)总请求次数
cmd_set:set 命令(保存)总请求次数
get_hits:总命中次数
get_misses:总未命中次数
evictions:为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)
Bytes_read:总读取字节数(请求字节数)
Bytes_written:总发送字节数(结果字节数)
Limit_maxbytes:分配给 memcache 的内存大小(字节)
threads:当前线程数
quit:退出
yum -y install telnet
telnet 192.168.1.100 11211 //连接Memcached的11211端口
Trying 192.168.1.100...
Connected to 192.168.1.100.
Escape character is ‘^]‘.
set key 0 60 2
he //设置保存key的值
STORED //服务器返回结果,该处代表保存成功
get key //获取key对应的键值
VALUE key 0 2
he
END
stats //显示当前所有 Memcache 服务器运行的状态信息
STAT pid 12863 //memcached 启动的进程 ID
STAT uptime 4008 //到目前为止启动了多少秒
STAT time 1464713917 //Unix时间(从1970年1月1日开始统计的秒数)
STAT version 1.2.6 //memcached 的版本信息
STAT pointer_size 64 //当前操作系统的指针大小
STAT rusage_user 0.278957 //进程的累计用户时间
STAT rusage_system 0.371943 //进程的累计系统时间
STAT curr_items 1 //服务器当前存储的items数量
STAT total_items 2 //从服务器启动以后存储的items总数量
STAT bytes 79 //当前服务器存储items占用的字节数
STAT curr_connections 2 //当前的并发连接数
STAT total_connections 4 //总的连接数
STAT connection_structures 3 //服务器分配的连接构造数
STAT cmd_get 2 //执行 get 命令的次数
STAT cmd_set 2 //执行 set 命令的次数
STAT get_hits 2 //get 的命中次数
STAT get_misses 0 //get 的非命中数
STAT evictions 0 //为获取空闲内存而删除的 items 数
STAT bytes_read 98 //总读取字节数(请求字节数)
STAT bytes_written 97 //总发送字节数(结果字节数)
STAT limit_maxbytes 33554432 //允许使用的最大内存容量
STAT threads 1 //当前线程数
END
quit //退出
Connection closed by foreign host.
错误
Memcache 的协议的错误部分主要是三个错误提示之提示指令
数据保存指令
指令格式
<命令><键><标记><有效期><数据长度>
set key 0 60 10
服务器端的返回
标签:ip地址配置 大型 bin stat 集群 mysql数据库 deb 设置 mcrypt
原文地址:http://blog.51cto.com/13770206/2164928