Ubuntu 安装 Memcached

Summary: Author: 张亚飞 | Read Time: 4 minute read | Published: 2016-08-08
Filed under Categories: DevOpsTags: 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

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/

  • 所以找到了原因,解决方法就很简单了.也有多种方法:
  1. 做一个软连接到上面的随便一个 search path 中的目录都是可以的
* [root@localhost bin]# ln -s /usr/local/lib/libevent.so /usr/lib/libevent-2.0.so.5
* [root@localhost bin]# memcached -help       ======> 验证是否已经解决:
...
输出略
...
  1. 在编译 libevent 的时候,指定相关目录:
* [root@localhost libevent]# ./configure --help
...
输出略
...
* [root@localhost libevent]# ./configure --libdir=/usr/lib
  1. 修改环境变量 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

  1. 新建 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
  1. 复制通用脚本文件到memcached安装目录
cp -r /opt/data/memcached-1.4.29/scripts /usr/local/memcached/
cd /usr/local/memcached/scripts/
  1. 配置 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";
  1. 配置启动脚本

进入源码目录

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
  1. 设置启动项
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

Cor-Ethan, the beverage → www.iirii.com