使用Virtual IP+Keepalived配置高可用

环境说明

  1. centos 7 ,keepalived-2.0.20 。
  2. master ip :192.168.1.26 backup ip : 192.168.1.33
  3. vip :192.168.1.50 (这个是我们下面要创建的ip)
  4. 我使用的环境为本地局域网,所以公网环境我并未测试,但原理一致,无非虚拟ip创建位置不同。

这只是设备的高可用,你的服务、业务需要高可用则需要自行设计你的业务代码,做主备服务器中服务代码的同步逻辑,使用虚拟IP和keepalived来做虚拟IP漂移时,需要考虑你的业务是否能接纳虚拟IP漂移的时间(即使这个时间很短)

1. 创建虚拟ip(virtual ip)

  • 我使用的是centos的环境,如果你是ubuntu 或者其他系统,请参考对
    应系统的虚拟ip设置!


Master 部分
  1. 查看虚拟机的网口     命令: ip addr
    在这里插入图片描述
  • 注意红框内的信息,其他的先不要在意。
  1. 输入命令 :cd /etc/sysconfig/network-scripts/
  2. 输入命令 :ls
    在这里插入图片描述
    我的网口是ens33,所以我对应的网口文件是ifcfg-ens33,也就是我ip为192.168.1.26的配置文件
  3. 输入命令 :vim ifcfg-ens33在这里插入图片描述
    第一个红框内填写你本地的ip(就是你正在用的IP地址)
    后面两个红框内就是你要添加的虚拟IP地址(注意网段地址要和你本地的网段一致)

Back UP部分
  • Back Up 部分比较特殊,这里不用配置虚拟IP,只要安装keepalived后,在keepalived.conf文件中配置对应的IP就好

2. 安装keepalived(源码安装)

Master部分
  1. keepalived官网地址 (我使用的是2.0.20)

  2. 编译安装
    1. 将压缩包从windows放入Linux系统
    2. tar -xvf keepalived-2.0.20.tar.gz
    3. ./configure --prefix=/usr/local/keepalived-1.2.15 (注意前面只有一个.)
    4. make && make install
    5. 等待编译安装完成

  3. 修改keepalived.conf
    1. 因为我们编译安装没有指定任何多余的东西,所以这个conf文件一般是在 /usr/local/
    2. /etc 目录下,创建keepalived目录,cp keepalived.conf 到此目录下。
    3. 执行 chkconfig keepalived on
    4. cd /etc/keepalived/
    5. vim keepalived.conf

这里贴出我master部分的keepalived.conf配置 (需要使用的都已经添加了注释," # "是注释标识符)

! Configuration File for keepalived

global_defs {
   # 故障时,主备切换通知的email

   #notification_email {
     #acassen@firewall.loc
     #failover@firewall.loc
     #sysadmin@firewall.loc
   #}
   # email配置
   #notification_email_from Alexandre.Cassen@firewall.loc
   #smtp_server 192.168.200.1
   #smtp_connect_timeout 30、

   # 路由id,当前安装keepalived的节点主机标识符,需要保证全局唯一
   router_id keep_1
   #router_id LVS_DEVEL
   #vrrp_skip_check_adv_addr
   #vrrp_strict
   #vrrp_garp_interval 0
   #vrrp_gna_interval 0
}


# 基于vrrp协议的实例,可以理解为一个服务器的节点
vrrp_instance VI_1 {
    # 表示状态为主节点MASTER还是备用机BACKUP
    state MASTER
    # 当前示例绑定的网卡,根据ip addr查出来的网卡
    interface ens33
    # 虚拟路由id 需要保证主备节点的该值一致
    virtual_router_id 51
    #优先级/权重,master权重一般高于backup,在master挂掉后谁的优先级高,谁就能成为master
    priority 188
    #主备之间同步检查的时间间隔(心跳),默认为1s
    advert_int 1
    #认证授权的密码,防止非法节点进入,主备需要一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #虚拟IP,可以有多个,根据自己实际情况修改
    virtual_ipaddress {
        192.168.1.50
    }
}

# virtual_server 192.168.200.100 443 {
#     delay_loop 6
#     lb_algo rr
#     lb_kind NAT
#     persistence_timeout 50
#     protocol TCP

#     real_server 192.168.201.100 443 {
#         weight 1
#         SSL_GET {
#             url {
#               path /
#               digest ff20ad2481f97b1754ef3e12ecd3a9cc
#             }
#             url {
#               path /mrtg/
#               digest 9b3a0c85a887a256d6939da88aabd8cd
#             }
#             connect_timeout 3
#             retry 3
#             delay_before_retry 3
#         }
#     }
# }

# virtual_server 10.10.10.2 1358 {
#     delay_loop 6
#     lb_algo rr
#     lb_kind NAT
#     persistence_timeout 50
#     protocol TCP

#     sorry_server 192.168.200.200 1358

#     real_server 192.168.200.2 1358 {
#         weight 1
#         HTTP_GET {
#             url {
#               path /testurl/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             url {
#               path /testurl2/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             url {
#               path /testurl3/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             connect_timeout 3
#             retry 3
#             delay_before_retry 3
#         }
#     }

#     real_server 192.168.200.3 1358 {
#         weight 1
#         HTTP_GET {
#             url {
#               path /testurl/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334c
#             }
#             url {
#               path /testurl2/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334c
#             }
#             connect_timeout 3
#             retry 3
#             delay_before_retry 3
#         }
#     }
# }

# virtual_server 10.10.10.3 1358 {
#     delay_loop 3
#     lb_algo rr
#     lb_kind NAT
#     persistence_timeout 50
#     protocol TCP

