Skip to content

Memcached Linux安装

安装前准备

1. 系统要求

  • 操作系统:支持主流Linux发行版,如CentOS 7/8、Ubuntu 18.04/20.04/22.04、Debian 9/10/11
  • 内存:根据业务需求配置,建议至少2GB
  • CPU:至少2核,推荐4核以上
  • 磁盘:基本不需要高速存储,普通SATA磁盘即可
  • 网络:千兆或万兆网卡

2. 依赖检查

Memcached依赖libevent库,安装前需要确保系统已安装或可以安装该库。

安装方法

1. 包管理器安装(推荐)

CentOS/RHEL

CentOS 7
bash
# 安装EPEL仓库
yum install -y epel-release

# 安装Memcached和libevent
yum install -y memcached libevent libevent-devel

# 启动Memcached服务
systemctl start memcached

# 设置开机自启
systemctl enable memcached

# 检查服务状态
systemctl status memcached
CentOS 8/RHEL 8
bash
# 安装Memcached和libevent
dnf install -y memcached libevent libevent-devel

# 启动Memcached服务
systemctl start memcached

# 设置开机自启
systemctl enable memcached

# 检查服务状态
systemctl status memcached

Ubuntu/Debian

bash
# 更新包列表
apt update

# 安装Memcached和libevent
apt install -y memcached libevent-2.1-7 libevent-dev

# 启动Memcached服务
systemctl start memcached

# 设置开机自启
systemctl enable memcached

# 检查服务状态
systemctl status memcached

2. 源码编译安装

如果需要安装特定版本或自定义编译选项,可以选择源码编译安装。

步骤1:安装依赖

CentOS/RHEL
bash
yum install -y gcc gcc-c++ make libevent libevent-devel
Ubuntu/Debian
bash
apt update
apt install -y build-essential libevent-dev

步骤2:下载源码

bash
# 创建工作目录
mkdir -p /usr/local/src/memcached
cd /usr/local/src/memcached

# 下载源码包(以1.6.22版本为例)
wget https://memcached.org/files/memcached-1.6.22.tar.gz

# 解压源码包
tar -zxvf memcached-1.6.22.tar.gz
cd memcached-1.6.22

步骤3:编译安装

bash
# 配置编译选项
./configure --prefix=/usr/local/memcached

# 编译
make -j$(nproc)

# 安装
make install

步骤4:创建系统服务

创建systemd服务文件:

bash
cat > /etc/systemd/system/memcached.service << EOF
[Unit]
Description=Memcached
After=network.target

[Service]
Type=simple
User=memcached
Group=memcached
ExecStart=/usr/local/memcached/bin/memcached -u memcached -p 11211 -m 64 -c 1024
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

创建memcached用户:

bash
useradd -r -s /sbin/nologin memcached

启动服务并设置开机自启:

bash
systemctl daemon-reload
systemctl start memcached
systemctl enable memcached
systemctl status memcached

配置Memcached

1. 配置文件位置

  • 包管理器安装:配置文件通常位于 /etc/sysconfig/memcached(CentOS/RHEL)或 /etc/memcached.conf(Ubuntu/Debian)
  • 源码编译安装:需要手动创建配置文件

2. 主要配置参数

CentOS/RHEL配置文件(/etc/sysconfig/memcached)

bash
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

Ubuntu/Debian配置文件(/etc/memcached.conf)

bash
# 监听端口
-p 11211

# 监听地址(默认监听所有地址)
-l 0.0.0.0

# 最大连接数
-c 1024

# 缓存大小(MB)
-m 64

# 运行用户
-u memcached

# 日志文件
logfile /var/log/memcached.log

# 详细程度(0-5)
-v

3. 常用配置选项

参数描述默认值
-p监听端口11211
-l监听地址0.0.0.0
-d以守护进程方式运行不启用
-u运行用户memcached
-m缓存大小(MB)64
-c最大连接数1024
-t工作线程数4
-fSlab增长因子1.25
-n初始Chunk大小(字节)48
-L启用大内存页支持不启用
-B协议类型(text/binary)text
-S启用SASL认证不启用
-tTLS证书文件路径不启用

4. 配置示例

生产环境配置(CentOS/RHEL)

bash
PORT="11211"
USER="memcached"
MAXCONN="2048"
CACHESIZE="2048"
OPTIONS="-l 192.168.1.100 -t 8 -f 1.1 -n 64"

生产环境配置(Ubuntu/Debian)

bash
-p 11211
-l 192.168.1.100
-c 2048
-m 2048
-u memcached
-t 8
-f 1.1
-n 64
logfile /var/log/memcached.log
-vv

启动和停止Memcached

1. 使用systemctl管理服务

bash
# 启动服务
systemctl start memcached

# 停止服务
systemctl stop memcached

# 重启服务
systemctl restart memcached

