Memcached 主主复制 + Keepalived 高可用架构【附上原理】

目录:

1·Memcached 主主复制概念
2·Memcached 高可用的实现
3·案例部署
4·总结
前端


Memcached 主主复制概念

(1)主主复制概念:c++

Memcached 主主复制是指在任意一台 Memcached 服务器修改数据都会被同步到另一台,可是 Memcached API 客户端没法判断链接到那一台 Memcached 服务器,全部须要设置 VIP 地址,提供给 Memcached API 客户端进行链接。shell


(2)文章推荐:vim

知道了主主复制,那么须要了解 Memcached 是什么,还有一些最基本的状况,好比:
1) Memcached 功能
2)Memcached 特征
3)Memcached 储存方式
能够看看上篇文章Memcached 高性能缓存对象缓存


Memcached 高可用的实现

(1)怎么实现 Memcached 的高可用服务器

1)这里就须要牵扯到主主复制的概念了,由于Memcached 主主复制这种架构,在程序链接的时候不会知道应该链接哪个主服务器,因此须要在前端加上 VIP 地址,实现高可用架构。这里能够用 Keepalived 实现,因此说,Keepalived 的做用就是来检测 Memcached 服务器的状态是否正常。架构


2)Keepalived 会不断的检测 Memcached 主服务器的 11211端口,若是检测到 Memcached 服务发生故障或宕机等状况,就会将 VIP 从主服务器上转移到从服务器,从而实现 Memcached 的高可用性。tcp


3)Memcached 高可用架构图
Memcached 主主复制 + Keepalived 高可用架构【附上原理】分布式


案例部署说明

(1)部署环境文字说明:ide

1)由于这篇文章是演示 Memcached 的主主复制+ Keepalived 的高可用架构,因此这里不须要安装 Memcached API 。请提早安装编译环境:gcc 、gcc-c++ 、 make ,文章中不会提示安装!


2)整个环境部署所须要的源码包将会无偿提供,须要的请点击:Memcached 高可用源码包,密码:sxsr


(2)部署环境表格说明:

名称 IP 地址 操做系统 主要软件包
Memcached 主1 192.168.154.128 CenOS 7.4 libevent-2.1.8-stable.tar.gz 、memcached-1.5.6.tar.gz 、 magent-0.5.tar.gz
Memcached 主2 192.168.154.129 CenOS 7.4 libevent-2.1.8-stable.tar.gz 、memcached-1.5.6.tar.gz
Linux 系统 192.168.154.130 CenOS 7.4 telnet 用于测试

开始部署

(1)在 Memcached 主1解压、安装 所须要的源码包
1)关闭防火墙

[root@localhost memcached]# systemctl stop firewalld.service
[root@localhost memcached]# setenforce 0

2)解压、安装源码包 libevent-2.1.8-stable.tar.gz

[root@localhost memcached]# tar zxvf libevent-2.1.8-stable.tar.gz -C /opt/
[root@localhost memcached]# cd /opt/libevent-2.1.8-stable
[root@localhost libevent-2.1.8-stable]# ./configure --prefix=/usr ---(指定安装路径)
[root@localhost libevent-2.1.8-stable]# make && make install
[root@localhost libevent-2.1.8-stable]# ln -s /usr/lib/libevent-2.1.so.6  /usr/lib64/libevent-2.1.so.6 --(这里必须将模块作一个软链接,由于启动 Memcached 时须要在/usr/lib64下寻找libevent-2.1.so.6模块)

3)解压、安装源码包 memcached-1.5.6.tar.gz

[root@localhost memcached]# tar zxvf memcached-1.5.6.tar.gz -C /opt
[root@localhost memcached]# cd /opt/memcached-1.5.6
[root@localhost memcached-1.5.6]# ./configure --with-libevent=/usr ---(这里安装须要指定 libevent 的安装路径)
[root@localhost memcached-1.5.6]# make && make install

