高性能内存对象缓存Memcached详细实验操作

目录

前提准备:

cache1,2:

客户端cache-api(一定得是LAMP环境)

memcache实现主主复制以及高可用(基于以上完成)

cache1,2:

memcache+keepalived(基于以上完成)

cache1,2:


前提准备:

1. 准备三台centos7,其中一台为cache1:192.168.180.110,一台为cache2:192.168.180.120和一台客户端(LAMP环境):192.168.180.150

2. 分别修改主机名称

hostnamectl set-hostname cache1 && bashhostnamectl set-hostname cache2 && bashhostnamectl set-hostname cache-api && bash

3. 关闭所有防火墙

systemctl stop firewalld
setenforce 0

主要步骤开始!!!


cache1,2:

1. 安装libevent

#解压
tar zxf libevent-2.1.8-stable.tar.gz -C /usr/src/
cd /usr/src/libevent-2.1.8-stable/#安装组件
yum install -y gcc gcc-c++#编译安装
./configure --prefix=/usr/local/libevent && make && make install

2. 安装memcached

cd
#解压
tar zxf memcached-1.5.1.tar.gz -C /usr/src/
cd /usr/src/memcached-1.5.1/#编译安装
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent && make && make install

3. 设置memcached服务脚本

vim /usr/local/memcached/memcached_service.sh#!/bin/bash
CMD="/usr/local/memcached/bin/memcached"
start() {$CMD -d -m 128 -u root
}
stop() {killall memcached;
}
ACTION=$1case $ACTION in'start')start;;'stop')stop;;'restart')stopsleep 2start;;*)echo 'Usage:{start|stop|restart}'esac#退出,设置权限,打开
chmod 755 /usr/local/memcached/memcached_service.sh
/usr/local/memcached/memcached_service.sh start
netstat -antp | grep memcache

客户端cache-api(一定得是LAMP环境)

1. 安装Libmemcached

#解压
tar zxf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18#安装组件
yum install -y gcc gcc-c++#编译安装
./configure --prefix=/usr/local/libmemcached --with-memcached=/usr/local/memcached && make && make install

2. 安装memcached扩展

tar zxf memcached-2.2.0.tgz
cd memcached-2.2.0
/usr/local/php5/bin/phpizecp -r /usr/local/php5/include/php/ext/ ././configure --enable-memcached --with-php-config=/usr/local/php5/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached --disable-memcached-sasl && make && make test && make install

在这一步时,输入n

获得共享地址

Installing shared extensions:     /usr/local/php5/lib/php/extensions/no-debug-zts-20121212/

3. 配置php添加memcached组件

cd /usr/local/php5/vim php.ini#输入刚刚获得的共享地址
extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-zts-20121212/"
extension=memcached.so

4. 访问并查看是否添加成功

vim /usr/local/httpd/htdocs/index.php
<?php
phpinfo();
?>#重启httpd
systemctl restart httpd

🚨有些时候可能访问不到这个页面,但是在本地访问却可以访问到

curl 127.0.0.1/index.php | grep memcached

🚨可以看到是有内容的,有内容就可以直接进行下一步

5. 测试memcached-api功能

vim /usr/local/httpd/htdocs/test02.php
<?php
$memcache = new Memcached();
$memcache->addServer('192.168.180.110', 11211);
$memcache->set('key', 'Memcache test successful!', 0, 60);
$result = $memcache->get('key');
unset($memcache);
echo $result;
?>#重启httpd,可以多重启几次
systemctl restart httpd

🚨当访问这个的时候,可能也会访问不到,多重启几次httpd就可以了,上面的模块index.php也可以访问到了

6. 浏览器访问,看到这句话就说明已经被memcache记录了

192.168.180.150/test02.php

7. 在cache1上安装telnet,并远程登录

yum install -y telnettelnet 127.0.0.1 11211
输入:get key


memcache实现主主复制以及高可用(基于以上完成)

cache1,2:

1. 删除cache1,2上的memcache1.5.1版本

rm -rf /usr/src/memcached-1.5.1/
rm -rf memcached-1.5.1.tar.gz

2. 重新下载支持复制功能的memcache

yum install -y psmisc#关闭memcache
/usr/local/memcached/memcached_service.sh stop
netstat -nultp | grep memcached#解压
tar zxf memcached-1.2.8-repcached-2.2.tar.gz
cd memcached-1.2.8-repcached-2.2#编译
./configure --prefix=/usr/local/memcached_replication --enable-replication --with-libevent=/usr/local/libevent

3. 修改配置文件

vim memcached.c#将原先的删除,替换成新的
#ifndef IOV_MAX
# define IOV_MAX 1024
#endif#再进行安装
make && make install

4. 启动memcache服务

ln -s /usr/local/libevent/lib/libevent-2.1.so.6 /usr/lib64/cache1:/usr/local/memcached_replication/bin/memcached -d -u root -m 128 -x 192.168.180.120cache2:/usr/local/memcached_replication/bin/memcached -d -u root -m 128 -x 192.168.180.110netstat -nultp | grep memcache

