memcached复制+keepalived高可用架构

2023年 7月 16日 84.9k 0

1.memcached高可用架构介绍

1.服务器端实现memcached复制

2.使用keepalived产生VIP连接主数据库

3.程序配置的memcached服务器是VIP

image008

1.1.keepalived+memcached主主复制高可用介绍

Keepalived+memcached主主复制高可用架构:客户端连接两台服务器之间的VIP地址,如果后端服务器故障自动切换。

image010

Keepalive原理:

1.故障检测:Keepalived的作用是检测memcached服务器的状态是否正常。

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

3.Keepalived是如何发现memcached不正常的?

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

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

1.2.高可用架构应用场景

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

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

2.环境部署

2.1.部署环境介绍

操作系统:Centos 7.2 64位

Node1:192.168.100.12  主节点

Node2:192.168.100.13  备节点

2.2.环境部署

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

(1)安装memcached依赖libevent

[root@node1 ~]# yum -y install libevent libevent-devel

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

[root@node1 ~]# 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

编译报错解决:

image011

修改memcached.c文件即可:

修改前如下:

[root@node1 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

安装完成目录结构如下:

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

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

[root@node1 ~]# /usr/local/memcached_replication/bin/memcached -h
-x <ip_addr>  hostname or IP address of peer repcached

2.3.以主从复制架构启动memcached

(1)创建memcached用户

[root@node1 ~]# useradd -r -s /sbin/nologin memcached

(2)启动memcached,带复制功能

Node1节点启动:

[root@node1 ~]# cd /usr/local/memcached_replication/bin/
[root@node1 bin]# ./memcached -d -u memcached -m 512 -x 192.168.100.13
[root@node1 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节点启动:

[root@node2 ~]# cd /usr/local/memcached_replication/bin/
[root@node2 bin]# ./memcached -d -u memcached -m 512 -x 192.168.100.12
[root@node2 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节点插入数据

[root@node1 ~]# 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节点验证数据是否存在

[root@node2 ~]# 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*

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

[root@node1 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备节点配置文件设置如下所示:

[root@node2 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漂移

[root@node1 ~]# cat /shell/memcached.sh
systemctl stop keepalived
[root@node1 ~]# chmod +x /shell/memcached.sh

3.两个节点启动keepalived服务

[root@node1 ~]# systemctl start keepalived.service

3.1.高可用验证

验证vip已经启动

[root@node1 ~]# 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地址已经不见了

[root@node1 ~]# ps aux | grep keepliaved
root      45424  0.0  0.0 112648   980 pts/0    S+   11:24   0:00 grep --color=auto keepliaved
[root@node1 ~]# 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
[root@node1 ~]# kill -9 45419
[root@node1 ~]# 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地址又出现了。

[root@node2 ~]# 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

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论