lvs+keepalived+nginx实现高可用负载均衡集群

四台服务器,系统全为CentOS6.8:

192.168.0.150 master lvs+keepalived

192.168.0.151 backup lvs+keepalived

192.168.0.152 web1(nginx)

192.168.0.153 web2 (nginx)

1、分别在backup lvs和master lvs上安装lvs

     yum -y install ipvsadm

 

2 把ipvsadm模块加载进系统

     ipvsadm

lsmod | grep ip_vs

lsmod 命令用于显示已经加载到内核中模块的状态信息,执行lsmod命令后 会列出所有已经加载到系统的模块。

3 分别在backup lvs和master lvs上安装keepalived(keepalived官网:http://www.keepalived.org/)

tar -zxvf keepalived-1.2.24.tar.gz 

cd /opt/keepalived-1.2.24

执行  ./configure --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --mandir=/usr/share

 

此时报错了,提示没有安装gcc 

  我们通过    yum install gcc   命令安装

gcc 安装完成以后,我们再次执行  ./configure --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --mandir=/usr/share

提示如下错误,错误原因 :系统缺少openssl-devel包所致

安装openssl-devel 

  yum -y install openssl-devel

安装完成以后,在此执行  ./configure --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --mandir=/usr/share

完成配置

接着 执行编译和安装命令 

make && make install

4  配置keepalived

  vi /etc/keepalived/keepalived.conf

    lvs-master的配置文件如下

! Configuration File for keepalived

global_defs {  #全局配置部分
 #  notification_email {  #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  #设置lvs id 在一个网络内,应该是唯一的
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 { #vrrp 实例部分
    state MASTER  # 设置lvs 的状态,分为MASTER和BACKUP两种,必须大写
    interface eth0 #设置对外服务的接口
    virtual_router_id 51 #设置虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一标识
    priority 100 # 定义优先级,数字越大,优先级越高,在同一个vrrp-instance下 MASTER 的优先级必须大于BACKUP的优先级
    advert_int 1 #设置master和backup负载均衡器之间同步检查的时间间隔,单位秒
    authentication { #设置验证类型和密码
        auth_type PASS # 主要有PASS和AH两种
        auth_pass 1111 #验证密码,同一个vrrp-instance 下 验证密码必须相同
    }
    virtual_ipaddress {#设置虚拟ip地址,可以设置多个,每行一个
        192.168.0.154
    }
}

virtual_server 192.168.0.154 80 {
    delay_loop 3 #健康检查时间间隔
    lb_algo rr #负载均衡调度算法
    lb_kind DR #负载均衡转发规则
    persistence_timeout 50 #设置会话保持时间,对动态网页特别有用
    protocol TCP #指定转发协议类型,有TCP和UDP两种

    real_server 192.168.0.152 80 {#配置服务器节点1 需要指定real server 的真实ip地址和端口
        weight 1 #设置权重,数字越大,权重越大
        TCP_CHECK { #real server 状态监测设置,部分单位 秒
            connect_timeout 3 #超时监测
            nb_get_retry 3  #重试次数
            delay_before_retry 3 #重试间隔
           connect_port 80 # 监测端口
        }
    }

   real_server 192.168.0.153 80 {#配置服务器节点1 需要指定real server 的真实ip地址和端口
        weight 1 #设置权重,数字越大,权重越大
        TCP_CHECK { #real server 状态监测设置,部分单位 秒
            connect_timeout 3 #超时监测
            nb_get_retry 3  # 重试次数
            delay_before_retry 3 #重试间隔
           connect_port 80 # 监测端口
        }
    }

}

  vi /etc/keepalived/keepalived.conf

    lvs-backup 的配置文件如下

! Configuration File for keepalived

global_defs {  #全局配置部分
 #  notification_email {  #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  #设置lvs id 在一个网络内,应该是唯一的
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 { #vrrp 实例部分
    state BACKUP  # 设置lvs 的状态,分为MASTER和BACKUP两种,必须大写
    interface eth0 #设置对外服务的接口
    virtual_router_id 51 #设置虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一标识
    priority 50 # 定义优先级,数字越大,优先级越高,在同一个vrrp-instance下 MASTER 的优先级必须大于BACKUP的优先级
    advert_int 1 #设置master和backup负载均衡器之间同步检查的时间间隔,单位秒
    authentication { #设置验证类型和密码
        auth_type PASS # 主要有PASS和AH两种
        auth_pass 1111 #验证密码,同一个vrrp-instance 下 验证密码必须相同
    }
    virtual_ipaddress {#设置虚拟ip地址,可以设置多个,每行一个
        192.168.0.154
    }
}

virtual_server 192.168.0.154 80 {
    delay_loop 3 #健康检查时间间隔
    lb_algo rr #负载均衡调度算法
    lb_kind DR #负载均衡转发规则
    persistence_timeout 50 #设置会话保持时间,对动态网页特别有用
    protocol TCP #指定转发协议类型,有TCP和UDP两种

    real_server 192.168.0.152 80 {#配置服务器节点1 需要指定real server 的真实ip地址和端口
        weight 1 #设置权重,数字越大,权重越大
        TCP_CHECK { #real server 状态监测设置,部分单位 秒
            connect_timeout 3 #超时监测
            nb_get_retry 3  #重试次数
            delay_before_retry 3 #重试间隔
           connect_port 80 # 监测端口
        }
    }

   real_server 192.168.0.153 80 {#配置服务器节点1 需要指定real server 的真实ip地址和端口
        weight 1 #设置权重,数字越大,权重越大
        TCP_CHECK { #real server 状态监测设置,部分单位 秒
            connect_timeout 3 #超时监测
            nb_get_retry 3  # 重试次数
            delay_before_retry 3 #重试间隔
           connect_port 80 # 监测端口
        }
    }

}

 

5  realserver的配置

      

     1.  152 153两台real server 安装nginx服务

           安装过程参考 https://mp.csdn.net/postedit/88556340 

          为了方便我们知道请求由那一个服务器响应的,修改nginx的 首页

          vi    /usr/share/nginx/html/index.html

         我们在welcome  后面加上我们的ip 地址

          

    2   进入  /etc/rc.d/init.d 目录创建   realserver.sh文件

            cd /etc/rc.d/init.d

           vi realserver.sh

    realserver.sh 文件的内容如下  

#!/bin/bash
# description: Config realserver lo and apply noarp

SNS_VIP=192.168.0.154

/etc/rc.d/init.d/functions

case "$1" in
start)
       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_VIP dev lo:0
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"

       ;;
stop)
       ifconfig lo:0 down
       route del $SNS_VIP >/dev/null 2>&1
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

exit 0

3 运行realserver.sh 脚本

   执行 /etc/rc.d/init.d/realserver.sh start

   此时会报权限不足的错误

为什么会报这个错误呢?我们看一下这个文件会发下,这个文件并没有可执行的权限,此时我们只需要给它加上执行权限即可

   

 增加执行权限命令 :  chmod u+x realserver.sh

   再次执行  /etc/rc.d/init.d/realserver.sh start

脚本执行成功,上面的权限不足可以忽略

两台real server 都需要执行上面的脚本

 两台real server 执行完是上面的脚本,执行 ifconfig 命令,应该都可以看到我们的 虚拟ip 

4  启动两台real server 的nginx服务

  执行命令       /usr/sbin/nginx

6  启动keepalived并进行测试

    启动两台主机的keepalived 服务

    执行 命令:  service keepalived start

   

    

   提示我们权限不够,那我们就去修改权限

     进入 /etc/init.d/  目录下 找到keepalived 文件,发现它并没有执行权限

     

执行 chmod u+x ./keepalived  添加执行权限,然后再次启动

   

  在lvs-master 输入 

       

tail -f /var/log/messages 

   

通过  ipvsadm -L -n 我们可以查看 real server 的ip 
ipvsadm -L -n

 接下来  我们模拟lvs master 宕机了,看看lvs backup 反应

   模拟之前我们看一下 backup 的状态,它还是backup 状态,并且没有接管vip

 我们直接重启192.168.0.150 即lvs- master 

    执行命令 reboot  ,我们可以看到 lvs-master 已经 重启,并且连接已经断开

   

   此时,192.168.0.151 即lvs-backup 变为了master,并且已经接管了 vip

      

 我们再起重启 lvs-master  并且启动keepalived 服务

 这时lvs-master 重新接管了 vip

    

此时lvs-backup  交出了vip,再次成为一个备胎 ,backup

模拟real server 有一台宕机了

    我们直接将192.168.0.152 关机

此时 lvs-master 不断的监测192.168.0.152 的状态,而 lvs-back 会监测一次 然后从路由列表删除

本文是 参考 https://www.cnblogs.com/liuyisai/p/5990645.html 进行实践操作,再次向大佬致敬

本文是 参考 https://www.cnblogs.com/liuyisai/p/5990645.html 进行实践操作,再次向大佬致敬

本文是 参考 https://www.cnblogs.com/liuyisai/p/5990645.html 进行实践操作,再次向大佬致敬

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

www.365codemall.com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值