5. 在cache1远程登录并插入数值

telnet 192.168.180.110 11211set username 0 0 8
20250215
get username

6. 在cache2上安装telnet并登录查看cache1插入的数值

yum install -y telnet
telnet 192.168.180.120 11211
get username


memcache+keepalived(基于以上完成)

cache1,2:

1. 均安装keepalived

yum install -y keepalived#cache1修改主配置文件,将原先内容删除
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {router_id route
}
vrrp_instance VI_1 {state MASTER    //主备都为主interface ens33    //网卡类型virtual_router_id 51priority 100    //优先级advert_int 1nopreempt    //不主动抢占资源,只在Master或者高优先级服务器上设置authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.180.200    //定义虚拟VIP地址}
}
virtual_server 192.168.180.200 11211    //VIP故障检测
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 20
protocol TCP
sorry_server 192.168.180.120 11211    //对端IP,也就是cache2
real_server 192.168.180.110 11211 {    //本机IP
weight 3
notify_down /root/memcached.sh    //当 memcached 宕机,停止keepalived服务
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 11211
}
}
}#编写完成退出,将这一份文件复制到cache2上
scp /etc/keepalived/keepalived.conf 192.168.180.120:/etc/keepalived/echo "/usr/bin/systemctl stop keepalived" > /root/memcached.sh
chmod +x memcached.sh

#在cache2上,修改配置文件的一些内容
vim /etc/keepalived/keepalived.conf! Configuration File for keepalived
global_defs {router_id route
}
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 99    //优先级修改advert_int 1nopreempt(删除)    //将这一个删除authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.180.200}
}
virtual_server 192.168.180.200 11211
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 20
protocol TCP
sorry_server 192.168.180.110 11211    //对端IP
real_server 192.168.180.120 11211 {    //本机IP
weight 3
notify_down /root/memcached.sh
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 11211
}
}
}echo "/usr/bin/systemctl stop keepalived" > /root/memcached.sh
chmod +x memcached.sh

2. 均开启

systemctl start keepalived

3. 查看VIP是否生成

ip address show dev ens33 | grep 192.168.180.200

4. 验证高可用性

#关闭seten 0#cache1杀掉memcache:
killall memcached在cache2上查看,VIP已转移到cache2上

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

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

相关文章

全单模矩阵及其在分支定价算法中的应用

全单模矩阵及其在分支定价算法中的应用 目录 全单模矩阵的定义与特性全单模矩阵的判定方法全单模矩阵在优化中的核心价值分支定价算法与矩阵单模性的关系非全单模问题的挑战与系统解决方案总结与工程实践建议 1. 全单模矩阵的定义与特性 关键定义 单模矩阵&#xff08;Unimo…

Spring AI发布!让Java紧跟AI赛道!

1. 序言 在当今技术发展的背景下&#xff0c;人工智能&#xff08;AI&#xff09;已经成为各行各业中不可忽视的重要技术。无论是在互联网公司&#xff0c;还是传统行业&#xff0c;AI技术的应用都在大幅提升效率、降低成本、推动创新。从智能客服到个性化推荐&#xff0c;从语…

【kafka系列】Kafka如何保证消息不丢失?

目录 1. 生产者端&#xff1a;确保消息成功发送到Broker 核心机制&#xff1a; 关键步骤&#xff1a; 2. Broker端&#xff1a;持久化与副本同步 核心机制&#xff1a; 关键源码逻辑&#xff1a; 3. 消费者端&#xff1a;可靠消费与Offset提交 核心机制&#xff1a; 关…

利用二分法+布尔盲注、时间盲注进行sql注入

一、布尔盲注&#xff1a; import requestsdef binary_search_character(url, query, index, low32, high127):while low < high:mid (low high 1) // 2payload f"1 AND ASCII(SUBSTRING(({query}),{index},1)) > {mid} -- "res {"id": payloa…

UART(一)——UART基础

一、定义 UART(Universal Asynchronous Receiver/Transmitter)是一种广泛使用的串行通信协议,用于在设备间通过异步方式传输数据。它无需共享时钟信号,而是依赖双方预先约定的参数(如波特率)完成通信。 功能和特点 基本的 UART 系统只需三个信号即可提供稳健的中速全双工…

【PHP】php+mysql 活动信息管理系统(源码+论文+数据库+数据库文件)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 【PHP】php 活动信息管理系统&#xff08;源码论文…

数据结构——单向循环链表、双链表、双向循环链表

目录 一、单向循环链表 1.1 单向循环链表的概念 1.2 单向循环链表的操作 1.2.1 单向循环链表的创建 1.2.2 单向循环链表的头插 1.2.3 单向循环链表的遍历 1.2.4 单向循环链表的头删 1.2.5 单向循环链表的尾插 1.2.6 单向循环链表的尾删 1.2.7 约瑟夫环 1.3 单向循环列表所有程…

Apache Iceberg 与 Apache Hudi:数据湖领域的双雄对决