4)安装、解压软件包 magent-0.5.tar.gz

[root@localhost ~]# mkdir /opt/magent
[root@localhost memcached]# tar xvf magent-0.5.tar.gz -C /opt/magent
将会得出如下文件:
ketama.c
magent.c
ketama.h
Makefile
[root@localhost memcached]# cd /opt/magent
[root@localhost magent]# vim ketama.h  ---(如今没有 make 文件,须要修改才能得出 make 执行文件)
修改以下:
#ifndef SSIZE_MAX 
#define SSIZE_MAX 32767

Memcached 主主复制 + Keepalived 高可用架构【附上原理】

[root@localhost magent]# vim Makefile ---(继续修改文件)
修改内容:
LIBS = -levent -lm

Memcached 主主复制 + Keepalived 高可用架构【附上原理】

[root@localhost magent]# make ----(文件修改完成后就能够 make)
[root@localhost magent]# cp magent /usr/bin

(2)在 Memcached 主2 解压、安装 所须要的源码包
1)关闭防火墙

[root@localhost memcached]# systemctl stop firewalld.service
[root@localhost memcached]# setenforce 0

2)解压、安装源码包 libevent-2.1.8-stable.tar.gz

[root@localhost memcached]# tar zxvf libevent-2.1.8-stable.tar.gz -C /opt/
[root@localhost memcached]# cd /opt/libevent-2.1.8-stable
[root@localhost libevent-2.1.8-stable]# ./configure --prefix=/usr ---(指定安装路径)
[root@localhost libevent-2.1.8-stable]# make && make install
[root@localhost libevent-2.1.8-stable]# ln -s /usr/lib/libevent-2.1.so.6  /usr/lib64/libevent-2.1.so.6 --(这里必须将模块作一个软链接,由于启动 Memcached 时须要在/usr/lib64下寻找libevent-2.1.so.6模块)

3)解压、安装源码包 memcached-1.5.6.tar.gz

[root@localhost memcached]# tar zxvf memcached-1.5.6.tar.gz -C /opt
[root@localhost memcached]# cd /opt/memcached-1.5.6
[root@localhost memcached-1.5.6]# ./configure --with-libevent=/usr ---(这里安装须要指定 libevent 的安装路径)
[root@localhost memcached-1.5.6]# make && make install

4)把 主1 的 magent 文件,远程拷贝一份到 主 2 ,这里须要在 主1 上操做

[root@localhost magent]# yum install telnet -y ----(安装远程链接工具)
[root@localhost magent]# scp magent root@192.168.154.129:/usr/bin ---(发送给主 2 一份 )

(3)在 主 1 、主 2 上同时安装 Keepalived 软件
1)安装 Keepalived 、修改 Keepalived 配置文件

[root@localhost ~]# yum install keepalived -y
[root@localhost ~]# vim /etc/keepalived/keepalived.conf  ---(修改Keepalived主配置文件)
! Configuration File for keepalived

vrrp_script magent {                              #定义函数
        script "/opt/shell/magent.sh"           #临时定义的路径,因此还须要手动建立
        interval 2                                        #每隔两秒检测
}
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id Master_A         #定义id名称,主 2  能够任意修改
     如下几行须要删除
}   

vrrp_instance VI_1 {
        state MASTER                                 #定义状态,主 2  定义为 BANKUP
        interface ens33                                #WANG
    virtual_router_id 51
    priority 100                                      #优先级,主 2 要低于 主 1
    advert_int 1
    authentication {
        auth_type PASS                          #身份验证,这里须要和 主2 一致
        auth_pass 1111
    }

track_script {                                          #开始调用函数
        magent
}

    virtual_ipaddress {                            #定义VIP 漂移地址
        192.168.154.188
    }
}
如下全部配置删除

2)编写触发式脚本

[root@localhost ~]# mkdir /opt/shell   ----(这里路径须要和 Keepalived 主配置文件里路径一致)

