搭建memcached 集群 + keepalived 实现高可用
程序员文章站
2022-07-03 14:07:11
...
目录
一. Memcached作用
- 为解决memcached单点故障,需要实现memcached缓存的高可用。
- 首先,需要实现 Memcached的主主复制。指任意一台memcached服务器修改数据都会被同步到另外一台,但是memcached API无法判断连接哪一台服务器,因此需要VIP。
- 其次,通过 Keepalived 产生的VIP连接memcached服务器,提供高可用架构。
二. 搭建高可用memcache
2.1 案例设计
memcache主服务器,IP地址:12.0.0.24
memcache从服务器,IP地址:12.0.0.25
memcache客户端,IP地址:12.0.0.26
需要安装的软件:
- 主服务器需要安装:memcached,libevent,keepalived,magent
- 从服务器需要安装:memcached,libevent,keepalived
2.2 主从服务器搭建memcache
主从服务器都是需要安装memcache,以下只演示主服务器的操作
//安装依赖环境
[aaa@qq.com opt]# yum install gcc gcc-c++ make -y
安装事件libevent
[aaa@qq.com opt]# tar zxvf libevent-2.1.8-stable.tar.gz
cd libevent-2.1.8-stable
./configure --prefix=/usr
make && make install
安装memcached
[aaa@qq.com opt]# tar zxvf memcached-1.5.6.tar.gz
[aaa@qq.com memcached-1.5.6]# cd ../memcached-1.5.6/
./configure --with-libevent=/usr
[aaa@qq.com memcached-1.5.6]# make && make install
2.3 主服务器安装magent代理
[aaa@qq.com opt]# mkdir /opt/magent
[aaa@qq.com opt]# tar zxvf magent-0.5.tar.gz -C /opt/magent
cd /opt
cd magent
vi ketama.h //在文件开头处修改前两行,加上#endif(文件末尾也有#endif,删除末尾的#endif)
#ifndef SSIZE MAX
#define SSIZE_MAX 32767
#endif
vim Makefile
LIBS = -levent -lm //第一行末尾加-lm (不是数字1)
make //修改完后可以编译了
ls //会产生magent可执行程序
#将magent可执行程序复制到/usr/bin中
[aaa@qq.com magent]# cp magent /usr/bin/
#下载远程传输 这样从服务器就不需要修改了
[aaa@qq.com magent]# yum install openssh-clients -y
'//将magent可执行程序复制到从服务器的/usr/bin中'
'//此命令需要输入yes,输入从服务器的密码才能将文件拷贝过去,根据提示操作即可'
[aaa@qq.com magent]# scp magent aaa@qq.com12.0.0.25:/usr/bin/
2.4 主从服务器搭建keeplived
#主从服务器都需要安装
[aaa@qq.com magent]# yum install keepalived -y
2.5 修改主服务器中keepalived.conf
[aaa@qq.com keepalived]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
'//添加此段:定义了一个函数脚本'
vrrp_script magent { '//脚本名字自定义'
script "/opt/shell/magent.sh" '//脚本指定位置'
interval 2 '//时间间隔'
}
global_defs { '//区域指定全局参数'
notification_email {
aaa@qq.com.loc
aaa@qq.com.loc
aaa@qq.com.loc
}
notification_email_from Alexandre.aaa@qq.com.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id MAGENT_HA '//执行名称备用服务器不能一样'
}
vrrp_instance VI_1 { '//实例名称'
state MASTER
interface ens33 '//承载网络为VIP地址的物理接口'
virtual_router_id 51
priority 100 '//优先级 备用服务器小于主服务器'
advert_int 1 '//通告间隔秒数'
authentication {
auth_type PASS '//认证类型'
auth_pass 1111 '//密码验证'
}
track_script { '//调用刚刚的函数在实例里面调用,调用名字'
magent
}
virtual_ipaddress {
20.0.0.100 '//漂移地址'
}
}
#下面全部删除
2.6 配置从服务器中的keepalived.conf
[aaa@qq.com bin]# cd /etc/keepalived/
[aaa@qq.com keepalived]# ls
keepalived.conf
'//备份配置文件
[aaa@qq.com keepalived]# mv keepalived.conf keepalived.conf.bak
#拷贝主服务器的kaeepalived配置文件到从服务器
[aaa@qq.com magent]# scp /etc/keepalived/keepalived.conf aaa@qq.com12.0.0.25:/etc/keepalived
[aaa@qq.com keepalived]# vim keepalived.conf
#下面这几项跟主服务器不一样
router_id MAGENT_HB '//id名和第一台要不一样,从服务器改为MAGENT_HB'
state BACKUP '//从服务器为BACKUP'
virtual_router_id 52 '//id号和第一台不一样即可'
priority 90 '//优先级低与主服务器 '
2.7 主服务器创建magent脚本
- 上面keepalived.conf定义了函数定义脚本我们来创建
[aaa@qq.com magent]# mkdir /opt/shell
[aaa@qq.com magent]# cd /opt/shell/
[aaa@qq.com shell]# vim 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 12.0.0.188 -p 12000 -s 12.0.0.24:11211 -b 12.0.0.25:11211
else
pkill -9 magent
fi
'//如下解释'
-n 51200 '//定义用户最大连接数'
-l 20.0.0.100 '//指定虚拟IP'
-p 12000 '//指定端口号'
-s '//指定主缓存服务器12.0.0.24'
-b '//指定从缓存服务器12.0.0.25'
11211 '//memcache端口号'
2.8 主从服务器启动
[aaa@qq.com shell]# chmod +x magent.sh '//增加执行权限'
[aaa@qq.com shell]# systemctl stop firewalld.service
[aaa@qq.com shell]# systemctl start keepalived.service '//启动服务 稍微有点慢'
[aaa@qq.com shell]# netstat -ntap | grep 12000
tcp 0 0 20.0.0.100:12000 0.0.0.0:* LISTEN 100623/magent
2.9 验证主从
- 主服务器
[aaa@qq.com shell]# vim /var/log/messages
搜索'//Transition to MASTER STATE',有即成功
[aaa@qq.com shell]# ip addr '//查看漂移地址是否绑定成功'
.....省略内容....
inet 12.0.0.188/32 scope global ens33
.....省略内容....
- 从服务器
[aaa@qq.com keepalived]# vim /var/log/messages
搜索'//Entering BACKUP STATE',有即成功
[aaa@qq.com keepalived]# ip addr '//查看漂移地址是否绑定成功'
...省略内容
inet 12.0.0.188/32 scope global ens33
'//绑定成功 '
...省略内容.....
2.10 主从服务器开启memcache并测试本地连接
- 参数说名
-d选项是作为守护进程在后台运行
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话
-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件
-vv是以very vrebose模式启动,将调试信息和错误输出到控制台
#主从memcache
memcached -m 512k -u root -d -l 12.0.0.24 -p 11211
memcached -m 512k -u root -d -l 12.0.0.25 -p 11211
netstat -anpt | grep 11211
- 主memcache
yum -y install telnet
telnet 12.0.0.24 11211
- 从memcache
yum -y install telnet
telnet 12.0.0.25 11211
2.11 #客户机测试(12.0.0.26)
#进行连接
[aaa@qq.com ~]# telnet 12.0.0.188 12000
Trying 12.0.0.188...
Connected to 12.0.0.188.
Escape character is '^]'.
add pei 0 0 4 '//客户端插入并新建一个数据'
1234
STORED
#返回主服务器查看是否同步数据
[aaa@qq.com shell]# telnet 12.0.0.24 11211
Trying 12.0.0.24...
Connected to 12.0.0.24.
Escape character is '^]'.
get pei '//查看数据'
VALUE pei 0 4
1234
END
#从服务器进行验证
[aaa@qq.com shell]# telnet 12.0.0.25 11211
Trying 12.0.0.25...
Connected to 12.0.0.25.
Escape character is '^]'.
get pei '//查看数据'
VALUE pei 0 4
1234
END
'//测试成功,主从都成功生成数据'
2.12 测试高可用性
主memcache里
systemctl stop keepalived
在客户机里依然是无感知的,
[aaa@qq.com ~]# telnet 12.0.0.188 12000
Trying 12.0.0.188...
Connected to 12.0.0.188.
Escape character is '^]'.
get pei
VALUE pei 0 4
1234
END
上一篇: 浏览器渲染原理
下一篇: 高性能内存对象缓存memcached
推荐阅读
-
Spring-Cloud Eureka注册中心实现高可用搭建
-
haproxy+keepalived实现高可用负载均衡(实例配置)
-
keepalived实现nginx高可用
-
Linux系统 CentOS 7怎么搭建集群? 搭建高可用集群的步骤
-
haproxy+keepalived实现高可用负载均衡(理论篇)
-
CentOS下RabbitMq高可用集群环境搭建教程
-
MongoDB高可用集群搭建
-
[图文][提供可行性脚本] CentOS 7 Fencing+Pacemaker三节点搭建高可用集群
-
Linux利用keepalived实现lvs的高可用性的操作方法
-
一张图讲解最少机器搭建FastDFS高可用分布式集群安装说明