# 重新加载配置(仅当配置文件支持热重载时)
systemctl reload memcached

# 检查服务状态
systemctl status memcached

# 查看服务日志
journalctl -u memcached -f

2. 手动启动(仅用于测试)

bash
# 基本启动
memcached -u memcached -d

# 自定义配置启动
memcached -u memcached -d -p 11211 -m 2048 -c 2048 -l 192.168.1.100

验证安装

1. 检查进程

bash
# 查看Memcached进程
ps aux | grep memcached

# 查看监听端口
netstat -tlnp | grep 11211
# 或使用ss命令
ss -tlnp | grep 11211

2. 测试连接

使用telnet测试连接:

bash
# 连接Memcached
telnet 127.0.0.1 11211

# 测试SET命令
set test 0 3600 5
hello

# 测试GET命令
get test

# 退出连接
quit

使用memcached-tool测试:

bash
# 查看Memcached状态
memcached-tool 127.0.0.1:11211 stats

# 查看Slab分配情况
memcached-tool 127.0.0.1:11211 display

防火墙配置

1. 开放Memcached端口

CentOS/RHEL 7

bash
# 开放11211端口
firewall-cmd --permanent --add-port=11211/tcp

# 重新加载防火墙规则
firewall-cmd --reload

# 查看已开放的端口
firewall-cmd --list-ports

CentOS/RHEL 8/Ubuntu 20.04+/Debian 10+

bash
# 安装iptables(如果未安装)
apt install -y iptables iptables-persistent

# 开放11211端口
iptables -A INPUT -p tcp --dport 11211 -j ACCEPT

# 保存规则
netfilter-persistent save

2. 限制访问IP

为了安全起见,建议只允许特定IP访问Memcached:

使用firewalld

bash
# 只允许192.168.1.0/24网段访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="11211" accept'
firewall-cmd --reload

使用iptables

bash
# 只允许192.168.1.0/24网段访问
iptables -A INPUT -p tcp --dport 11211 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 11211 -j DROP
netfilter-persistent save

日志配置

1. 配置日志文件

CentOS/RHEL

修改/etc/sysconfig/memcached文件,添加日志配置:

bash
OPTIONS="-l 127.0.0.1 -v >> /var/log/memcached.log 2>&1"

Ubuntu/Debian

修改/etc/memcached.conf文件,添加日志配置:

bash
logfile /var/log/memcached.log
verbose

2. 日志轮转

创建日志轮转配置文件:

bash
cat > /etc/logrotate.d/memcached << EOF
/var/log/memcached.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 640 memcached memcached
    postrotate
        systemctl reload memcached > /dev/null 2>&1 || true
    endscript
}
EOF

性能优化

1. 系统参数优化

调整文件描述符限制

bash
# 修改/etc/security/limits.conf文件
cat >> /etc/security/limits.conf << EOF
memcached soft nofile 65535
memcached hard nofile 65535
EOF

优化TCP参数

bash
# 修改/etc/sysctl.conf文件
cat >> /etc/sysctl.conf << EOF
# 增加TCP连接队列长度
net.core.somaxconn = 65535

# 增加TCP最大连接数
net.ipv4.tcp_max_syn_backlog = 65535

# 减少TCP连接超时时间
net.ipv4.tcp_fin_timeout = 30

# 允许重用TIME_WAIT状态的连接
net.ipv4.tcp_tw_reuse = 1

# 增加TCP接收和发送缓冲区大小
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
EOF

# 应用系统参数
sysctl -p

2. Memcached参数优化

  • 增加缓存大小:根据业务需求调整-m参数
  • 调整工作线程数:根据CPU核心数调整-t参数,建议设置为CPU核心数的1-2倍
  • 优化Slab增长因子:根据数据大小分布调整-f参数
  • 启用大内存页:使用-L参数启用大内存页支持
  • 调整最大连接数:根据并发需求调整-c参数

常见问题及解决方案

1. Memcached启动失败

症状

systemctl status memcached显示Active: failed

解决方案

  • 检查配置文件语法错误
  • 检查端口是否被占用:netstat -tlnp | grep 11211
  • 检查用户权限:确保memcached用户存在且有权限访问相关目录
  • 查看日志文件:journalctl -u memcached -f

2. 无法连接到Memcached

症状

telnet 127.0.0.1 11211显示Connection refused

解决方案

  • 检查Memcached服务是否正在运行:systemctl status memcached
  • 检查监听地址和端口:确保配置文件中的-l参数正确
  • 检查防火墙设置:确保11211端口已开放
  • 检查SELinux设置:如果SELinux已启用,确保允许Memcached访问网络

3. Memcached性能不佳

症状

  • 响应时间长
  • 缓存命中率低
  • CPU或内存使用率高

解决方案

  • 优化Memcached配置参数
  • 调整系统参数
  • 增加Memcached节点数量
  • 优化数据大小和键设计
  • 检查网络连接质量