[root@localhost ~]# vim /opt/shell/magent.sh
内容以下:
K=$(ps -ef | grep keepalived | grep -v grep | wc -l)
if [ $K -gt 0 ];then
magent -u root -n 51200 -l 192.168.154.188 -p 12000 -s  192.168.154.128:11211 -b 192.168.154.129:11211
else
pkill -9 magent
fi

对以上参数说明:
-n 51200 //定义用户最大链接数
-l 192.168.154.188 //指定虚拟ip
-p 12000 //指定端口号
-s //指定主缓存服务器
-b //指定从缓存服务器

[root@localhost shell]# scp magent.sh root@192.168.154.129:/opt/shell ----(发送给 主 2 一份,就不用在 主2 上写了)


3)给与脚本执行权限、并启动 Keepalived 服务

[root@localhost ~]# chmod +x /opt/shell/magent.sh
[root@localhost keepalived]# scp keepalived.conf root@192.168.154.129:/etc/keepalived  ----(发送配置文件给 主 2)
[root@localhost keepalived]# systemctl start keepalived.service  ---(启动 keepalived 服务)
[root@localhost keepalived]# netstat -antp | grep 12000 ----(查看启动端口)
tcp        0      0 192.168.154.188:12000   0.0.0.0:*               LISTEN      51911/magent

4)启动 memcached 服务

[root@localhost ~]# memcached -m 512k -u root -d -l 192.168.154.128 -p 11211
[root@localhost ~]# netstat -antp | grep 11211 -----(查看端口)
tcp        0      0 192.168.154.128:11211   0.0.0.0:*               LISTEN      53856/memcached

5)在 主 2 上启动 Keepalived 与 Memcached 服务、建立目录

[root@localhost ~]# mkdir /opt/shell
[root@localhost shell]# systemctl start keepalived.service 
[root@localhost shell]# netstat -antp | grep 12000
tcp        0      0 192.168.154.188:12000   0.0.0.0:*               LISTEN      50521/magent 
[root@localhost ~]# memcached -m 512k -u root -d -l 192.168.154.129 -p 11211
[root@localhost ~]# netstat -antp | grep 11211

(4)服务搭建完成,开始在客户端测试主主复制:
1)客户端链接漂移地址写入数据

[root@localhost ~]# yum install telnet -y
[root@localhost ~]# telnet 192.168.154.188 12000 -----(远程链接VIP 地址 端口号 为 12000)
开始写入数据:
add username 0 0 6
123456
STORED

2)客户端链接 主1 的 真实 IP 地址 端口 11211 ,查看数据

[root@localhost ~]# telnet 192.168.154.128 12000
get username  -----(查看数据)
VALUE username 0 6   ----(写入的数据存在)
123456
END

以下图:
Memcached 主主复制 + Keepalived 高可用架构【附上原理】


3)客户端链接 主 2 的真实 IP 地址 端口 11211, 查看数据

[root@localhost ~]# telnet 192.168.154.129 11211
get username
VALUE username 0 6
123456
END

以下图:
Memcached 主主复制 + Keepalived 高可用架构【附上原理】


(5)开始验证,Keepalived 的高可用:
[root@localhost shell]# systemctl stop keepalived.service ------(中止主1 keepalived 服务)
[root@localhost ~]# telnet 192.168.154.188 12000 ----(客户端再次链接漂移地址,若是能链接成功,高可用成功)
[root@localhost ~]# ip addr ----(在 主 2 上查看漂移地址)
以下图:
Memcached 主主复制 + Keepalived 高可用架构【附上原理】

结论:

1·Memcached 是分布式内存对象缓存系统,由于全部数据都存储在内存中,从而经常使用于网站加速2·Memcached 分布式实现不是在服务端实现而是在客户端实现的3·Memcached 能够经过 Keepalived 实现 Memcached 服务的高可用性。

相关文章
相关标签/搜索