Memcached之非关系数据库

1 NoSQL介绍

NoSQL是对 Not Only SQL、非传统关系型数据库的统称。

NoSQL一词诞生于1998年,2009年这个词汇被再次提出指非关系型、分布式、不提供ACID的数据库设计模式。

随着互联网时代的到来,数据爆发式增长,数据库技术发展日新月异,要适应新的业务需求。

而随着移动互联网、物联网的到来,大数据的技术中NoSQL也同样重要。

NoSQL 分类:

① Key-value Store k/v数据库

性能好 O(1) , 如: redis、memcached
② Document Store 文档数据库

mongodb、CouchDB
③ Column Store 列存数据库,Column-Oriented DB

HBase、Cassandra,大数据领域应用广泛
④ Graph DB 图数据库

Neo4j
⑤ Time Series 时序数据库

InfluxDB、Prometheus

2. Memcached

Memcached 只支持能序列化的数据类型,不支持持久化,基于Key-Value的内存缓存系统。memcached 虽然没有像redis所具备的数据持久化功能,比如RDB和AOF都没有,但是可以通过做集群同步的方式,让各memcached服务器的数据进行同步,从而实现数据的一致性,即保证各memcached的数据是一样的,即使有任何一台 memcached 发生故障,只要集群中有一台 memcached 可用就不会出现数据丢失,当其他memcached 重新加入到集群的时候,可以自动从有数据的memcached 当中自动获取数据并提供服务。

Memcached存储数据时,Memcached会去申请1MB的内存,把该块内存称为一个slab,也称为一个page

Memcached 支持多种开发语言,包括:JAVA,C,Python,PHP,C#,Ruby,Perl等

Memcached 官网:memcached - a distributed memory object caching system

3. Memcached 和 Redis 比较

相似之处:

① 内存存储:Memcached 和 Redis 都是将数据存储在内存中,以提供快速的数据访问。

② 键值存储:Memcached 和 Redis 都是使用键值对的方式来存储数据。

③ 分布式:Memcached 和 Redis 都支持分布式存储,可以在多台服务器上运行。

不同之处:

关系型数据库:数据存放在硬盘,调度数据速率慢;

非关系型数据库:数据存放在内存,调度数据速率快。

4. Memcached 工作机制

① 数据存储:Memcached 将数据存储在内存中,以提供快速的数据访问。当应用程序需要访问数据时,它首先检查内存中是否有这个数据。如果内存中有这个数据,应用程序就可以直接从内存中获取数据,而不需要访问数据库。

② 数据分片:Memcached 将数据分片存储在多台服务器上。这样可以提高系统的可扩展性和性能。例如,如果你有 10 GB 的数据,你可以将这 10 GB 的数据分片存储在 10 台服务器上,每台服务器存储 1 GB 的数据。

③ 数据访问:当应用程序需要访问数据时,它首先计算数据的键,然后根据这个键选择一个服务器。然后,应用程序就可以直接从这个服务器获取数据。

④ 数据更新:当应用程序更新数据时,它首先计算数据的键,然后根据这个键选择一个服务器。然后,应用程序就可以直接在这个服务器上更新数据。

⑤ 数据失效:Memcached 有一个失效机制,当数据过期时,Memcached 会自动删除这个数据。这样可以避免内存被无用的数据占满。

虽然 Memcached 可以提供快速的数据访问,但它也有一些限制。例如,由于数据存储在内存中,所以 Memcached 的存储空间是有限的。另外,由于 Memcached 是一个分布式系统,所以它可能会受到网络延迟的影响。

5 安装和启动

Install · memcached/memcached Wiki · GitHub

5.1 yum 安装

[root@mcb-11-4 ~]# yum info    memcached
[root@mcb-11-4 ~]# systemctl stop firewalld
[root@mcb-11-4 ~]# setenforce 0
[root@mcb-11-4 ~]# yum install memcached -y
[root@mcb-11-4 ~]# vim /etc/sysconfig/memcached
PORT="11211"     #监听端口
USER="memcached" #启动用户
MAXCONN="1024"  #最大连接数
CACHESIZE="64"  #最大使用内存
OPTIONS="" #其他选项
[root@mcb-11-4 ~]# id memcached
uid=990(memcached) gid=985(memcached) 组=985(memcached)
[root@mcb-11-4 ~]# systemctl start memcached
[root@mcb-11-4 ~]# ss -natul
 

