搭建memcached主主复制+keepalived高可用架构

搭建memcached主主复制+keepalived高可用架构

一、两台虚拟机分别安装带有复制功能的memcached(主和备安装过程一样)

  1. 卸载之前 memcache1 机器上的 1.5.1 版本

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached1 ~]# /usr/local/memcached/memcached_service.sh stop
[root@Memcached1 ~]# ps -ef| grep memcached                           #检查进程是否存在
[root@Memcached1 ~]# rm -rf /usr/local/memcached/</span></span>

  1. 两台虚拟机分别安装libevent

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached1 ~]# yum -y install gcc gcc-c++ make
[root@memcached1 ~]# tar -zxvf libevent-2.1.8-stable.tar.gz -C /usr/src/
[root@memcached1 ~]# cd /usr/src/libevent-2.1.8-stable/
[root@memcached1 libevent-2.1.8-stable]# ./configure --prefix=/usr/local/libevent
[root@memcached1 libevent-2.1.8-stable]# make && make install</span></span>

  1. 两台虚拟机分别安装memcached

<span style="background-color:#f8f8f8"><span style="color:#333333">1) [root@memcached1 ~]# tar zxvf memcached-1.2.8-repcached-2.2.tar.gz -C /usr/src/
   [root@memcached1 ~]# cd /usr/src/memcached-.2.8-repcached-2.2/  
   [root@memcached1 memcached-1.2.8-repcached-2.2]# ./configure \
   --prefix=/usr/local/memcached_replication \
   --enable-replication \
   --with-libevent=/usr/local/libevent
   [root@memcached1 memcached-1.2.8-repcached-2.2]# vim memcached.c
​
57行和59行删除</span></span>

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached1 memcached-1.2.8-repcached-2.2]# make && make install</span></span>

3)两台虚拟机分别启动memcached

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached1 ~]# ln -s /usr/local/libevent/lib/libevent-2.1.so.6 /usr/lib64/
[root@memcached1 ~]# ln -s /usr/local/memcached_replication/bin/* /usr/local/bin/
[root@memcached1 ~]# memcached -d -u root -m 128 -x 192.168.10.130  //备机ip地址</span></span>

同样启动memcached2服务器,注意启动Memcached服务时指向对端服务器。

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached1 ~]# netstat -antp |grep memcached</span></span>

4)使用 telnet 进行简单验证复制功能 在 memcached1 上插入一条具有特点的键值

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached1 ~]# yum -y install telnet
[root@memcached1 ~]# telnet 192.168.10.128 11211
Trying 192.168.10.128...
Connected to 192.168.10.128.
Escape character is '^]'.
set username 0 0 8
20220630
STORED
get username
VALUE username 0 8
20220630
END
quit</span></span>

在 memcached2上进行查看刚刚插入的键值

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached2 ~]# yum -y install telnet
[root@memcached2 ~]# telnet 192.168.10.130 11211
Trying 192.168.10.130...
Connected to 192.168.10.130.
Escape character is '^]'.
get username
VALUE username 0 8
20220630
END
quit</span></span>

同理,在 memcached2 上插入的数据, 在 Memcached1 也可以查看到。 这就是Memcached 的主主复制。

一、安装主keepalived

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached1 ~]# yum install -y keepalived   //两台全部安装</span></span>

1)配置主 keepalived

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached1 ~]# cp /etc/keepalived/keepalived.conf{,.bak}
[root@memcached1 ~]# vim /etc/keepalived/keepalived.conf</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL      //路由标识, 主从保持一致
}
​
vrrp_instance VI_1 {
   state BACKUP                //主备状态均为 MASTER
   interface ens33
   virtual_router_id 51       //虚拟路由 ID,主从相同
   priority 100                  //优先级,主高于备
   advert_int 1
   nopreempt                  //非抢占模式, 只在Master或者高优先级服务器上设置
   authentication {
   auth_type PASS
   auth_pass 1111
}  
   virtual_ipaddress {
       192.168.10.200         //定义 VIP 地址
   }
} 
​
virtual_server 192.168.10.200 11211 {    //VIP故障检测
   delay_loop 6
   persistence_timeout 20
   protocol TCP
   sorry_server 192.168.10.130 11211            //对端ip
   real_server 192.168.10.129 11211 {           //本机ip
    weight 3
    notify_down /etc/keepalived/memcached.sh     //当memcached宕机,停止keepalived服务
    TCP_CHECK {
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
        connect_port 11211               //指定端口号
        }
   }
}</span></span>