#     real_server 192.168.200.4 1358 {
#         weight 1
#         HTTP_GET {
#             url {
#               path /testurl/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             url {
#               path /testurl2/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             url {
#               path /testurl3/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             connect_timeout 3
#             retry 3
#             delay_before_retry 3
#         }
#     }

#     real_server 192.168.200.5 1358 {
#         weight 1
#         HTTP_GET {
#             url {
#               path /testurl/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             url {
#               path /testurl2/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             url {
#               path /testurl3/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             connect_timeout 3
#             retry 3
#             delay_before_retry 3
#         }
#     }
# }

BackUp部分
  1. keepalived官网地址 (我使用的是2.0.20)

  2. 编译安装
    1. 将压缩包从windows放入Linux系统
    2. tar -xvf keepalived-2.0.20.tar.gz
    3. ./configure --prefix=/usr/local/keepalived-1.2.15 (注意前面只有一个.)
    4. make && make install
    5. 等待编译安装完成

  3. 修改keepalived.conf
    1. 因为我们编译安装没有指定任何多余的东西,所以这个conf文件一般是在 /usr/local/
    2. /etc 目录下,创建keepalived目录,cp keepalived.conf 到此目录下。
    3. 执行 chkconfig keepalived on
    4. cd /etc/keepalived/
    5. vim keepalived.conf

这里贴出我BackUp部分的keepalived.conf配置 (需要使用的都已经添加了注释," # "是注释标识符)


! Configuration File for keepalived

global_defs {
  #  notification_email {
  #    acassen@firewall.loc
  #    failover@firewall.loc
  #    sysadmin@firewall.loc
  #  }
  #  notification_email_from Alexandre.Cassen@firewall.loc
  #  smtp_server 192.168.200.1
  #  smtp_connect_timeout 30
  #  router_id LVS_DEVEL
  #  vrrp_skip_check_adv_addr
  #  vrrp_strict
  #  vrrp_garp_interval 0
  #  vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        # 192.168.200.16
        # 192.168.200.17
        # 192.168.200.18
        192.168.1.50
    }
}

# virtual_server 192.168.200.100 443 {
#     delay_loop 6
#     lb_algo rr
#     lb_kind NAT
#     persistence_timeout 50
#     protocol TCP

#     real_server 192.168.201.100 443 {
#         weight 1
#         SSL_GET {
#             url {
#               path /
#               digest ff20ad2481f97b1754ef3e12ecd3a9cc
#             }
#             url {
#               path /mrtg/
#               digest 9b3a0c85a887a256d6939da88aabd8cd
#             }
#             connect_timeout 3
#             retry 3
#             delay_before_retry 3
#         }
#     }
# }

# virtual_server 10.10.10.2 1358 {
#     delay_loop 6
#     lb_algo rr
#     lb_kind NAT
#     persistence_timeout 50
#     protocol TCP

#     sorry_server 192.168.200.200 1358

#     real_server 192.168.200.2 1358 {
#         weight 1
#         HTTP_GET {
#             url {
#               path /testurl/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             url {
#               path /testurl2/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             url {
#               path /testurl3/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             connect_timeout 3
#             retry 3
#             delay_before_retry 3
#         }
#     }

#     real_server 192.168.200.3 1358 {
#         weight 1
#         HTTP_GET {
#             url {
#               path /testurl/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334c
#             }
#             url {
#               path /testurl2/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334c
#             }
#             connect_timeout 3
#             retry 3
#             delay_before_retry 3
#         }
#     }
# }

# virtual_server 10.10.10.3 1358 {
#     delay_loop 3
#     lb_algo rr
#     lb_kind NAT
#     persistence_timeout 50
#     protocol TCP

#     real_server 192.168.200.4 1358 {
#         weight 1
#         HTTP_GET {
#             url {
#               path /testurl/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             url {
#               path /testurl2/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             url {
#               path /testurl3/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             connect_timeout 3
#             retry 3
#             delay_before_retry 3
#         }
#     }

#     real_server 192.168.200.5 1358 {
#         weight 1
#         HTTP_GET {
#             url {
#               path /testurl/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             url {
#               path /testurl2/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             url {
#               path /testurl3/test.jsp
#               digest 640205b7b0fc66c1ea91c463fac6334d
#             }
#             connect_timeout 3
#             retry 3
#             delay_before_retry 3
#         }
#     }
# }

  • 注意:我这里两个的state都是MASTER,最好是认真看一遍我在Master的keepalived.conf配置和注释,哪个为主哪个为备,以权重值为主。

至此我们两个Linux的虚拟IP和keepalived已经配置和安装完成


3. 测试

Master 和 BackUp都按照下面的步骤
  1. 进入解压的目录中 命令 : cd keepalived-2.0.20/keepalived
  2. 启动keepalived 命令 : ./keepalived
  3. 查看是否成功启动 命令1: ps -ef|grep keepalived
  4. 查看是否成功启动 命令2: systemctl status keepalived.service

命令1:
命令1
命令2:
命令2
5. 开启Master和BackUp的keepalived
6. 执行命令: journalctl -u keepalived (查看keepalived日志)
7. tail -f /var/log/message (实时查看日志)


  • Master端日志
    在这里插入图片描述

  • BackUp端日志

在这里插入图片描述
Master :Entering MASTER STATE

BackUp:Entering BACKUP STATE

这两句代表两个Linux的主备身份切换,我私下把Master Linux关闭后,BackUp Linux可以马上切换到Master身份,当我的Master Linux重新打开后,会把Back Up Linux的Master身份抢回来,原因在于权重值和身份状态



常用命令:

  • 查看keepalived状态:systemctl status keepalived.service
  • 停止keepalived服务:systemctl stop keepalived.service
  • 开始keepalived服务:systemctl start keepalived.service
  • 查看keepalived日志:tail -f /var/log/message
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值