Ubuntu 安装 Memcached
Summary: Author: 张亚飞 | Read Time: 4 minute read | Published: 2016-08-08
Filed under
—
Categories:
DevOps
—
Tags:
Linux,
Server,
Software,
DevOps,
Ubuntu 安装 Memcached
- 使用命令安装 Memcached
sudo apt update
sudo apt install memcached
- 测试 Memcached 安装进展情况
echo "stats settings" | nc localhost 11211
卸载以上 apt 安装的 memcached
sudo apt remove memcached =======> 移除 memcached 服务软件
echo "stats settings" | nc localhost 11211 =======> 测试...
sudo apt remove --auto-remove memcached =======> 清空所有依赖
sudo apt purge memcached =======> 清除所有的配置文件及相关 *memcache* 用户
源码编译安装最新 memcached
安装memcached依赖 libevent
Libevent是一个异步事件处理软件函式库
//sudo git clone https://github.com/libevent/libevent.git
//sudo wget https://github.com/libevent/libevent/archive/release-2.0.22-stable.tar.gz
sudo wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
sudo tar -zxvf libevent-2.0.22-stable.tar.gz
cd libevent-2.0.22-stable
./configure
sudo make
sudo make install
完成后将 libevent* 库文件安装到 /usr/local/lib/ 下,也可以检查 /lib/ /usr/lib/ 等目录
注意,这里创建 memcached 搜索 libevent 的软连接,防止启动memcached失败
sudo ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5
- 源码编译安装 memcached
如果系统已经通过 apt install memecached 安装了 memcached 服务,首先按上步卸载 memcached 软件及相关依赖
wget https://memcached.org/files/memcached-1.4.33.tar.gz
tar -zxvf memcached-1.x.x.tar.gz
cd memcached-1.x.x
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/lib/
make
sudo make install
./configure 不加参数 –prefix=/usr/local/memcached 完成编译后将会安装相关 memcached 到以下目录
/usr/local/bin/memcached
/usr/local/include/memcached
./configure 加参数 –prefix=/usr/local/memcached 完成编译后将会安装相关 memcached 到以下目录 – 统一使用这种方式编译
/usr/local/memcached/bin/memcached
/usr/local/memcached/include/memcached
- 出现如下依赖错误
checking for libevent directory... configure: error: libevent is required. You can get it from http://www.monkey.org/~provos/libevent/
If it's already installed, specify its path using --with-libevent=/dir/
表示 memcached 依赖 libevent
- 启动 或 编译错误
memcached: error while loading shared libraries:libevent-2.0.so.5: cannot open shared object file: No such file or directory
首先查看 libevent 在哪里
>whereis libevent
libevent: /usr/local/lib/libevent.la /usr/local/lib/libevent.so /usr/local/lib/libevent.a
然后,再看 memcached 从哪里找它
> LD_DEBUG=libs memcached -v 2>&1 > /dev/null | less
可以看到:是/usr/lib/libevent-2.0.so.5,所以,创建软链:
> sudo ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5
再次启动,问题解决.
- 其它备注释疑
查看 memcached 的依赖:
* [root@localhost bin]# ldd /usr/local/memcached/bin/memcached
linux-gate.so.1 => (0x00c8d000)
libevent-2.0.so.5 => not found
librt.so.1 => /lib/librt.so.1 (0x00720000)
libpthread.so.0 => /lib/libpthread.so.0 (0x006fc000)
libc.so.6 => /lib/libc.so.6 (0x00564000)
/lib/ld-linux.so.2 (0x0053e000)
发现依赖的 libevent-2.0.so.5 => not found 没有找到.
查看 libevent 如何寻找依赖:
* [root@localhost bin]# LD_DEBUG=libs /usr/local/memcached/bin/memcached -v
10071: find library=libevent-2.0.so.5 [0]; searching
10071: search cache=/etc/ld.so.cache
10071: search path=/lib/tls/i686/sse2:/lib/tls/i686:/lib/tls/sse2:/lib/tls:/lib/i686/sse2:/lib/i686:/lib/sse2:/lib:/usr/lib/tls/i686/sse2:/usr/lib/tls/i686:/usr/lib/tls/sse2:/usr/lib/tls:/usr/lib/i686/sse2:/usr/lib/i686:/usr/lib/sse2:/usr/lib (system search path)
10071: trying file=/lib/tls/i686/sse2/libevent-2.0.so.5
10071: trying file=/lib/tls/i686/libevent-2.0.so.5
10071: trying file=/lib/tls/sse2/libevent-2.0.so.5
10071: trying file=/lib/tls/libevent-2.0.so.5
10071: trying file=/lib/i686/sse2/libevent-2.0.so.5
10071: trying file=/lib/i686/libevent-2.0.so.5
10071: trying file=/lib/sse2/libevent-2.0.so.5
10071: trying file=/lib/libevent-2.0.so.5
10071: trying file=/usr/lib/tls/i686/sse2/libevent-2.0.so.5
10071: trying file=/usr/lib/tls/i686/libevent-2.0.so.5
10071: trying file=/usr/lib/tls/sse2/libevent-2.0.so.5
10071: trying file=/usr/lib/tls/libevent-2.0.so.5
10071: trying file=/usr/lib/i686/sse2/libevent-2.0.so.5
10071: trying file=/usr/lib/i686/libevent-2.0.so.5
10071: trying file=/usr/lib/sse2/libevent-2.0.so.5
10071: trying file=/usr/lib/libevent-2.0.so.5
系统寻找 lib 的路径,中没有包含:/usr/local/lib/
- 所以找到了原因,解决方法就很简单了.也有多种方法:
- 做一个软连接到上面的随便一个 search path 中的目录都是可以的
* [root@localhost bin]# ln -s /usr/local/lib/libevent.so /usr/lib/libevent-2.0.so.5
* [root@localhost bin]# memcached -help ======> 验证是否已经解决:
...
输出略
...
- 在编译 libevent 的时候,指定相关目录:
* [root@localhost libevent]# ./configure --help
...
输出略
...
* [root@localhost libevent]# ./configure --libdir=/usr/lib
- 修改环境变量 LD_LIBRARY_PATH,将 /usr/local/lib 包含进去.但是该方法一般不推荐这样做.
Memcached 常用命令及日常管理
通过命令行启动,无需配置文件 /etc/memcached.conf
sudo /usr/local/memcached/bin/memcached -d -m 64 -u root -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
参数说明
-d 选项是启动一个守护进程, -m 是分配给Memcache使用的内存数量,单位是MB,我这里是64MB, -u 是运行Memcache的用户,我这里是root,也可以是nobody -l 是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址 127.0.0.1, -p 是设置Memcache监听的端口,我这里设置了 11211,最好是1024以上的端口, -c 选项是最大运行的并发连接数,默认是1024,按照你服务器的负载量来设定, -P 是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid
关闭
kill 'cat /tmp/memcached.pid'
- 测试
telnet 127.0.0.1 11211
- 基本协议
set key1 0 180 3
abc
STORED
add key1 0 180 3
xyz
NOT_STORED
get key1
VALUE key1 0 3
abc
END
replace key1 0 180 3
xyz
STORED
get key1
VALUE key1 0 3
xyz
END
delete key1
DELETED
自动启动配置
配置启动脚本 存入 /etc/init.d/memcached
- 新建 vim /etc/memcached.conf
#cache memory
-m 128
#listening host
-l 127.0.0.1
#listening port
-p 11211
#running user
-u root
#run as a daemon
-d
#pid file path
-P /usr/local/memcached/memcached.pid
#be very verbose
-v
-vv
-vvv
#log
logfile /usr/local/memcached/logs/memcached.log
- 复制通用脚本文件到memcached安装目录
cp -r /opt/data/memcached-1.4.29/scripts /usr/local/memcached/
cd /usr/local/memcached/scripts/
- 配置 start 脚本
修改 /usr/local/memcached/scripts/start-memcached 并复制到 /usr/local/memcached/scripts/ 下
sudo vim /usr/local/memcached/scripts/start-memcached
my $params; my $etchandle; my $etcfile = "/etc/memcached.conf";
# This script assumes that memcached is located at /usr/bin/memcached, and
# that the pidfile is writable at /var/run/memcached.pid
my $memcached = "/usr/local/memcached/bin/memcached";
my $pidfile = "/var/run/memcached.pid";
- 配置启动脚本
进入源码目录
sudo vim /usr/local/memcached/scripts/memcached-init
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/memcached/bin/memcached
DAEMONNAME=memcached
DAEMONBOOTSTRAP=/usr/local/memcached/scripts/start-memcached
DESC=memcached
cp /usr/local/memcached/scripts/memcached-init /etc/init.d/memcached
- 设置启动项
update-rc.d memcached defaults
以下命令-设置启动项现在默认不支持已弃用
chkconfig --add memcached
chkconfig --level 235 memcached on
测试使用
chkconfig --list | grep mem
/etc/rc.d/init.d/memcached start
/etc/rc.d/init.d/memcached stop
/etc/rc.d/init.d/memcached restart
或
service memcached start
service memcached stop
service memcached restart
Comments