Keepalived安装部署

    技术2022-07-10  87

    Keepalived安装部署

    1、安装2、 keepalived.conf 配置3、Keepalived配置Nginx自动重启4、keepalived双主热备5、lvs6、lvs模式7、dr模式配置8、安装ipvsadm(集群管理工具)9、为两台rs配置虚拟ip10、搭建LVS-DR模式- 为两台RS配置arp11、使用ipvsadm配置集群规则12、keepalived+lvs高可用

    1、安装

    下载地址:链接通过ftp工具上传到linux中,/home/software解压

    tar -zxvf keepalived-2.0.18.tar.gz

    解压后进入到解压出来的目录,看到会有 configure ,那么就可以做配置了(配置安装和nginx一模一样)

    指定配置文件位置

    ./configure --prefix=/usr/local/keepalived --sysconf=/etc 1、prefix:keepalived安装目录 – 指定配置文件路径要放到etc下面 2、sysconf : keepalived核心配置文件所在位置,固定位置,改成其他位置则keepalived启动不了,会报错

    问题:配置过程中可能会出现警告信息,如下所示:please install libnl/libnl-3 dev libraries to support 解决方法:安装libnl/libnl-3依赖 yum -y install libnl libnl-devel

    make && make install

    make && make install

    2、 keepalived.conf 配置

    访问地址绑定 (域名绑定)61 keepalived71 绑定 61 tomcat 主 keepalived72 绑定 61 tomcat 备

    # 全局配置 global_defs { # 邮件通知信息 notification_email { # 定义收件人 acassen@firewall.loc } # 定义发件人 notification_email_from Alexandre.Cassen@firewall.loc # SMTP服务器地址 smtp_server 192.168.200.1 smtp_connect_timeout 30 # 路由器标识,一般不用改,也可以写成每个主机自己的主机名,当前安装keeplived节点的标识符,全局唯一 router_id LVS_DEVEL # VRRP的ipv4和ipv6的广播地址,配置了VIP的网卡向这个地址广播来宣告自己的配置信息,下面是默认值 vrrp_mcast_group4 224.0.0.18 vrrp_mcast_group6 ff02::12 } # 定义用于实例执行的脚本内容,比如可以在线降低优先级,用于强制切换 vrrp_script SCRIPT_NAME { } # 一个vrrp_instance就是定义一个虚拟路由器的,实例名称 vrrp_instance VI_1 { # 定义初始状态,可以是MASTER或者BACKUP state MASTER # 工作接口,通告选举使用哪个接口进行 interface ens33 # 虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,而且这个虚拟 # ID还是虚拟MAC最后一段地址的信息,取值范围0-255 virtual_router_id 51 # 使用哪个虚拟MAC地址 use_vmac XX:XX:XX:XX:XX # 监控本机上的哪个网卡,网卡一旦故障则需要把VIP转移出去 track_interface { eth0 ens33 } # 如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高 priority 100 # 通告频率,单位为秒 advert_int 1 # 通信认证机制,这里是明文认证还有一种是加密认证 authentication { auth_type PASS auth_pass 1111 } # 设置虚拟VIP地址,一般就设置一个,在LVS中这个就是为LVS主机设置VIP的,这样你就不用自己手动设置了 virtual_ipaddress { # IP/掩码 dev 配置在哪个网卡 192.168.200.16/24 dev eth1 # IP/掩码 dev 配置在哪个网卡的哪个别名上 192.168.200.17/24 dev label eth1:1 } # 虚拟路由,在需要的情况下可以设置lvs主机 数据包在哪个网卡进来从哪个网卡出去 virtual_routes { 192.168.110.0/24 dev eth2 } # 工作模式,nopreempt表示工作在非抢占模式,默认是抢占模式 preempt nopreempt|preempt # 如果是抢占默认则可以设置等多久再抢占,默认5分钟 preempt delay 300 # 追踪脚本,通常用于去执行上面的vrrp_script定义的脚本内容 track_script { } # 三个指令,如果主机状态变成Master|Backup|Fault之后会去执行的通知脚本,脚本要自己写 notify_master "" notify_backup "" notify_fault "" } # 定义LVS集群服务,可以是IP+PORT;也可以是fwmark 数字,也就是防火墙规则 # 所以通过这里就可以看出来keepalive天生就是为ipvs而设计的 virtual_server 10.10.10.2 1358 { delay_loop 6 # 算法 lb_algo rr|wrr|lc|wlc|lblc|sh|dh # LVS的模式 lb_kind NAT|DR|TUN # 子网掩码,这个掩码是VIP的掩码 nat_mask 255.255.255.0 # 持久连接超时时间 persistence_timeout 50 # 定义协议 protocol TCP # 如果后端应用服务器都不可用,就会定向到那个服务器上 sorry_server 192.168.200.200 1358 # 后端应用服务器 IP PORT real_server 192.168.200.2 1358 { # 权重 weight 1 # MSIC_CHECK|SMTP_CHEKC|TCP_CHECK|SSL_GET|HTTP_GET这些都是 # 针对应用服务器做健康检查的方法 MISC_CHECK {} # 用于检查SMTP服务器的 SMTP_CHEKC {} # 如果应用服务器不是WEB服务器,就用TCP_CHECK检查 TCP_CHECK { # 向哪一个端口检查,如果不指定默认使用上面定义的端口 connect_port <PORT> # 向哪一个IP检测,如果不指定默认使用上面定义的IP地址 bindto <IP> # 连接超时时间 connect_timeout 3 } # 如果对方是HTTPS服务器就用SSL_GET方法去检查,里面配置的内容和HTTP_GET一样 SSL_GET {} # 应用服务器UP或者DOWN,就执行那个脚本 notify_up "这里写的是路径,如果脚本后有参数,整体路径+参数引起来" notify_down "/PATH/SCRIPTS.sh 参数" # 使用HTTP_GET方法去检查 HTTP_GET { # 检测URL url { # 具体检测哪一个URL path /testurl/test.jsp # 检测内容的哈希值 digest 640205b7b0fc66c1ea91c463fac6334d # 除了检测哈希值还可以检测状态码,比如HTTP的200 表示正常,两种方法二选一即可 status_code 200 } url { path /testurl2/test.jsp digest 640205b7b0fc66c1ea91c463fac6334d } url { path /testurl3/test.jsp digest 640205b7b0fc66c1ea91c463fac6334d } # 向哪一个端口检查,如果不指定默认使用上面定义的端口 connect_port <PORT> # 向哪一个IP检测,如果不指定默认使用上面定义的IP地址 bindto <IP> # 连接超时时间 connect_timeout 3 # 尝试次数 nb_get_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 nb_get_retry 3 delay_before_retry 3 } } }

    简化配置

    # 全局配置 global_defs { # 路由器标识,全局唯一,一般不用改,也可以写成每个主机自己的主机名 router_id keep_171 } # 一个vrrp_instance就是定义一个虚拟路由器的,实例名称(服务器节点) vrrp_instance VI_1 { # 定义初始状态,可以是MASTER或者BACKUP state MASTER # 工作接口,通告选举使用哪个接口进行,当前实例绑定的网卡 #查看网卡名称(ip addr) interface ens33 # 虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,而且这个虚拟 # ID还是虚拟MAC最后一段地址的信息,取值范围0-255 #保证主备一致 virtual_router_id 51 # 如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高 #谁的优先级高,在master挂掉以后谁就是master priority 100 # 通告频率,单位为秒 主备之间同步检查时间间隔 advert_int 1 #认证授权的密码,防止非法节点的进入 # 通信认证机制,这里是明文认证还有一种是加密认证 authentication { auth_type PASS auth_pass 1111 } # 虚拟ip,设置虚拟VIP地址,一般就设置一个,在LVS中这个就是为LVS主机设置VIP的,这样你就不用自己手动设置了 virtual_ipaddress { 192.168.1.161 } }

    启动keepalived效果 绑定ip关系图

    备用机配置

    # 全局配置 global_defs { # 路由器标识,全局唯一,一般不用改,也可以写成每个主机自己的主机名 router_id keep_172 } # 一个vrrp_instance就是定义一个虚拟路由器的,实例名称(服务器节点) vrrp_instance VI_1 { # 定义初始状态,可以是MASTER或者BACKUP state BACKUP # 工作接口,通告选举使用哪个接口进行,当前实例绑定的网卡 #查看网卡名称(ip addr)自己查 interface ens33 # 虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,而且这个虚拟 # ID还是虚拟MAC最后一段地址的信息,取值范围0-255 #保证主备一致 virtual_router_id 51 # 如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高 #谁的优先级高,在master挂掉以后谁就是master priority 80 # 通告频率,单位为秒 主备之间同步检查时间间隔 advert_int 1 #认证授权的密码,防止非法节点的进入 # 通信认证机制,这里是明文认证还有一种是加密认证 authentication { auth_type PASS auth_pass 1111 } # 虚拟ip,设置虚拟VIP地址,一般就设置一个,在LVS中这个就是为LVS主机设置VIP的,这样你就不用自己手动设置了 virtual_ipaddress { 192.168.1.161 } }

    主节点挂掉之后

    3、Keepalived配置Nginx自动重启

    增加Nginx重启检测脚本

    vim /etc/keepalived/check_nginx_alive_or_not.sh

    #!/bin/bash A=`ps -C nginx --no-header |wc -l` # 判断nginx是否宕机,如果宕机了,尝试重启 if [ $A -eq 0 ];then #nginx安装位置 /usr/local/nginx/sbin/nginx # 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机 sleep 3 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #杀死当前keepalived启用备用 killall keepalived fi fi 增加运行权限

    chmod +x /etc/keepalived/check_nginx_alive_or_not.sh

    配置keepalived监听nginx脚本 #配置到全局配置文件中 vrrp_script check_nginx_alive { script "/etc/keepalived/check_nginx_alive_or_not.sh" interval 2 # 每隔两秒运行上一行脚本 weight 10 # 如果脚本运行失败,则升级权重+10 } 在 vrrp_instance 中新增监控的脚本 #启用上面配置的脚本 track_script { check_nginx_alive # 追踪 nginx 脚本 } 重启Keepalived使得配置文件生

    systemctl restart keepalived

    4、keepalived双主热备

    配置

    5、lvs

    为什么要用lvs+nginx

    lvs基于四层,工作效率高单个nginx承受不了压力,需要集群lvs充当nginx集群的调度者nginx接受请求来回,lvs可以只接受不响应

    6、lvs模式

    7、dr模式配置

    搭建LVS-DR模式- 配置LVS节点与ipvsadm

    服务器与ip规划: 阿里云不支持虚拟ip,腾讯云支持但需要购买

    LVS - 1台 VIP(虚拟IP):192.168.1.150 DIP(转发者IP/内网IP):192.168.1.151 Nginx - 2台(RealServer) RIP(真实IP/内网IP):192.168.1.171 RIP(真实IP/内网IP):192.168.1.172

    所有计算机节点关闭网络配置管理器,因为有可能会和网络接口冲突: systemctl stop NetworkManager systemctl disable NetworkManager

    创建子接口

    进入到网卡配置目录,找到咱们的ens33: 拷贝并且创建子接口: cp ifcfg-ens33 ifcfg-ens33:1 * 注:`数字1`为别名,可以任取其他数字都行 修改子接口配置: vim ifcfg-ens33:1 配置参考 service network restart

    service network restart

    效果

    8、安装ipvsadm(集群管理工具)

    yum install ipvsadm

    9、为两台rs配置虚拟ip

    修改为 效果

    10、搭建LVS-DR模式- 为两台RS配置arp

    ARP响应级别与通告行为 的概念

    arp-ignore:ARP响应级别(处理请求) 0:只要本机配置了ip,就能响应请求 1:请求的目标地址到达对应的网络接口,才会响应请求arp-announce:ARP通告行为(返回响应) 0:本机上任何网络接口都向外通告,所有的网卡都能接受到通告 1:尽可能避免本网卡与不匹配的目标进行通告 2:只在本网卡通告

    配置ARP

    打开sysctl.conf: vim /etc/sysctl.conf 配置 所有网卡 、 默认网卡 以及 虚拟网卡 的arp响应级别和通告行为,分别对应: all , default , lo : # configration for lvs net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2 刷新配置文件 增加一个网关,用于接收数据报文,当有请求到本机后,会交给lo去处理:

    11、使用ipvsadm配置集群规则

    查看帮助文档 ipvsadm -h 添加集群 ipvsadm -A -t 192.168.1.150:80 -s rr -a 添加 -s 负载均衡算法 rr 轮询 查看 ipvsadm -Ln

    构建服务 添加真实服务器节点 ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.171:80 -g 实例 修改持久化时间

    12、keepalived+lvs高可用

    配置方式

    keepalived config

    效果

    第二台配置

    其他不变

    Processed: 0.011, SQL: 9