做网站都需要具备什么,wordpress 菜单两列显示不出来,wordpress 文章图片插件,wordpress分享文章插件一、Memcached概述 Memcached 是一套开源的高性能分布式内存对象缓存系统#xff0c;它将所有的数据都存储在内存中#xff0c;因为内存中会统一维护一张巨大的 Hash 表#xff0c;所以支持任意存储类型的数据。很多网站使用 Memcached 提高网站的访问速度#xff0c;尤其是…一、Memcached概述 Memcached 是一套开源的高性能分布式内存对象缓存系统它将所有的数据都存储在内存中因为内存中会统一维护一张巨大的 Hash 表所以支持任意存储类型的数据。很多网站使用 Memcached 提高网站的访问速度尤其是需要频繁访问数据的大型网站。 Memcached 是典型的 C/S 架构因此需要构建 Memcached 服务器端与 MemcachedAPI客户端。Memcached 服务器端是用C语言编写的而Memcached API客户端可用任何语言来编写(如 PHP、Python、Per 等)并通过 Memcached 协议与 Memcached 服务器端进行通信。 当Web客户端发出请求到Web服务器的应用程序时,应用程序会调用 Memcached APl客户端程序库接口去连接 Memcached 服务器查询数据。如果 Web 客户端所请求的数据在Memcached 服务端中已经缓存则 Memcached 服务端会将数据返回给 Web 客户端;否则会将 Web 客户端请求发送至MySQL数据库由数据库查询并返回请求的数据给Memcached 以及 Web 客户端与此同时 Memcached 服务器也会将数据进行保存方便下次用户请求使用。
二、Memcached特点
1.数据存储方式和数据过期方式
Memcached 具有独特的数据存储方式和数据过期方式。
(1)数据存储方式:Slab Allocation Slab Allocation 即按组分配内存每次先分配一个 Slab相当于一个大小为 1M的页。然后在 1M 的空间里根据数据划分大小相同的 Chunk。该方法可以有效解决内存碎片问题但也可能会使内存空间产生浪费。
(2)数据过期方式:LRU、Laxzy Expiration LRU 和 Laxzy Expiration 是数据过期的两种方式。 LRU 是指追加的数据空间不足时,会根据LRU的情况淘汰最近最少使用的记录 Laxzy Expiration 即惰性过期是指使用 get 时查看记录时间从而检查记录是否已经过期。
2.Memcached 缓存机制 缓存是常驻在内存的数据能够快速进行读取而Memcached 就是这样一款非常出色的缓存软件。当程序写入缓存数据请求时Memcached的API接口将 Key 输入路由算法模块并路由到集群中的一台服务器之后由API接口与服务器进行通信完成一次分布式缓存写入。
3.Memcached 分布式 Memcached分布式部署主要依赖于Memcached的客户来端实现多个Memcached 服务器是独立的。分布式数据如何存储是由路由算法所决定。当数据到达客户端程序库客户端的算法就依据路由算法来决定保存的 Memcached 服务器。读取数据时客户端依据使用保存数据时相同的路由算法选中和存储数据时相同的服务器来读取数据。
4.Memcached 路由算法
(1)求余数 hash 算法 求余数 hash 算法先用 key 做 hash 运算得到一个整数再去做 hash 算法根据余数进行路由这种算法适合大多数据需求。但是不适合用在动态变化的环境中比如有大量机器添加或者删除这样会导致大量的对象存储位置失效。
(2)一致性 hash 算法 一致性 hash 算法适合在动态变化的环境中使用。原理是按照 hash 算法把对应的 key 通过一定的 hash 算法处理后映射形成一个首尾相接闭合循环然后通过使用与对象存储一样的hash算法将机器也映射到环中顺时针方向计算将所有对象存储到离自己最近的机器中。
三、Memcached案例实施
1.Memcached主主复制架构
(1)配置Memcached服务器
此步骤在两台memcache服务器上都执行 安装Libevent
[rootmemcache1 ~]# systemctl stop firewalld
[rootmemcache1 ~]# setenforce 0
[rootmemcache1 ~]# yum -y install gcc* psmisc
[rootmemcache1 ~]# tar zxvf libevent-2.1.8-stable.tar.gz
[rootmemcache1 ~]# cd libevent-2.1.8-stable
[rootmemcache1 libevent-2.1.8-stable]# ./configure --prefix/usr/local/libevent
[rootmemcache1 libevent-2.1.8-stable]# make make install 安装带有复制功能的 Memcached
[rootmemcache1 ~]# tar zxvf memcached-1.2.8-repcached-2.2.tar.gz
[rootmemcache1 ~]# cd memcached-1.2.8-repcached-2.2
[rootMemcached1 memcached-1.2.8-repcached-2.2]# ./configure --prefix/usr/local/memcached_replication --enable-replication --with-libevent/usr/local/libeven 进入并修改配置文件
[rootmemcache1 memcached-1.2.8-repcached-2.2]# vim memcached.c#找到如下几行在55行--60行
/* FreeBSD 4.x doesnt have IOV_MAX exposed. */
#ifndef IOV_MAX
#if defined(__FreeBSD__) || defined(__APPLE__) //删除
# define IOV_MAX 1024
#endif //删除
#endif[rootmemcache1 memcached-1.2.8-repcached-2.2]# make make install 启动Memcached服务
在memcache1上启动
[rootmemcache1 ~]# ln -s /usr/local/libevent/lib/libevent-2.1.so.6 /usr/lib64/
[rootMemcached1 ~]# /usr/local/memcached_replication/bin/memcached -d -u root -m 128 -x 192.168.10.102在memcache2上启动
[rootmemcache1 ~]# ln -s /usr/local/libevent/lib/libevent-2.1.so.6 /usr/lib64/
[rootMemcached1 ~]# /usr/local/memcached_replication/bin/memcached -d -u root -m 128 -x 192.168.10.101 在两台服务器上检查进程
[rootmemcache1 ~]# netstat -anpt | grep memcached 使用telnet进行简单验证复制功能
在 Memcached1 上插入一条具有特点的键值
[rootmemcache1 ~]# yum -y install telnet
[rootmemcache1 ~]# telnet 192.168.10.102 11211
set username 0 0 8
12345678
STORED在 Memcached2 上进行查看刚刚插入的键值
[rootmemcache2 ~]# yum -y install telnet
[rootmemcache2 ~]# telnet 192.168.10.102 11211
get username
VALUE username 0 8
12345678
END
(2)Memcached主主复制Keepalived高可用架构 两台主机都安装配置keepalived
[rootmemcache1 ~]# yum -y install keepalived
rootmemcache1 ~]# vim /etc/keepalived/keepalived.conf 配置主Keepalived
! Configuration File for keepalivedglobal_defs {notification_email {acassenfirewall.locfailoverfirewall.locsysadminfirewall.loc}notification_email_from Alexandre.Cassenfirewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_01 ##主从Keepalivedip不能相同vrrp_skip_check_adv_addr#vrrp_strict ##注释vrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script check_down { ##定义要执行的脚本script /etc/keepalived/memcached.sh ##脚本路径和名称interval 1 ##间隔1秒执行一次
}vrrp_instance VI_1 {state BACKUP ##master角色不能设置nopreempt所以此处要设置为BACKUPinterface ens33virtual_router_id 51priority 100 ##从主机的优先级要小于此数字advert_int 1nopreempt ##添加此语句关闭了抢占功能从主机不需要authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.100
}track_script { ##调用前面的脚本check_down
}} 编写要执行的脚本
[rootmemcached1 keepalived]# vim /etc/keepalived/memcached.sh#!/bin/bash
#
if [ $(ps -C memcached --no-header | wc -l) -eq 0 ]; thensystemctl stop keepalived
fi[rootmemcached1 keepalived]# chmod x /etc/keepalived/memcached.sh 配置从Keepalived
[rootmemcache2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {acassenfirewall.locfailoverfirewall.locsysadminfirewall.loc}notification_email_from Alexandre.Cassenfirewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_02vrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script check_down {
script /etc/keepalived/memcached.sh
interval 1
}vrrp_instance VI_1 {state BACKUP interface ens33virtual_router_id 51priority 99 ##从主机的优先级要小于此数字advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.100
}track_script { ##调用前面的脚本check_down
}}
(3)配置Memcached API客户端 安装LAMP平台
[rootmemcached-api ~]# yum -y install httpd mariadb mariadb-server php php-devel php-mysql zlib zlib-devel
[rootmemcached-api ~]# systemctl start mariadb
[rootmemcached-api ~]# mysqladmin -u root password pwd123
[rootmemcached-api ~]# systemctl start httpd 编译安装Libmemcached
[rootmemcached-api ~]# systemctl stop firewalld
[rootmemcached-api ~]# setenforce 0
[rootmemcached-api ~]# yum -y install gcc*
[rootmemcached-api ~]# tar zxvf libmemcached-1.0.18.tar.gz
[rootmemcached-api ~]# cd libmemcached-1.0.18
[rootmemcached-api libmemcached-1.0.18]# ./configure --prefix/usr/local/libmemcached --with-memcached/usr/local/memcached
[rootmemcached-api libmemcached-1.0.18]# make make install 编译安装Memcached扩展
[rootmemcached-api ~]# tar -xzvf memcached-2.2.0.tgz
[rootmemcached-api ~]# cd memcached-2.2.0/
[rootmemcached-api memcached-2.2.0]# phpize
[rootmemcached-api memcached-2.2.0]# ./configure --enable-memcached --with-php-config/usr/local/php5/bin/php-config --with-libmemcached-dir/usr/local/libmemcached --disable-memcached-sasl --with-zlib-dir
[rootmemcached-api memcached-2.2.0]# make make install 配置 PHP 添加 Memcached 组件
[rootmemcached-api ~]# vim /etc/php.iniextensionmemcached.so[rootmemcached-api ~]# systemctl restart httpd 通过 PHPinfo 查看是否已经添加 Memcached 扩展模块
[rootmemcached-api ~]# vim /var/www/html/test1.php?php
phpinfo();
? 测试 Memcached-API 功能
[rootmemcached-api ~]# vim/var/www/html/test2.php?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;
?
(4)测试验证 在两台服务器上启动keepalived 在客户端修改缓存服务器地址
[rootmemcached-api ~]# vim /usr/local/httpd/htdocs/test3.php?php
$memcache new Memcached();
$memcache-addServer(192.168.10.100, 11211);
$memcache-set(key, Memcache test successful!, 0, 60);
$result $memcache-get(key);
unset($memcache);
echo $result;
? 浏览器访问测试