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

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

                • 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中即可形成条理性笔记。

相关推荐
Channing Lewis1 小时前
sql server如何创建表导入excel的数据
数据库·oracle·excel
秃头摸鱼侠1 小时前
MySQL安装与配置
数据库·mysql·adb
UGOTNOSHOT1 小时前
每日八股文6.3
数据库·sql
行云流水行云流水2 小时前
数据库、数据仓库、数据中台、数据湖相关概念
数据库·数据仓库
John Song2 小时前
Redis 集群批量删除key报错 CROSSSLOT Keys in request don‘t hash to the same slot
数据库·redis·哈希算法
IvanCodes2 小时前
七、Sqoop Job:简化与自动化数据迁移任务及免密执行
大数据·数据库·hadoop·sqoop
tonexuan2 小时前
MySQL 8.0 绿色版安装和配置过程
数据库·mysql
JohnYan2 小时前
工作笔记- 记一次MySQL数据移植表空间错误排除
数据库·后端·mysql
我最厉害。,。3 小时前
Windows权限提升篇&数据库篇&MYSQL&MSSQL&ORACLE&自动化项目
数据库·mysql·sqlserver
远方16093 小时前
20-Oracle 23 ai free Database Sharding-特性验证
数据库·人工智能·oracle