memcached 高性能内存对象缓存

  • memcached 高性能内存对象缓存

    • memcache是一款开源的高性能分布式内存对象缓存系统,常用于做大型动态web服务器的中间件缓存。

    • mamcached做web服务的中间缓存示意图

      • 当web服务器接收到请求需要处理动态页面元素时,通常要去数据库调用数据,但是通过memcached-api接口程序不去直接访问数据库,而去访问mamcached,再由memcached去访问数据库获取数据,获得到数据后自己缓存一分,在发送给web服务器一份,下次再进行通向的访问就不需要访问数据库,从而实现降低数据库的io压力。

    • memcached的存储数据方式

      • slab allocation

        • 按组分配:每次先分配一个slab,大小相当于一个1M,在1M的这个大小内划分出等大小的chunk,该方法有效的解决了内存碎片问题,但也会因为不满足chunk的大小而造成空间浪费。

        • slab 按。。。分片

        • chunk 块

    • memcached的数据过期方式:随着数据越来越多内存不足的情况下,会清理一些数据。依据过期条件

      • LRU:最近最少使用的记录,会被清理

      • laxzy expiration:惰性过期,用get查看记录时间,从而决定是否过期。

    • memcached分布式缓存架构

      • 每个memcached独立存在,数据分配根据路由算法选择存储的memcached。读取数据时根据保存时的路由算法选择相同的服务器来读取数据,将memcached做一个互相复制,可以确保能读取到数据。路由算法由api接口指定

        • 路由算法

          • 求余数hash算法

            • 将key做hash运算得到一个整数,再进行哈希算法根据余数进行路由,这种方法简单,但只适合数据更改不太频繁的场景下,节点的变动也会有影响。

          • 一致性hash算法

            • 该算法适合动态环境,原理是按照hash算法把对应的key通过hash运算后映射成一个首尾相闭合的循坏,再把节点服务器也通过这种方法也映射到环中,顺时针计算将对象存储到离自己最近的机器中。

    • memcached部署

      • 单节点的memcached部署

        • 一台做memcached服务器,一台做lamp应用程序测试,宿主机用来访问验证。

        • 安装过程

          • 准备前奏

            • 处理内核安全机制与防火墙

            • 安装gcc

          • 源码安装memcached

            • 安装依赖工具

              • libevent

                • libevent是一款基于C语言编写的,轻量级的,开源的,高性能事件通知库,常用于构建高性能网络服务器,对高并发有很好的抗压能力。可移植性强。

                • 本案例以libevent-2.18源码包为例

                  • 拉取到源码包后进行解压编译安装

                    • 只需要在配置时指定安装路径,其他一切照常即可。

                    • ./configure --prefix=/usr/local/libevent

            • 本案例以memcached-1.5.1为例

            • 在配置时指定配置参数

              • ./configure \ --prefix=/usr/local/memcached \ --with-libevent=/usr/local/libevent

                • 一个安装路径,一个指定libevent的安装路径。

            • 编译与编译安装照常

            • 可以编写memcached的服务控制脚本

              • #!/bin/bash CMD="/usr/local/memcached/bin/memcached" start(){ $CMD -d -m 128 -u root } stop(){ killall memcached; } ACTION=$1 case $ACTION in 'start') start;; 'stop') stop;; 'restart') stop sleep 2 start;; *) echo 'Usage:{start|stop|restart}' esac

              • 测时前检查psmisc安装包是否安装,否则killall命令无法使用

              • 赋予该脚本执行权,就可以利用该脚本进行控制

            • 进行启动验证,查看是否监听了11211端口

          • 部署memcached api客户端

            • 搭建web网站,快速部署

              • 需要利用网络资源

              • yum -y install httpd mariadb mariadb-server php php-devel php-mysql

              • 之后启动相关服务

                • httpd

                • mariadb

                • 设置数据库密码

                  • mysqladmin -u root password 'pwd123'

              • 编写php测试网页检查php能否正常工作

            • 源码安装libmemcached

              • 该软件提供了api的接口,以libmemcached1.0.18为例。

              • 配置参数

                • ./configure \ --prefix=/usr/local/libmemcached \ --with-memcached=/usr/local/memcached

                  • 第二条指定了memcached扩展的位置

            • 源码包安装memcached扩展

              • 本案例以memcached2.2.0为例

                • 安装安装编译环境

                  • zlib zlib-devel

                • 解压进入cd目录

                  • memcached源码包本身不带配置项需要借用php工具生成对应的配置文件

                  • /usr/bin/phpize

                    • 该目录为yum方式安装的php工具的路径,如果是源码包安装通常会在/usr/local下的php安装目录中。

                    • 该命令需要autoconf软件包的支持,会在当前目录下生成对应的配置脚本.

                  • 生成配置文件后就可以进行配置了

                    • ./configure --with-php-config=/usr/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached --disable-memcached-sasl --with-zlib-dir

                      • --with-php-config=/usr/bin/php-config

                        • 指定php配置文件的路径

                      • --with-libmemcached-dir=/usr/local/libmemcached

                        • 指定libmemcached的位置

                      • --disable-memcached-sasl

                        • 禁用sasl认证机制

                          • 1.SASL全称Simple Authentication and Security Layer,是一种用来扩充C/S模式验证能力的机制。简单来说SASL是一个胶合(glue)库,通过这个库把应用层与形式多样的认证系统整合在一起。这有点类似于 PAM,但是后者是认证方式,决定什么人可以访问什么服务,而SASL是认证过程,侧重于信任建立过程,这个过程可以调用PAM来建立信任关系。在这里Memcached就是上面提到的应用层,具体的认证交给SASL库,SASL会根据相应的认证机制来完成验证功能。

                      • --with-zlib-dir

                        • 指定压缩函数库的位置,yum装的不需要指定路径,可以为空。

                  • 配置后进行编译安装,如果php是7的版本,编译安装会报错。

            • 配置php让其支持memcached组件

              • yum安装的的配置文件位置/etc/php.ini

                • 添加一行语句重启httpd即可

                  • extension=memcached.so

              • 如果是源码包安装的需要额外指定路径

                • extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-zts-20121212/"

            • 重启httpd之后通过phpinfo可以查看是否开启了memcached的扩展模块。

            • 测试memcached-API功能

              • 在web'服务器网页文档目录下编写测试文档

                • <?php $memcache = new Memcached(); $memcache->addServer('192.168.10.101', 11211); $memcache->set('key', 'Memcache test successful!', 0, 60); $result = $memcache->get('key'); unset($memcache); echo $result; ?>

                • 最后访问时出现Memcache test successful!,表示api接口成功。

          • memcached作为非关系型数据库的基础操作

            • memcached本身没提供入口工具需要用telnet进行访问,需要下载。

            • 添加键值对

              • add 键名 0 0 8 值

                • 出现STORED表示存储成功

                • 第一个0表示标记位 ,例如压缩或加密,通常为0

                • 第二个0表示过期时间,为0表示永不过期,单位m 8表示值的字符长度,注意必须一样,少/多都不行。

                • 回车后输入值

            • 查看键值对

              • get 键名

            • 查看键名的更新因子

              • gets 键名

                • 通常最后一位数字表示更新因子

            • 更新键值

              • set 键名 0 0 8

            • 清除一条键值对

              • delete 键名

            • 键名重新复制

              • cas 键名 0 0 8 更新因子数

            • 追加数据

              • append 键名 0 0 追加字节数

            • 清除所有数据

              • flush_all

            • 查看状态信息

      • 总结单节点部署,服务器与应用程序各自需要的软件包

        • 服务器

          • libevent

          • memcached1.5.1

        • 应用程序

          • 除了本身必备的lamp以外

          • libmemcached

          • 安装memcached扩展 2.2.0

      • memcached主主复制与高可用

        • memcached支持多个memcached之间相互复制,已解决memcached的容灾问题。

        • memcached提供了专门用于高可用配置的软件八包。本案例以memcached-1.2.8-repcached-2.2.tar.gz为例。

        • 实验过程

          • 处理内核安全机制与防火墙

          • 两台主机构建高可用环境

            • 实验步骤基本一样,因此可以同步执行

          • 安装libevent

            • 安装编译环境及服务控制脚本所需软件包

              • 光盘的仓库安装gcc* psmisc

            • 解压后配置项

              • 指定安装路径即可

                • ./configure --prefix=/usr/local/libevent

              • 编译安装

                • make && make install

          • 安装memcached-1.2.8-repcached-2.2.tar.gz

            • 解压后配置项

              • ./configure \ --prefix=/usr/local/memcached_replication \ --enable-replication \ --with-libevent=/usr/local/libevent

                • --enable-replication一定要启用,否则无法进行主主复制操作。

                • --with-libevent指定事件通知函数库

            • 在进行编译前需要修改源代码

              • memcached.c

                • 在55~60行去掉

                  • #if defined(__FreeBSD__) || defined(__APPLE__)

                  • #endif

              • 之后进行编译安装

          • ln -s /usr/local/libevent/lib/libevent-2.1.so.6 /usr/lib64/

            • memcached的启动需要在该命令行下寻找函数

          • 启动memcached

            • /usr/local/memcached_replication/bin/memcached -d -u root -m 128 -x 192.168.10.102

              • -d 以守护进程的方式允许

              • -u 指定运行用户

              • -x 指定复制对端服务器的地址,如果在编译中没有启用复制功能则会在报错没有该选项。

              • -m 最大内存使用量,默认64M

              • 该位置需要修改为对方的IP

          • 之后再两台服务器上查看是否开启服务进程与联系对端的进程。

            • 利用telnet再一台主机上创建,在另一台主机上查询以验证复制功能。

          • memcached的高可用

            • 准备前奏

              • 关闭NetworkManager

                • 不关闭会让vip无法漂移

            • 安装keepalived

              • 修改配置文件

                • router_id LVS_01

                  • 两台主机不同用于区分。

                • #vrrp_strict

                  • 注释掉严格模式,否则无法实现单播通信

                • vrrp_script check_down { ##定义要执行的脚本 script "/etc/keepalived/memcached.sh" ##脚本路径和名称 interval 1 ##间隔1秒执行一次 }

                  • 添加脚本单元,不单对整机进行检查,还要对服务进行检查。

                  • #!/bin/bash # if [ $(ps -C memcached --no-header | wc -l) -eq 0 ]; then systemctl restart keepalived fi

                • state BACKUP

                • interface ens33

                  • 确定承载网卡

                • virtual_router_id 51

                  • 保证两台服务器用同一个id

                • priority 100

                  • 注意主服务器与从服务器的优先级

                • nopreempt

                  • 根据性能优劣来选择是否关闭抢占功能

                • virtual_ipaddress { 192.168.10.100 }

                  • 设定vip

                • track_script { check_down }

                  • 调用脚本

            • 之后进行验证测试

              • 需要修改访问测试页面的缓存服务器地址,如果搭建dns服务器则修改域名对应IP即可。

              • 关闭memcached进行高可用检测

        • 总结双节点部署memcached需要的软件包

          • memcached-1.2.8-repcached-2.2.tar.gz,memcached分布式高可用专用版软件包

          • 实现高可用的keepalived

全文复制到xmind中即可形成条理性笔记。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/47668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【快速逆向一/无过程/有源码】《大学》在线投稿系统

逆向日期&#xff1a;2024.07.18 使用工具&#xff1a;Node.js 加密工具&#xff1a;Crypto-js标准库 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 【点赞 收藏 关注 】仅供学习&#xff0c;仅供学习&#xff0c; 本文为快速逆向&#x…

如果制作红星照耀中国思维导图?6个软件帮助你快速制作思维导图

如果制作红星照耀中国思维导图&#xff1f;6个软件帮助你快速制作思维导图 制作《红星照耀中国》思维导图可以帮助更好地理解和梳理书中的重要信息和内容。以下是六款推荐的思维导图软件及其特点和使用方法&#xff0c;帮助你快速制作高质量的思维导图。 迅捷画图 特点与功…

Python基础语法篇(下)+ 数据可视化

Python基础语法&#xff08;下&#xff09; 数据可视化 一、函数&#xff08;一&#xff09;函数的定义&#xff08;二&#xff09;函数的调用和传参 二、文件操作&#xff08;一&#xff09;文件读取和写入&#xff08;二&#xff09;文件对象及方法&#xff08;三&#xff09…

【数学建模】——【线性规划】及其在资源优化中的应用

目录 线性规划问题的两类主要应用&#xff1a; 线性规划的数学模型的三要素&#xff1a; 线性规划的一般步骤&#xff1a; 例1&#xff1a; 人数选择 例2 &#xff1a;任务分配问题 例3: 饮食问题 线性规划模型 线性规划的模型一般可表示为 线性规划的模型标准型&…

达梦数据库的系统视图v$sqltext

达梦数据库的系统视图v$sqltext 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$SQLTEXT 是一个系统视图&#xff0c;用于显示当前正在执行或最近执行的SQL语句的文本信息。这个视图对于监控和分析数据库中的SQL活动非常有用&#xff0c;尤其是在需要调试性…

【MySQL篇】Percona XtraBackup工具备份指南:常用备份命令详解与实践(第二篇,总共五篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

银河麒麟搭建ftp服务器

1.先 查看系统架构&#xff0c;我常遇到的一般银河麒麟是arrch64的 lscpu uname -a cat /etc/os-release 去下载对应版本的vsftp.rpm包和ftp包 Index of /NS/ (cs2c.com.cn) 1.安装rpm rpm -ivh *.rpm --nodeps --force #强制安装 2.修改配置文件 vi /etc/vsftpd/vsftpd.co…

PiT : 基于池化层Pooling layer的Vision Transformer

CNN的降维原理;随着深度的增加,传统CNN的通道维数增加,空间维数减少。经验表明,这样的空间降维对变压器结构也是有益的,并在原有的ViT模型的基础上提出了一种新的基于池的视觉变压器(PiT)。 1. 引言 ViT与卷积神经网络(CNN)有很大的不同。将输入图像分成1616小块馈送到变压…

LabVIEW软件开发的雷区在哪里?

在LabVIEW软件开发中&#xff0c;有几个需要注意的雷区&#xff0c;以避免常见的错误和提高开发效率&#xff1a; 1. 不良的代码结构 雷区&#xff1a;混乱的代码结构和不清晰的程序逻辑。 后果&#xff1a;导致难以维护和调试的代码&#xff0c;增加了错误和故障的风险。 …

Web3时代的教育技术革新:智能合约在学习管理中的应用

随着区块链技术的发展和普及&#xff0c;Web3时代正在为教育技术带来前所未有的革新和机遇。智能合约作为区块链技术的核心应用之一&#xff0c;不仅在金融和供应链管理等领域展示了其巨大的潜力&#xff0c;也在教育领域中逐渐探索和应用。本文将探讨智能合约在学习管理中的具…

【C++】前缀和:和为K的子数组

1.题目 2.算法 需要借助哈希表&#xff08;查找效率很高&#xff09;。 如果一个区间和为sum&#xff0c;如果它的前缀和为sum-k&#xff0c;那么后缀和一定是K。 3.代码

类与对象(3)

对于类的构造函数我们已经有了初步的了解&#xff0c;这里我们对其拷贝构造函数进行讲解&#xff1a; 目录 拷贝构造函数&#xff1a; 1.拷贝构造函数的作用&#xff1a; 2.系统生成拷贝构造函数的缺陷 3.深拷贝的实现 侧面体现 拷贝构造函数&#xff1a; 这里我们将拷贝…

小程序-模板与配置

一、WXML模板语法 1.数据绑定 2.事件绑定 什么是事件 小程序中常用的事件 事件对象的属性列表 target和currentTarget的区别 bindtap的语法格式 在事件处理函数中为data中的数据赋值 3.事件传参与数据同步 事件传参 &#xff08;以下为错误示例&#xff09; 以上两者的…

Java语言程序设计基础篇_编程练习题**14.29(游戏:豆机)

第十四章第二十九题 **14.29 (游戏&#xff1a;豆机) 请写一个程序&#xff0c;显示编程练习题 7.21 中介绍的豆机&#xff0c;如图 14-52c 所示 代码展示 package chapter_14;import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layou…

NFS存储、API资源对象StorageClass、Ceph存储-搭建ceph集群和Ceph存储-在k8s里使用ceph(2024-07-16)

一、NFS存储 注意&#xff1a;在做本章节示例时&#xff0c;需要拿单独一台机器来部署NFS&#xff0c;具体步骤略。NFS作为常用的网络文件系统&#xff0c;在多机之间共享文件的场景下用途广泛&#xff0c;毕竟NFS配置方 便&#xff0c;而且稳定可靠。NFS同样也有一些缺点&…

Postgresql主键自增的方法

Postgresql主键自增的方法 一.方法&#xff08;一&#xff09; 使用 serial PRIMARY KEY 插入数据 二.方法&#xff08;二&#xff09; &#x1f388;边走、边悟&#x1f388;迟早会好 一.方法&#xff08;一&#xff09; 使用 serial PRIMARY KEY 建表语句如下&#xf…

住宅IP解析:动态住宅IP和静态住宅IP区别详解

在互联网连接的世界中&#xff0c;IP地址是我们识别和访问网络资源的关键。住宅IP地址&#xff0c;特别是动态住宅IP和静态住宅IP&#xff0c;是两种不同类型的IP分配方式&#xff0c;它们在使用和功能上存在显著差异。 1. IP地址的稳定性 动态住宅IP&#xff1a;这种IP地址是…

mysql命令练习

创建数据表grade: CREATE TABLE grade( id INT NOT NULL&#xff0c; sex CHAR(1)&#xff0c; firstname VARCHAR(20) NOT NULL&#xff0c; lastname VARCHAR(20) NOT NULL&#xff0c; english FLOAT&#xff0c; math FLOAT, chinese FLOAT )&#xff1b; 向数据表grade中插…

[职场] MARKETINGSPECIALIST是什么 #笔记#微信#知识分享

MARKETINGSPECIALIST是什么 MARKETINGSPECIALIST&#xff0c;即市场营销专员&#xff0c;他们需要具备一定的专业知识和技能&#xff0c;以适应快速变化的市场环境。接下来&#xff0c;我们将详细探讨这个职位的工作内容、必备技能以及发展前景。 一、MARKETINGSPECIALIST是什么…

lua 游戏架构 之 LoaderWallet 异步加载

定义了一个名为LoaderWallet class&#xff0c;用于管理资源加载器&#xff08;Loader&#xff09;。这个类封装了资源加载的功能&#xff0c;包括异步加载&#xff0c;以及资源的释放和状态查询。下面是对代码的详细解释&#xff1a; ### 类定义和初始化 这里定义了一个名为…