在数据存储和处理不断发展的领域中&#xff0c;数据湖仓的概念已经崭露头角&#xff0c;成为了一种变革性的力量。数据湖仓结合了数据仓库和数据湖的最佳元素&#xff0c;提供了一个统一的平台&#xff0c;支持数据科学、商业智能、人工智能/机器学习以及临时报告等多种关键功能…

JavaScript数组-数组的概念

在JavaScript编程中&#xff0c;数组&#xff08;Array&#xff09;是一种非常重要的数据结构&#xff0c;它允许我们将多个值存储在一个单独的变量中。数组可以包含任意类型的元素&#xff0c;如数字、字符串、对象甚至是其他数组&#xff0c;并提供了丰富的内置方法来操作这些…

AcWing 800. 数组元素的目标和

题目来源&#xff1a; 登录 - AcWing 题目内容&#xff1a; 给定两个升序排序的有序数组 A 和 B&#xff0c;以及一个目标值 x。 数组下标从 0开始。 请你求出满足 A[i]B[j]x的数对 (i,j)。 数据保证有唯一解。 输入格式 第一行包含三个整数 n,m,x&#xff0c;分别表示 …

wordpress资讯类网站整站打包

wordpress程序&#xff0c;内置了价值499元的模板.但是有了模板没有全自动采集相信大多数人都搞不懂&#xff0c;目录那么多&#xff0c;全靠原创几乎是不可能的事情&#xff0c;除非你是大公司&#xff0c;每人控制一个板块&#xff0c; 这套源码里面最有价值的应该是这个采集…

python中的with是做什么的,有什么作用,什么时候需要用到with

&#x1f4cc; Python 中的 with 语句&#xff1a;作用 & 什么时候用 1️⃣ with 是干嘛的&#xff1f; with 主要用来 自动管理资源&#xff0c;确保资源&#xff08;文件、数据库连接等&#xff09;在使用完后能自动释放&#xff0c;避免资源泄露问题。 换句话说&…

浏览器的Cookie 过期时间存储

Cookie 是服务器发送到浏览器的小型文本数据&#xff0c;用于跟踪用户状态&#xff08;如登录信息、偏好设置&#xff09;&#xff0c;存储大小通常限制为 4KB&#xff0c;每个域名下最多允许约 20-50 个 Cookie&#xff08;不同浏览器不同&#xff09;。 属性 属性说明示例注…

hive全量迁移脚本

#!/bin/bash #场景&#xff1a;数据在同一库下&#xff0c;并且hive是内部表&#xff08;前缀的hdfs地址是相同的&#xff09;#1.读取一个文件&#xff0c;获取表名#echo "时间$dt_jian_2-------------------------" >> /home/hadoop/qianyi_zengliang/rs.txt#…

进阶——第十六届蓝桥杯嵌入式熟练度练习(开发板捕获频率和占空比)

单通道捕获频率 HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1); void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {if(htim->InstanceTIM2) {cap1HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1);TIM2-&…

Python中如何进行数据库连接?

在 Python 中进行数据库连接&#xff0c;不同的数据库需要使用不同的库。下面分别介绍几种常见数据库&#xff08;SQLite、MySQL、PostgreSQL&#xff09;的连接方法。 1. 连接 SQLite 数据库 SQLite 是一种轻量级的嵌入式数据库&#xff0c;Python 标准库中自带了sqlite3模块…

用C语言实现通用排序函数:深入理解指针与函数指针的魅力

在C语言的学习与应用中&#xff0c;排序是一个非常基础且重要的算法。今天&#xff0c;我们就来深入探讨如何使用C语言实现一个通用的排序函数&#xff0c;通过这个过程&#xff0c;我们将对指针和函数指针有更深刻的理解。 #define _CRT_SECURE_NO_WARNINGS #include<std…

Deepseek R1模型本地化部署与API实战指南:释放企业级AI生产力

摘要 本文深入解析Deepseek R1开源大模型的本地化部署流程与API集成方案&#xff0c;涵盖从硬件选型、Docker环境搭建到模型微调及RESTful接口封装的完整企业级解决方案。通过电商评论分析和智能客服搭建等案例&#xff0c;展示如何将前沿AI技术转化为实际生产力。教程支持Lin…

使用verilog 实现 cordic 算法 ----- 旋转模式

1-设计流程 ● 了解cordic 算法原理&#xff0c;公式&#xff0c;模式&#xff0c;伸缩因子&#xff0c;旋转方向等&#xff0c;推荐以下链接视频了解 cordic 算法。哔哩哔哩-cordic算法原理讲解 ● 用matlab 或者 c 实现一遍算法 ● 在FPGA中用 verilog 实现&#xff0c;注意…

Python常见面试题的详解7

1. 内置的数据结构有哪几种 Python 中有多种内置的数据结构&#xff0c;主要分为以下几种&#xff1a; 1.1 数值类型 整数&#xff08;int&#xff09;&#xff1a;用于表示整数&#xff0c;没有大小限制。例如&#xff1a;1, -5, 100。浮点数&#xff08;float&#xff09;…