升级Memcached

1. 包管理器升级

CentOS/RHEL

bash
# 升级Memcached
yum update -y memcached

# 重启服务
systemctl restart memcached

Ubuntu/Debian

bash
# 更新包列表
apt update

# 升级Memcached
apt upgrade -y memcached

# 重启服务
systemctl restart memcached

2. 源码升级

bash
# 停止服务
systemctl stop memcached

# 下载新版本源码
cd /usr/local/src/memcached
wget https://memcached.org/files/memcached-1.6.23.tar.gz

# 解压并编译安装
tar -zxvf memcached-1.6.23.tar.gz
cd memcached-1.6.23
./configure --prefix=/usr/local/memcached
make -j$(nproc)
make install

# 启动服务
systemctl start memcached

# 检查版本
/usr/local/memcached/bin/memcached -V

卸载Memcached

1. 包管理器卸载

CentOS/RHEL

bash
# 停止服务
systemctl stop memcached

# 禁用开机自启
systemctl disable memcached

# 卸载Memcached
yum remove -y memcached

# 删除配置文件
rm -f /etc/sysconfig/memcached

Ubuntu/Debian

bash
# 停止服务
systemctl stop memcached

# 禁用开机自启
systemctl disable memcached

# 卸载Memcached
apt purge -y memcached

# 删除配置文件
rm -f /etc/memcached.conf

2. 源码卸载

bash
# 停止服务
systemctl stop memcached

# 禁用开机自启
systemctl disable memcached

# 删除服务文件
rm -f /etc/systemd/system/memcached.service

# 删除安装目录
rm -rf /usr/local/memcached

# 删除源码目录
rm -rf /usr/local/src/memcached

# 删除用户
userdel -r memcached

常见问题(FAQ)

Q1: 如何查看Memcached的版本?

A1: 可以使用以下命令查看Memcached的版本:

bash
# 包管理器安装
memcached -V

# 源码编译安装
/usr/local/memcached/bin/memcached -V

Q2: 如何修改Memcached的监听端口?

A2: 修改配置文件中的-p参数,然后重启服务:

  • CentOS/RHEL:修改/etc/sysconfig/memcached文件中的PORT参数
  • Ubuntu/Debian:修改/etc/memcached.conf文件中的-p参数

Q3: 如何限制Memcached只监听本地地址?

A3: 修改配置文件中的-l参数为127.0.0.1,然后重启服务:

  • CentOS/RHEL:修改/etc/sysconfig/memcached文件中的OPTIONS参数
  • Ubuntu/Debian:修改/etc/memcached.conf文件中的-l参数

Q4: 如何增加Memcached的缓存大小?

A4: 修改配置文件中的-m参数,然后重启服务:

  • CentOS/RHEL:修改/etc/sysconfig/memcached文件中的CACHESIZE参数
  • Ubuntu/Debian:修改/etc/memcached.conf文件中的-m参数

Q5: 如何查看Memcached的运行状态?

A5: 可以使用以下命令查看Memcached的运行状态:

bash
# 查看服务状态
systemctl status memcached

# 查看Memcached统计信息
memcached-tool 127.0.0.1:11211 stats

# 查看Slab分配情况
memcached-tool 127.0.0.1:11211 display

Q6: 如何配置Memcached以守护进程方式运行?

A6: 在配置文件中添加-d参数:

  • CentOS/RHEL:修改/etc/sysconfig/memcached文件中的OPTIONS参数
  • Ubuntu/Debian:修改/etc/memcached.conf文件,添加-d参数

Q7: 如何配置Memcached使用SASL认证?

A7: 配置Memcached使用SASL认证的步骤如下:

  1. 安装SASL依赖
  2. 配置SASL用户和密码
  3. 修改Memcached配置,添加-S参数启用SASL认证
  4. 重启Memcached服务

Q8: 如何监控Memcached的性能?

A8: 可以使用以下工具监控Memcached的性能:

  • memcached-tool:Memcached自带的监控工具
  • Prometheus + Grafana:全面监控和可视化
  • Zabbix:系统级监控和告警
  • Nagios:网络监控和告警

Q9: 如何优化Memcached的性能?

A9: 优化Memcached性能的方法包括:

  • 调整Memcached配置参数,如缓存大小、工作线程数、Slab增长因子等
  • 优化系统参数,如文件描述符限制、TCP参数等
  • 优化数据大小和键设计
  • 增加Memcached节点数量
  • 使用高效的客户端库

Q10: 如何备份Memcached的数据?

A10: Memcached本身不支持数据持久化,可以通过以下方法备份数据:

  • 使用第三方工具,如memcached-dump
  • 在应用层实现数据备份,定期将数据写入磁盘
  • 考虑使用Redis,它支持多种持久化方式