干货,memcached+keepalived实现主主复制和高可用,详解!

keepalived+memcached主主复制高可用介绍:

客户端连接两台服务器之间的VIP地址,如果后端服务器故障自动切换。

Keepalive原理:

1.故障检测:

Keepalived的作用是检测memcached服务器的状态是否正常。

2.主从切换:

Keepalived如果检测到memcached服务发生DOWN机或者死机等,能将VIP从主服务器移至从服务器

3.Keepalived如何发现memcached异常:

1) keepalived在memcached主服务器产生一个虚拟IP

2)keepalived可以通过不断的检测memcached主服务器的11211端口是否正常工作,如果发现memcached Down机,虚拟IP就从主服务器移到从服务器

高可用架构应用场景:

如果memcached分布式节点比较多,那么完全不需要做基于复制的高可用架构。

基于复制的高可用架构一般用在memcached单节点存放缓存或者session。

部署环境介绍:
操作系统:Centos 7 64位

Node1:192.168.100.12  主节点

Node2:192.168.100.13  备节点
1、环境部署:

两台服务器部署方式一样,按照如下方式部署好即可

(1)安装memcached依赖libevent

[[email protected] ~]# yum -y install libevent libevent-devel

(2)安装c语言编译环境

[[email protected] ~]# yum -y install c++ gcc

(3)安装具有复制功能的memcached版本

wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz
tar zxvf 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

make
make install

注:编译报错解决

修改memcached.c文件即可:

修改前

[[email protected] memcached-1.2.8-repcached-2.2]# 

vim memcached.c
  56 #ifndef IOV_MAX
  57 #if defined(__FreeBSD__) || defined(__APPLE__)
  58 # define IOV_MAX 1024
  59 #endif
  60 #endif

修改后

56 #ifndef IOV_MAX
57 # define IOV_MAX 1024
58 #endif

安装完成目录结构如下:

[[email protected] ~]# tree /usr/local/memcached_replication/
/usr/local/memcached_replication/
├── bin
│   ├── memcached
│   └── memcached-debug
└── share
    └── man
        └── man1
            └── memcached.1

查询memcached复制版本的的命令帮助只是比普通的memcached多了一个-x选项,就是指定复制的memcached服务器主机名或IP地址

[[email protected] ~]# /usr/local/memcached_replication/bin/memcached -h
-x <ip_addr>  hostname or IP address of peer repcached
2、以主从复制架构启动memcached

1)创建memcached用户

[[email protected] ~]# useradd -r -s /sbin/nologin memcached

2)启动memcached,带复制功能

Node1节点启动:

[[email protected] ~]# cd /usr/local/memcached_replication/bin/
[[email protected] bin]# ./memcached -d -u memcached -m 512 -x 192.168.100.13
[[email protected] bin]# ps aux | grep mem
memcach+  20208  0.0  0.0  11704   872 ?        Ss   23:14   0:00 ./memcached -d -u memcached -m 512 -x 192.168.100.13

node2节点启动:

[[email protected] ~]# cd /usr/local/memcached_replication/bin/
[[email protected] bin]# ./memcached -d -u memcached -m 512 -x 192.168.100.12
[[email protected] bin]# ps aux | grep memcached
memcach+  12162  0.0  0.0  11648   872 ?        Ss   18:22   0:00 ./memcached -d -u memcached -m 512 -x 192.168.100.12
验证复制架构:

在node1节点插入数据

[[email protected] ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is ‘^]‘.
set username 0 0 9
node1xmfb
STORED
get username
VALUE username 0 9
node1xmfb
END

Node2节点验证数据是否存在

[[email protected] ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is ‘^]‘.
get username
VALUE username 0 9
node1xmfb
END

如果在节点1写入数据节点2可以看到那么就说明memcached的主从复制架构是没有问题的,就可以在memcached主从复制的基础上使用keepalived产生VIP了。

3.Keepalived+memcached高可用架构部署与配置
1)keepalived包安装
yum install keepalived* -y
2)配置keepalived

Keepalived主节点配置文件设置如下所示:

[[email protected] bin]# cat /etc/keepalived/keepalived.conf
global_defs {
   router_id memcached_replication  #路由标识,主从保持一致
}

vrrp_instance mem_1 {         #定义VRRP热备实例
    state MASTER              #MASTER表示主节点
    interface eth0            #承载VIP地址的物理接口
    virtual_router_id 51      #虚拟路由器的ID号,主备相同
    priority 100              #优先级,数值越高优先级越大
    advert_int 1              #通知间隔秒数(心跳频率)
    nopreempt                #不主动抢占资源,只在master或者高优先级服务器设置
    authentication {          #认证信息配置,主从服务器保持一致
            auth_type PASS       #设置认证类型为密码
            auth_pass asdfgh     #设置认证的密码
    }
# 定义VIP是什么
    virtual_ipaddress {
        192.168.100.100
    }
}

