设为首页 收藏本站
查看: 1402|回复: 0

[经验分享] 干货,memcached+keepalived实现主主复制和高可用,详解!

[复制链接]

尚未签到

发表于 2018-12-25 12:23:09 | 显示全部楼层 |阅读模式
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
[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
  注:编译报错解决

  修改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、以主从复制架构启动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* -y
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
4、高可用验证
  验证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
  操作成功,谢谢观看!




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-655691-1-1.html 上篇帖子: nosql介绍,memrcached介绍,安装memcached,查看memcachedq状态 下篇帖子: memcached+magent组成高可用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表