一、理论概述

Memcached服务器端与PHP-Memcache客户端安装配置_服务器应用_Linux公社-Linux系统门户网站

https://www.linuxidc.com/Linux/2017-11/148428.htm

前端应用服务器或动态或静态,对数据库进行或读取,或写入的操作时。数据库扛不住这么大量查询请求后端真实数据库,由于我们一般后端数据库采用的都是关系型数据库,属于写入到磁盘里的,磁盘的i/o很容易就达到瓶颈。大大的影响了速度

所以我们可以在数据库的前端搭建memcached,memcached是缓存数据库,不支持数据持久化,服务器重启,或者服务重启,内存数据全部丢失。但是近年来有一些技术大牛开发了一些memcached数据持久化的一些技术,如感兴趣可自行搜索,本案例主要是memcached案例

memcached高性能内存对象缓存系统,键值对存储方式,服务端默认通过11211端口工作,该缓存程序是典型的C/S架构,服务端是C语言开发的,客户端可以使用多种语言开发

缓存的数据量大道指定值或者过期之后基于LRU算法自动删除不是用的缓存。删除“最近最少使用”的记录的机制;当memcached指定的内存空间不足时,从其最近未被使用的记录中搜索,并将其空间分配给新的记录。可以禁止LRU功能,内存用尽,程序返回错误提示

工作流程

  1. 客户端通过浏览器发送请求到前端web服务器,由于是动态网页的话调用PHP来处理,PHP服务器调用memcached客户端程序库接口,由其来连接memcached服务器。
  2. 若memcached有其请求的数据缓存,则返回给PHP服务器;若没有,则由memcached客户端程序将请求直接转发给后端的数据库服务器,数据库服务器将数据返回给memcached客户端程序,再返回给PHP服务器;同事memcached客户端程序将该数据缓存到memcached服务器,下次使用以便更快速

二、部署

环境

主机名 IP地址 角色信息
web 192.168.111.3 该主机上部署telnet程序进行测试
memcached1 192.168.111.4 该主机只部署memcached,magent,keepalived
memcached2 192.168.111.5 该主机只部署memcached,magent,keepalived
VIP 192.168.111.100 magent的VIP

环境概述

  • 所有主机开放相应端口,或者直接关闭防火墙和selinux
  • 已经有epel源
  • 生产环境一半都是由PHP程序连接memcache程序,memcache连接magent,由magent进行分布式写入memcached,测试环境我们可以使用Telnet简单进行测试
  • 在memcached所在服务器部署magent+keepalived是做一个关于magent高可用;memcached随时分布式缓存数据库,但是他们自身之间并不能进行通信;这里借助magent缓存代理这个开源工具,防止出现单点故障;部署keepalived是给magent自身做高可用
  • 这样可以实现,一台memcached服务器宕机,还有一台处于正常工作中。
  • 修复好的memcached禁止立刻启动memcached服务,加入集群;刚修复好的,内存里面几乎为空,解决办法是可以等到业务低峰期加入集群。或者是通过代码先进性数据库的预热,将后端数据库相应数据加载到自身内存中再加入集群。

部署

  • Telnet客户端程序部署
[root@localhost ~]# yum -y install telnet
  • 部署memcached及magent和keepalived
两台机器一样

[root@memcached1 ~]# yum -y install libevent
[root@memcached1 ~]# rpm -ql libevent-2.0.21-4.el7.x86_64
/usr/lib64/libevent-2.0.so.5
/usr/lib64/libevent-2.0.so.5.1.9
/usr/lib64/libevent_core-2.0.so.5
/usr/lib64/libevent_core-2.0.so.5.1.9
/usr/lib64/libevent_extra-2.0.so.5
/usr/lib64/libevent_extra-2.0.so.5.1.9
/usr/lib64/libevent_openssl-2.0.so.5
/usr/lib64/libevent_openssl-2.0.so.5.1.9
/usr/lib64/libevent_pthreads-2.0.so.5
/usr/lib64/libevent_pthreads-2.0.so.5.1.9
/usr/share/doc/libevent-2.0.21
/usr/share/doc/libevent-2.0.21/ChangeLog
/usr/share/doc/libevent-2.0.21/LICENSE
/usr/share/doc/libevent-2.0.21/README [root@memcached1 ~]# yum -y install memcached [root@memcached1 ~]# memcached -d -m 32m -p11211 -u root
[root@memcached1 ~]# netstat -lnpt | grep 11211
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 58821/memcached
tcp6 0 0 :::11211 :::* LISTEN 58821/memcached #-d:以守护进程方式启动
#-m:分配给memcached内存使用量,默认为64m
#-u:运行该程序的用户
#-p:指定开放那个端口提供服务 #mkdir magent
[root@memcached1 ~]# tar zxf magent-0.5.tar.gz -C magent/ [root@memcached1 ~]# vim ketama.h
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif
#添加到文件开始 [root@memcached1 ~]# sed -i '1 s/$/ -lm/' Makefile
[root@memcached1 ~]# head -1 Makefile
LIBS = -levent -lm #tar zxf libevent*
#cd libevent*
#./configure --prefix=/usr/ && make && make install [root@memcached1 magent]# scp magent 192.168.111.5:/usr/bin/ [root@memcached1 magent]# cp magent /usr/bin/ [root@memcached1 magent]# chmod +x /usr/bin/magent
#对端机器一样加执行权限
#yum -y install keepalived

cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
script_user root
#需要制定脚本运行用户
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_m {
script "/opt/magent.sh"
interval 2
weight 20 } vrrp_instance VI_1 {
state MASTER
interface ens32
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.111.100/32 dev ens32 label ens32:2
}
track_script {
check_m
}
#这个配置要包括到"vrrp_instance"中去
} memcached2: [root@memcached2 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
script_user root
#需要制定脚本运行用户
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVELa
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_m {
script "/opt/magent.sh"
interval 2
weight 20 } vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.111.100/32 dev ens32 label ens32:2
}
track_script {
check_m
}
#这个配置要包括到"vrrp_instance"中去
} [root@memcached1 ~]# systemctl start keepalived.service [root@memcached1 ~]# ip a | grep ens32:2
inet 192.168.111.100/32 scope global ens32:2 编写监控magent使用到的脚本
主:
[root@memcached1 ~]# vim /opt/magent.sh #!/bin/bash
k=`ps -ef |grep keepalived |grep -v grep |wc -l`
if [ $k -gt 0 ];then
magent -u root -n 51200 -l 192.168.111.100 -p 12000 -s 192.168.111.4:11211 -b 192.168.111.5:11211
#-u指定运行magent程序的用户;-n最大连接数,默认4096;-lmagent对外坚挺ip;-pmagent对外监听端口;-smemcached朱缓存IP地址;-bmemcached被缓存IP地址
else
pkill -9 magent
fi 备:
[root@memcached2 ~]# vim /opt/magent.sh #!/bin/bash
k=`ip a |grep 192.168.111.100 |wc -l`
if [ $k -gt 0 ];then
magent -u root -n 51200 -l 192.168.111.100 -p 12000 -s 192.168.111.4:11211 -b 192.168.111.5:11211
#如果VIP地址转移到本机了,启动magent程序,否则magent出于关闭状态
else
pkill -9 magent
fi [root@memcached1 ~]# chmod +x /opt/magent.sh [root@memcached1 ~]# systemctl restart keepalived.service
[root@memcached1 ~]# ps aux | grep magent
root 71271 0.0 0.0 11948 336 ? Ss 18:58 0:00 magent -u root -n 51200 -l 192.168.111.100 -p 12000 -s 192.168.111.4:11211 -b 192.168.111.5:11211
#程序已经运行,此时对端该程序没有运行 [root@memcached1 ~]# netstat -lnpt | grep 12000 tcp 0 0 192.168.111.100:12000 0.0.0.0:* LISTEN 71271/magent

三、测试

  • 模拟故障
主上关掉keepalived,即magent没有了对外监听的ip:
[root@memcached1 ~]# systemctl stop keepalived.service 从上查看:
[root@memcached2 ~]# ps aux | grep magent
root 67100 0.0 0.0 11948 340 ? Ss 04:46 0:00 magent -u root -n 51200 -l 192.168.111.100 -p 12000 -s 192.168.111.4:11211 -b 192.
168.111.5:11211root 67254 0.0 0.0 112720 984 pts/0 R+ 04:47 0:00 grep --color=auto magent
[root@memcached2 ~]# ip a| grep ens32:2
inet 192.168.111.100/32 scope global ens32:2
  • 测试分布式写入
[root@localhost ~]# telnet 192.168.111.100 12000
Trying 192.168.111.100...
Connected to 192.168.111.100.
Escape character is '^]'.
set test 0 0 5
nihao
STORED
get test
VALUE test 0 5
nihao
END 现在直接连接真实memcached数据库看是否有数据 [root@localhost ~]# telnet 192.168.111.4 11211
Trying 192.168.111.4...
Connected to 192.168.111.4.
Escape character is '^]'.
get test
VALUE test 0 5
nihao
END
quit
Connection closed by foreign host. [root@localhost ~]# telnet 192.168.111.5 11211
Trying 192.168.111.5...
Connected to 192.168.111.5.
Escape character is '^]'.
get test
VALUE test 0 5
nihao
END

四、总结

    1. keepalived和memcached没有任何关系,他只是做magent高可用