# VIP故障检测
virtual_server 192.168.100.100 11211 {
    deploy_loop 6
    protocol TCP
    # 配置主服务器地址端口
    real_server 192.168.100.10 11211 {
        weight 3
        notify_down /shell/memcached.sh # 当memcached当机时,执行keepalived服务停止
        }
    TCP_CHECK {
        connect_timeout 3      #连接超时
        nb_get_retry 3         #重试次数
        delay_before_retry 3   #重试时间间隔
        connect_port 11211     #连接端口
    }
}

keepalived备节点配置文件设置如下所示:

[[email protected] bin]# cat /etc/keepalived/keepalived.conf
global_defs {
   router_id memcached_replication  #路由标识,主从保持一致
}

vrrp_instance mem_1 {            #定义VRRP热备实例
    state BACKUP             #MASTER表示主节点
    interface eth0            #承载VIP地址的物理接口
    virtual_router_id 51     #虚拟路由器的ID号,主备相同
    priority 50              #优先级,数值越高优先级越大
    advert_int 1             #通知间隔秒数(心跳频率)
    nopreempt                #不主动抢占资源,只在master或者高优先级服务器设置
    authentication {         #认证信息配置,主从服务器保持一致
            auth_type PASS       #设置认证类型为密码
            auth_pass asdfgh     #设置认证的密码
    }
# 定义VIP是什么
    virtual_ipaddress {
        192.168.100.100
    }
}

virtual_server 192.168.100.100 11211 {
    deploy_loop 6
    protocol TCP
    # 配置主服务器地址端口
    real_server 192.168.100.11 11211 {
        weight 3
        notify_down /shell/memcached.sh
        }
    TCP_CHECK {
        connect_timeout 3      #连接超时
        nb_get_retry 3         #重试次数
        delay_before_retry 3   #重试时间间隔
        connect_port 11211     #连接端口
    }
}

两个节点都添加脚本:如果监听的memcached故障,那么就本地keepalived,实现VIP漂移

[[email protected] ~]# cat /shell/memcached.sh
systemctl stop keepalived
[[email protected] ~]# chmod +x /shell/memcached.sh
3)两个节点启动keepalived服务
[[email protected] ~]# systemctl start keepalived.service
4、高可用验证

验证vip已经启动

[[email protected] ~]# ip address show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:85:36:db brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.12/24 brd 192.168.100.255 scope global dynamic eth0
       valid_lft 20059sec preferred_lft 20059sec
    inet 192.168.100.100/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe85:36db/64 scope link
       valid_lft forever preferred_lft forever
You have new mail in /var/spool/mail/root

强制关闭主节点memcached进程,可以看到vip地址已经不见了

[[email protected] ~]# ps aux | grep keepliaved
root      45424  0.0  0.0 112648   980 pts/0    S+   11:24   0:00 grep --color=auto keepliaved
[[email protected] ~]# ps aux | grep mem
memcach+  45419  0.0  0.1  12672  1924 ?        Ss   11:22   0:00 ./memcached -d -u memcached -m 512 -x 192.168.100.13
root      45427  0.0  0.0 112648   976 pts/0    S+   11:24   0:00 grep --color=auto mem
[[email protected] ~]# kill -9 45419
[[email protected] ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:85:36:db brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.12/24 brd 192.168.100.255 scope global dynamic eth0
       valid_lft 16561sec preferred_lft 16561sec
    inet6 fe80::20c:29ff:fe85:36db/64 scope link
       valid_lft forever preferred_lft forever

在从节点查看,memcached地址又出现了。

[[email protected] ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:9e:47:61 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.13/24 brd 192.168.100.255 scope global dynamic eth0
       valid_lft 14759sec preferred_lft 14759sec
    inet 192.168.100.100/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe9e:4761/64 scope link
       valid_lft forever preferred_lft forever

操作成功,谢谢观看!

原文地址:http://blog.51cto.com/13687553/2152984

时间: 2024-08-09 07:55:47

干货,memcached+keepalived实现主主复制和高可用,详解!的相关文章

Redis的高可用详解:Redis哨兵、复制、集群的设计原理,以及区别

谈到Redis服务器的高可用,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制. 哨兵(Sentinel):可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转移的功能. 复制(Replication):则是负责让一个Redis服务器可以配备多个备份的服务器. Redis正是利用这两个功能来保证Redis的高可用. 哨兵(sentinal) 哨兵是Redis集群架构中非常重要的一个组件,哨兵的出现主要是解决了主从复制出现故障时需要人为干预的问题. 1.Redis哨兵

keepalived双主模式实现nginx高可用及LNAMMP架构

keepalived双主模式实现nginx高可用及LNAMMP架构 一.利用keepalived实现nginx调度器高可用: 二.构建LNAMMP架构: 1) Nginx既是前端调度器,又是缓存服务器: 2) 将php的session缓存于memcached中: 3) 在Apache和php上部署Discuz论坛程序: 4) 使用https连接,即使用户使用的是http协议也可以以https协议进行访问: ---------------------------------------------