客户机
[root@mcb-11-8 ~]#telnet 192.168.11.4 11211
Trying 192.168.11.4...
Connected to 192.168.11.4.
Escape character is '^]'.
set name 1 10 4
abcd
STORED
get name
END
get name
END
quit
Connection closed by foreign host.

5.2 编译安装

[root@centos7 ~]#yum -y install gcc libevent-devel
[root@centos7 ~]#wget http://memcached.org/files/memcached-1.6.6.tar.gz
[root@centos7 ~]#tar xvf memcached-1.6.6.tar.gz
[root@centos7 ~]#cd memcached-1.6.6/
[root@centos7 memcached-1.6.6]#./configure --prefix=/apps/memcached
[root@centos7 memcached-1.6.6]#make && make install
[root@mcb-11-8 memcached-1.6.6]#ls /apps/memcached/
bin  include  share
[root@mcb-11-8 memcached-1.6.6]#ls /apps/memcached/bin
memcached
[root@mcb-11-8 memcached-1.6.6]#ln -s /apps/memcached/bin/memcached   /usr/bin
[root@mcb-11-8 memcached-1.6.6]#useradd -r -s /sbin/nologin memcached
#-r 随机类型;-s  shell类型
[root@mcb-11-8 memcached-1.6.6]#cat >    /etc/sysconfig/memcached    << eof
> PORT="11211"
> USER="memcached"
> MAXCONN="1024"
> CACHESIZE="64"
> OPTIONS=""
> eof
[root@mcb-11-8 memcached-1.6.6]#cat /etc/sysconfig/memcached 
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

单引号不识别变量,
[root@mcb-11-8 memcached-1.6.6]#cat  > /lib/systemd/system/memcached.service    << eof
> [Unit]
> Description=memcached daemon
> Before=httpd.service
> After=network.target
> [Service]
> EnvironmentFile=/etc/sysconfig/memcached
> ExecStart=/apps/memcached/bin/memcached -p  \${PORT} -u \${USER} -m \${CACHESIZE} -c \${MAXCONN} \$OPTIONS
> [Install]
> WantedBy=multi-user.target
> eof
[root@mcb-11-8 memcached-1.6.6]#systemctl start memcached
[root@mcb-11-8 memcached-1.6.6]#systemctl daemon-reload 
[root@mcb-11-8 memcached-1.6.6]#systemctl status memcached.service 
● memcached.service - memcached daemon
   Loaded: loaded (/usr/lib/systemd/system/memcached.service; disabled; vendor preset: disabled)
   Active: active (running) since 四 2024-03-14 17:49:45 CST; 25s ago