mamcached+(magent+keepalived高可用)搭建及理论概述的更多相关文章

  1. Ubuntu构建LVS+Keepalived高可用负载均衡集群【生产环境部署】

    1.环境说明: 系统版本:Ubuntu 14.04 LVS1物理IP:14.17.64.2   初始接管VIP:14.17.64.13 LVS2物理IP:14.17.64.3   初始接管VIP:14 ...

  2. rabbitmq+haproxy+keepalived高可用集群环境搭建

    1.先安装centos扩展源: # yum -y install epel-release 2.安装erlang运行环境以及rabbitmq # yum install erlang ... # yu ...

  3. Oracle Compute云快速搭建MySQL Keepalived高可用架构

    最近有个客户在测试Oracle Compute云,他们的应用需要使用MySQL数据库,由于是企业级应用一定要考虑高可用架构,因此有需求要在Oracle Compute云上搭建MySQL高可用集群.客户 ...

  4. 18-基于CentOS7搭建RabbitMQ3.10.7集群镜像队列+HaProxy+Keepalived高可用架构

    集群架构 虚拟机规划 IP hostname 节点说明 端口 控制台地址 192.168.247.150 rabbitmq.master rabbitmq master 5672 http://192 ...

  5. Keepalived高可用集群应用

    Keepalived高可用集群应用 1.keepalived服务说明 1.1.keepalived介绍 Keepalived是一个用C语言编写的路由软件.该项目的主要目标是为Linux系统和基于Lin ...

  6. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...

  7. 测试LVS+Keepalived高可用负载均衡集群

    测试LVS+Keepalived高可用负载均衡集群 1. 启动LVS高可用集群服务 此时查看Keepalived服务的系统日志信息如下: [root@localhost ~]# tail -f /va ...

  8. 案例一(haproxy+keepalived高可用负载均衡系统)【转】

    1.搭建环境描述: 操作系统: [root@HA-1 ~]# cat /etc/redhat-release CentOS release 6.7 (Final) 地址规划: 主机名 IP地址 集群角 ...

  9. keepalived高可用集群。

    keepalived故障切换转移原理1vrrp协议:(vritual router redundancy protocol)虚拟路由冗余协议,2故障转移.keepalived三大功能1实现物理高可用, ...

随机推荐

  1. springboot 整合 Froala Editor 3

    springboot项目中使用 Froala Editor 3,参考官网文档:https://www.froala.com/wysiwyg-editor/docs/overview 下载文件后,引入c ...

  2. k8s、jenkins集成

    参考连接 http://www.uml.org.cn/jchgj/201804252.asp https://huanqiang.wang/2018/03/30/Jenkins-Gitlab-Kube ...

  3. 【JS新手教程】replace替换一个字符串中所有的某单词

    JS中的replace方法可以替换一个字符串中的单词.语句的格式是: 需要改的字符串.replace(字符串或正则表达式,替换成的字符串) 如果第一个参数用字符串,默认是找到该字符串中的第一个匹配的字 ...

  4. 【Anaconda】关于conda使用环境未被激活的问题

    前言 在win10系统中安装Anaconda,并创建虚拟环境,但是不明白为什么切换环境之后并未激活要使用的虚拟环境. conda常用命令 activate // 切换到base环境 activate ...

  5. JavaScript图形实例:图形的扇形变换和环形变换

    1.1  扇形变换 将如图1所示的上边长方形的图形变换为下边的扇形图形的变换称为扇形变换. 设长方形图形中任一点P1(X1,Y1)变换为扇形图形上的点P2(X2,Y2),长方形的长为X,扇形圆心坐标为 ...

  6. vue-cli3 + ts 定义全局方法

    一.定义全局方法不生效  虽然在main.ts当中定义了全局方法,但是在使用的时候根本找不到,也是无语了. 二.解决方法 我在网上找了很多方法,其中很多大神都是这样做的:  但是,我这样写了还是不生效 ...

  7. .bashrc修改环境变量文件后ls之类的不能用了

    在命令行中输入 export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin之后在修改回来

  8. 洛谷 题解 UVA247 【电话圈 Calling Circles】

    [题意] 如果两个人互相打电话(直接或者间接),则说他们在同一个电话圈里.例如,\(a\)打给\(b\),\(b\)打给\(c\),\(c\)打给\(d\),\(d\)打给\(a\),则这四个人在同一 ...

  9. C++_没有STL不能解决的问题之——<algorithm>

    这个坑好大,慢慢写 一.非修改式序列操作 1.find() 在区间中查找出某元素第一次出现的位置(注意!!是返回地址值) int main(){ ]={,,,,,}; int *b; b=find(a ...

  10. GATK4注意事项

    近期在测试多样品的WES的过程中发现用HC得到gvcf之后,合并多个样品的gvcf文件的过程中,使用CombineGVCFs的过程中很慢,发现官网推荐使用GenomicsDBImport 用法如下: ...