2)设置检测memcached服务的脚本

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached1 ~]# echo "/usr/bin/systemctl stop keepalived"   >/etc/keepalived/memcached.sh
[root@memcached1 ~]# chmod +x /etc/keepalived/memcached.sh</span></span>

二、配置备keepalived

主从 keepalived 配置文件内容差不多, 直接复制进行修改, 以下只把不一样的地方整理出来。 1)配置备 keepalived

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached2 ~]# cp /etc/keepalived/keepalived.conf{,.bak}
[root@memcached2 ~]# vim /etc/keepalived/</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL         //路由标识, 主从保持一致
}
​
vrrp_instance VI_1 {
   state BACKUP                   //备机状态也为 MASTER
   interface ens33
   virtual_router_id 51           //虚拟路由 ID, 主从相同
   priority 99                        //优先级低于master
   advert_int 1
   nopreempt
   authentication {
       auth_type PASS
       auth_pass 1111
}
virtual_server 192.168.10.200 11211 {        //VIP故障检测
   delay_loop 6
   persistence_timeout 20
   protocol TCP
   sorry_server 192.168.10.129 11211          //对端ip
   real_server 192.168.10.130 11211 {         //本机ip
   weight 3
   notify_down /etc/keepalived/memcached.sh       //当 memcached 宕机,停止keepalived服务
   TCP_CHECK {
       connect_timeout 3
       nb_get_retry 3
       delay_before_retry 3
       connect_port 11211                         //指定端口号
       }
   }
}</span></span>

2)设置检测memcached服务的脚本

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached2 ~]# echo "/usr/bin/systemctl stop keepalived" > /etc/keepalived/memcached.sh
[root@memcached2 ~]# chmod +x /etc/keepalived/memcached.sh</span></span>

三、测试验证

分别启动主备节点的 节点的 keepalived 服务

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached1 ~]# systemctl start keepalived
[root@memcached2 ~]# systemctl start keepalived</span></span>

1)查看主 keepalived是否获取 VIP 地址 使用 ip address show 命令查看VIP地址(使用ifconfig无法查看)。

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached1~]# ip address show  dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:06:3b:e2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.129/24 brd 192.168.10.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.10.200/32 scope global ens33       //获取vip地址
       valid_lft forever preferred_lft forever
    inet6 fe80::1c3:69b7:102d:5d5e/64 scope link 
       valid_lft forever preferred_lft forever</span></span>

2)验证高可用性

<span style="background-color:#f8f8f8"><span style="color:#333333">关闭 memcached1 服务器的 Memcached服务 
( 注:一定要关闭两台机器的selinux)
[root@memcached1 ~]# setenforce 0
[root@memcached2 ~]# setenforce 0
[root@memcached1 ~]# killall memcached</span></span>

在 memcached2 服务器上查看地址信息

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached2 ~]# ip addr show  dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:c3:11:b0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.130/24 brd 192.168.10.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.10.200/32 scope global ens33      //vip地址已转移
       valid_lft forever preferred_lft forever
    inet6 fe80::6512:5f97:8a9:301b/64 scope link 
       valid_lft forever preferred_lft forever</span></span>

恢复 memcached1 服务器的 Memcached服务,并恢复keepalived服务

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached1 ~]# memcached -d -u root -m 128 -x 192.168.10.130
[root@memcached1 ~]# systemctl start keepalived</span></span>

在 memcached1 服务器上查看地址信息,发现VIP地址没有抢占回来

<span style="background-color:#f8f8f8"><span style="color:#333333">[root@memcached1 ~]#  ip addr show  dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:a9:3d:bc brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.128/24 brd 192.168.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.10.200/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::8905:d8b6:87b1:e324/64 scope link noprefixroute
       valid_lft forever preferred_lft foreve</span></span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值