[root@mcb-11-8 memcached-1.6.6]#systemctl start memcached
[root@mcb-11-8 memcached-1.6.6]#systemctl stop memcached
[root@mcb-11-8 memcached-1.6.6]#systemctl status memcached.service 
● memcached.service - memcached daemon
   Loaded: loaded (/usr/lib/systemd/system/memcached.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

[root@mcb-11-8 memcached-1.6.6]#memcached -u memcached -m 1024 -c 65536 -f 2 -vv 
slab class   1: chunk size        96 perslab   10922
[root@mcb-11-8 memcached-1.6.6]#free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        894M        359M         10M        2.5G        2.5G
Swap:          4.0G          0B        4.0G

增长因子的改变

#默认前台执行
[root@centos7 ~]#memcached -u memcached -m 1024 -c 65536 -f 2 -vv 

#以台方式执行
[root@centos7 ~]#memcached -u memcached -m 1024 -c 65536 -d

5.3 memcached 启动程序说明

修改memcached 运行参数,可以使用下面的选项修改/etc/sysconfig/memcached文件

memcached 常见选项

-u username memcached运行的用户身份,必须普通用户
-p 绑定的端口,默认11211
-m num 最大内存,单位MB,默认64MB
-c num 最大连接数,缺省1024
-d 守护进程方式运行
-f 增长因子Growth Factor,默认1.25
-v 详细信息,-vv能看到详细信息
-M 使用内存直到耗尽,不许LRU
-U 设置UDP监听端口,0表示禁用UDP

6 使用 memcached

6.1 memcached 开发库和工具

与memcached通信的不同语言的连接器。libmemcached提供了C库和命令行工具。

范例:

[root@mcb-11-8 memcached-1.6.6]#yum install  libmemcached -y 
 

 memping 检测连接服务器

[root@mcb-11-8 memcached-1.6.6]#memping --help

6.2 memcached 操作命令

memcached 操作命令

[root@centos7 ~]#cat /usr/share/doc/memcached

  • set

  • add

  • get

  • delete

7 memcached集群部署架构

7.1 基于 magent 的部署架构

项目站点:https://code.google.com/archive/p/memagent/

此项目过于陈旧,且不稳定,当前已经废弃

7.2 Repcached 实现原理

项目站点:repcached - add data replication feature to memcached

7.3 简化后的部署架构

magent已经有很长时间没有更新,因此可以不再使用magent,直接通过负载均衡连接到memcached,仍然有两台memcached做高可用,repcached版本的memcached之间会自动同步数据,以保持数据一致性,即使其中的一台memcached故障也不影响业务正常运行,故障的memcached修复上线后再自动从另外一台同步数据即可保持数据一致性。

7.4 部署repcached

[root@mcb-11-8 ~]#systemctl stop firewalld
[root@mcb-11-8 ~]#setenforce 0
setenforce: SELinux is disabled
[root@mcb-11-8 ~]#cd /data
[root@mcb-11-8 data]#ls
[root@mcb-11-8 data]#rz -E
rz waiting to receive.
[root@mcb-11-8 data]#ls
memcached-1.2.8-repcached-2.2.1.tar.gz
[root@mcb-11-8 data]#ls
memcached-1.2.8-repcached-2.2.1.tar.gz
[root@mcb-11-8 data]#tar xf memcached-1.2.8-repcached-2.2.1.tar.gz 
[root@mcb-11-8 data]#ls
memcached-1.2.8-repcached-2.2.1  memcached-1.2.8-repcached-2.2.1.tar.gz
[root@mcb-11-8 data]#

[root@mcb-11-4 ~]# systemctl stop firewalld
[root@mcb-11-4 ~]# setenforce 0
[root@mcb-11-4 ~]# cd /data
-bash: cd: /data: 没有那个文件或目录
[root@mcb-11-4 ~]# mkdir /data
[root@mcb-11-4 ~]# cd /data
[root@mcb-11-4 data]# 
[root@mcb-11-8 memcached-1.2.8-repcached-2.2.1]#yum -y install gcc libevent libevent-devel
[root@mcb-11-4 data]# wget  https://jaist.dl.sourceforge.net/project/repcached/repcached/2.2.1-1.2.8/memcached-1.2.8-repcached-2.2.1.tar.gz
--2024-03-14 18:59:49--  https://jaist.dl.sourceforge.net/project/repcached/repcached/2.2.1-1.2.8/memcached-1.2.8-repcached-2.2.1.tar.gz
[root@mcb-11-8 data]#ls
memcached-1.2.8-repcached-2.2.1.tar.gz
[root@mcb-11-8 data]#tar xf memcached-1.2.8-repcached-2.2.1.tar.gz 
[root@mcb-11-8 data]#ls
memcached-1.2.8-repcached-2.2.1  memcached-1.2.8-repcached-2.2.1.tar.gz
[root@mcb-11-8 data]#cd memcached-1.2.8-repcached-2.2.1
[root@mcb-11-8 memcached-1.2.8-repcached-2.2.1]#ls
aclocal.m4           compile       daemon.c     Makefile.in         NEWS           stats.c
assoc.c              config.guess  depcomp      memcached.c         README         stats.h
assoc.h              config.h.in   doc          memcached_dtrace.d  replication.c  t
AUTHORS              config.sub    install-sh   memcached_dtrace.h  replication.h  thread.c
AUTHORS.repcached    configure     items.c      memcached.h         scripts        TODO
ChangeLog            configure.ac  items.h      memcached.spec      slabs.c        t.rep
ChangeLog.repcached  COPYING       Makefile.am  missing             slabs.h
[root@mcb-11-8 memcached-1.2.8-repcached-2.2.1]#./configure --prefix=/apps/repcached --enable-replication

[root@centos7 memcached-1.2.8-repcached-2.2.1]# vim memcached.c
56 #ifndef IOV_MAX
57 #if defined(__FreeBSD__) || defined(__APPLE__)
58 # define IOV_MAX 1024
59 #endif
60 #endif

#改为如下内容,即删除原有的原第57,59行
56 #ifndef IOV_MAX
57 # define IOV_MAX 1024
58 #endif

 

再次编译安装:

[root@mcb-11-8 memcached-1.2.8-repcached-2.2.1]#vim memcached.c
[root@mcb-11-8 memcached-1.2.8-repcached-2.2.1]#make
[root@mcb-11-8 memcached-1.2.8-repcached-2.2.1]#make install
做软连接
[root@mcb-11-8 ~]#ln -s /apps/repcached/bin/memcached  /usr/bin/

7.6 启动 memcached

7.6.1 server1 相关操作
[root@mcb-11-8 ~]#useradd -r -s /sbin/nologin memcached
[root@mcb-11-8 ~]#memcached -d -m 1024 -p 11211 -u memcached -c 2048 -x 192.168.11.4
[root@mcb-11-8 ~]#ss -natl
State      Recv-Q Send-Q     Local Address:Port                    Peer Address:Port              
LISTEN     0      128                    *:11211                              *:*                  
LISTEN     0      128                    *:11212                              *:*                  
LISTEN     0      128                    *:111                                *:*                  
LISTEN     0      5          192.168.122.1:53                                 *:*                  
LISTEN     0      128                    *:22                                 *:*                  
LISTEN     0      128            127.0.0.1:631                                *:*                  
LISTEN     0      100            127.0.0.1:25                                 *:*                  
LISTEN     0      128            127.0.0.1:6010                               *:*                  
LISTEN     0      128            127.0.0.1:6011                               *:*                  
LISTEN     0      128                   :::11211                             :::*
[root@mcb-11-8 ~]#rsync -a /apps   192.168.11.4:/
The authenticity of host '192.168.11.4 (192.168.11.4)' can't be established.
ECDSA key fingerprint is SHA256:f5CWB5B1Xrf1hEtCK5pFcG+mmkQv+skC9fe3Kaa7B9w.
ECDSA key fingerprint is MD5:d0:e4:b1:5f:db:31:26:bf:ec:b1:45:27:37:06:f6:95.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.11.4' (ECDSA) to the list of known hosts.
root@192.168.11.4's password: #密码123
[root@mcb-11-8 ~]#
        

 

[root@mcb-11-4 data]# ln -s /apps/repcached/bin/memcached  /usr/bin/
ln: 无法创建符号链接"/usr/bin/memcached": 文件已存在
[root@mcb-11-4 data]# ls
memcached-1.2.8-repcached-2.2.1.tar.gz
[root@mcb-11-4 data]# useradd -r -s /sbin/nologin memcached
useradd:用户“memcached”已存在
[root@mcb-11-4 data]# yum -y install gcc libevent libevent-devel
已加载插件:fastestmirror, langpacks
[root@mcb-11-4 data]# memcached -d -m 1024 -p 11211 -u memcached -c 2048 -x 192.168.11.8
[root@mcb-11-4 data]# ss -natl | grep 11211
LISTEN     0      128          *:11211                    *:*                  
LISTEN     0      128         :::11211                   :::*    

 注:主从备用,一次编译,然后拷回来就行

用客户机测试:就能证明在同步

 高可用,haproxy做四层代理 !

  • 21
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值