lvs+keepalived+nginx+tomcat实现高性能

2022-08-17  本文已影响0人  右耳菌

相关知识了解

拓扑图

最少五台服务器(这里为了节省服务器,所以将三个tomcat都放在一个服务器上了,当然实际的情况应该是七台)

vip:192.168.1.100

lvs master 192.168.1.101
lvs slave 192.168.1.102

nginx1 192.168.1.201
nginx2 192.168.1.202

tomcat 192.168.1.203(三台tomcat,端口不一样)

centos 7.x

安装Nginx 和 Tomcat 并且配置好负载均衡

具体的流程可以参考这篇文章:配置nginx和tomcat负载均衡/反向代理

安装lvs+keepalived

1. lvs master
yum -y install ipvsadm keepalived

查看是否开启

sysctl -a | grep "ip_forward"

如果显示net.ipv4.ip_forward = 1 则表示已经开启。

永久开启

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

加载,使得配置文件立即生效

sysctl -p 

检查

sysctl -a | grep "ip_forward"
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
vim /etc/keepalived/keepalived.conf
global_defs
{
  router_id master_210
}
 
vrrp_instance aiyou {
  state MASTER
  interface eth0 #对应虚拟机的网卡,使用ifconfig查看
  virtual_router_id 100    #这个数值 master和slave必须统一
  priority 151     #这个数值决定哪台服务器是master 
  advert_int 1
  authentication {
        auth_type PASS
        auth_pass 123456
  }
  virtual_ipaddress {
        192.168.146.200
  }
}
virtual_server 192.168.146.200 80 {
  delay_loop 6
  lb_algo wrr
  lb_kind DR
  #persistence_timeout 50
  protocol TCP
# 这里的real server是具体的一台nginx服务器
  real_server 192.168.146.139 80 {
    weight 1
    TCP_CHECK {
      connect_timeout 3
      nb_get_retry 3
      delay_before_retry 3
      connect_port 80
    }
  }
# 这里的real server是具体的一台nginx服务器
  real_server 192.168.146.140 80 {
    weight 1
    TCP_CHECK {
      connect_timeout 3
      nb_get_retry 3
      delay_before_retry 3
      connect_port 80
    }
  }
}

重启keepalived

systemctl restart keepalived

查看状态

systemctl status keepalived
2. lvs slave
yum -y install ipvsadm keepalived
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

加载,使得配置文件立即生效

sysctl -p 

检查

sysctl -a | grep "ip_forward"
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
vim /etc/keepalived/keepalived.conf
global_defs
{
  router_id slave_211
}
 
vrrp_instance aiyou {
  state MASTER
  interface eth0
  virtual_router_id 100    #这个数值 master和slave必须统一
  priority 150     #这个数值决定哪台服务器是master 这里我们比master数值低,所以角色是backup,
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 123456
  }
  virtual_ipaddress {
    192.168.146.200
  }
}

virtual_server 192.168.146.200 80 {
  delay_loop 6
  lb_algo wrr
  lb_kind DR
  #            persistence_timeout 50
  protocol TCP
# 这里的real server是具体的一台nginx服务器
  real_server 192.168.146.139 80 {
    weight 1
    TCP_CHECK {
      connect_timeout 3
      nb_get_retry 3
      delay_before_retry 3
      connect_port 80
    }
  }
  # 这里的real server是具体的一台nginx服务器
  real_server 192.168.146.140 80 {
    weight 1
    TCP_CHECK {
      connect_timeout 3
      nb_get_retry 3
      delay_before_retry 3
      connect_port 80
    }
  }
}

重启keepalived

systemctl restart keepalived

查看状态

systemctl status keepalived
3. nginx1
vi /etc/init.d/realserver
#!/bin/bash  
#   
# Script to start LVS DR real server.   
# description: LVS DR real server   
#   
.  /etc/rc.d/init.d/functions
VIP=192.168.1.222   #这里根据需要改成自己的VIP地址
host=`/bin/hostname`
case "$1" in  
start)   
       # Start LVS-DR real server on this machine.   
        /sbin/ifconfig lo down   
        /sbin/ifconfig lo up   
        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
        /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up  
        /sbin/route add -host $VIP dev lo:0
;;  
stop)
        # Stop LVS-DR real server loopback device(s).  
        /sbin/ifconfig lo:0 down   
        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
;;  
status)
        # Status of LVS-DR real server.  
        islothere=`/sbin/ifconfig lo:0 | grep $VIP`   
        isrothere=`netstat -rn | grep "lo:0" | grep $VIP`   
        if [ ! "$islothere" -o ! "isrothere" ];then   
            # Either the route or the lo:0 device   
            # not found.   
            echo "LVS-DR real server Stopped."   
        else   
            echo "LVS-DR real server Running."   
        fi   
;;   
*)   
            # Invalid entry.   
            echo "$0: Usage: $0 {start|status|stop}"   
            exit 1   
;;   
esac

赋予可执行权限,并启动脚本

chmod 755 /etc/init.d/realserver
service realserver start
4. 测试
ipvsadm –ln
ipvsadm –ln

如果觉得有收获,欢迎点赞和评论,更多知识,请点击关注查看我的主页信息哦~

上一篇 下一篇

猜你喜欢

热点阅读