Mysql双主互备+keeplived高可用架构(部分)

一.Mysql双主互备+keeplived高可用架构介绍 Mysql主从复制架构可以在很大程度保证Mysql的高可用,在一主多从的架构中还可以利用读写分离将读操作分配到从库中,减轻主库压力.但是在这种架构中,主库出现故障时需要手动将一台从库提升为主库.在对写操作要求较高的环境中,主库故障在主从架构中会成为单点故障.因此需要主主互备架构,避免主节点故障造成写操作失效. 在双主互备的架构中,每台Mysql都充当主服务器,同时充当对方的从服务器.在任意一台服务器上的写操作都会被复制到另一台服务器上,从

缓存DNS服务器和主DNS服务器的快速搭建详解

缓存DNS服务器和主DNS服务器的快速搭建详解 一.设定配置内容假设我们已经在网上注册了wangej.com域名,得到的IP网络是172.16.12.0/24ns服务器是:172.16.12.1www服务器:172.16.12.1,另外一个地址:172.16.12.3mail服务器:172.16.12.2ftp主机在www服务器上,即ftp为www的别名 二.准备工作:这里我们使用bind97来搭建我们的DNS服务器,首先需要安装好bind97.i386.bind97-libs.i386.bin

oracle dataguard主备库参数文件配置详解

主库参数详解: 保持同一个Data Guard中所有的DB_NAME相同 DB_NAME=ora11g 为一个数据库指定一个唯一的名称,该参数一经指定就不会发生改动除非DBA主动改动 DB_UNIQUE_NAME=ora11g_primary 初始化参数LOG_ARCHIVE_CONFIG用于控制发送归档日志到远程位置.接收远程归档日志,并指定Data  Guard配置的惟一数据库名,默认值为SEND,RECEIVE,NODG_CONFIG. 当设置该参数为SEND时,会激活发送归档日志到远程位

keepalived实现LVS集群的高可用(1)

HA集群:高可用集群: 实现方式:vrrp协议和ais完备HA集群 vrrp可以由keepalived实现 ais可以由heartbeat和corosync vrrp协议:虚拟冗余路由协议 VRRP为虚拟路由冗余协议,目的就是为了解决静态路由单点故障问题.在一个VRRP虚拟路由器中,有多台物理的VRRP路由器,但是这多台的物理的机器并不能同时工作,而是由一台称为MASTER的负责路由工作,其它的都是BACKUP,MASTER并非一成不变,VRRP让每个VRRP路由器参与竞选,最终获胜的就是MAS

Mysql主从数据库架构的复制原理及配置详解

1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收

keepalived实现Lvs-dr集群的高可用

Lvs-dr:Direct Routing,被称为直接路由:通过修改请求报文的MAC地址来进行转发:源MAC地址是DIP所在接口的MAC地址,目标MAC时前端主机挑选出某台后端的RS的RIP所在接口的MAC地址:从新封装时IP地址地址不会发生变化:下图为lvs-dr结构图 1.当客户端请求资源时,路由1会把请求报文发送给前传主机:在发送给前端主机时路由1不会变更请求报文的IP守护,而是在报文上再添加一层MAC守护 2.当前端主机收到请求报文后,拆封原来的MAC守护:自己再添加一层MAC守护发送给

RHEL6搭建 keepalived (HA) 任意单故障节点的高可用集群

搭建 keepalived (HA) 任意单故障节点的高可用集群 实验拓扑图: 实验要求: 使用Keepalived实现web服务器的高可用 Web服务器IP地址分别为192.168.4.53和192.168.4.54 Web服务器53 为主服务器,Web服务器54为备服务器 Web服务器的VIP地址为192.168.4.251 客户端通过访问VIP地址访问Web页面 实验步骤: 实验准备 配置yum源 # service iptables stop            //关闭防火墙 # c