设为首页 收藏本站
查看: 722|回复: 0

[经验分享] Linux LVS+keepalived负载均衡集群的部署

[复制链接]

尚未签到

发表于 2018-12-31 13:23:46 | 显示全部楼层 |阅读模式
  高可用负载均衡集群
  ipvs
  负载均衡常用的有四种模式
  DR
  NAT
  TUN
  FULLNET
  
  实验环境:准备四台rhel6.5的虚拟机四台。一台作为调度器server1,两台作为real server(server3,4),heartbeat服务关闭
  172.25.50.10 server1.example.com
  172.25.50.20 server2.example.com
  172.25.50.30 server3.example.com
  172.25.50.250 real50.example.com
  172.25.50.40 server4.example.com
  DR模式:
  #ipvsadm -l 命令可以看到当前主机的调度策略
  #ipvsamd -L
  #iIpvsadm -C 清除当前策略
  在server3和server4上都安装并且开启httpd服务,然后都在默认发布目录上写一个不同的测试页面:server3.example.com  server4.example,com
  调度器server1上,添加一个172.25.50.100的ip
  #   ip addr add 172.25.50.100/24 dev eth0
  并且用真机ping 一下这个ip让真机缓存绑定一个MAC地址
  在server1上添加策略:
  ipvsadm -A -t 172.25.50.100:80 -s rr##rr表示轮询
  ipvsadm -a -t 172.25.50.100:80 -r 172.25.50.30:80 -g
  ipvsadm -a -t 172.25.50.100:80 -r 172.25.50.40:80 -g
  .ipvsadm参数说明:
  -C:清除表中所有的记录
  -A:在服务器列表中新添加一套新的虚拟服务器记录
  -a:在服务器列表中添加一体新的真实主机记录
  -t:表示tcp服务
  -u:表示udp服务
  -r::真实服务器地址
  -s:使用调度算法(rr | wrr | )
  
  [root@server1 ~]# ipvsadm -l
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  TCP  172.25.50.100:http rr
    -> server3.example.com:http     Route   1      0          0         
    -> server4.example.com:http     Route   1      0          0         
  
  在serevr3和server4上都添加ip:
  #  ip addr add 172.25.50.100/32 dev eth0
  
  测试:在浏览器上访问172.25.50.100,重复刷新,可以看到测试页面的变动
  [root@real50 kiosk]# curl 172.25.50.100
  serer3.example.com
  [root@real50 kiosk]# curl 172.25.50.100
  server4.example.com
  
  这样做是有缺陷的。这样是不具备对服务的健康检查
  当real server的服务宕机,在调度器上不能看到服务是否正常运行,在浏览器上可以看到网页时好时坏。
  
  Arp
  在server3和server4上安装arptables_jf.x86_64 0:0.0.8-23.el6
  在server3和server4 上都执行以下策略
  
  arptables -A IN -d 172.25.50.100 -j DROP
  arptables -A OUT -s 172.25.50.100 -j mangle --mangle-ip-s 172.25.50.30
  /etc/init.d/arptables_jf save
  
  然后关闭server3的httpd服务
  然后在调度器上server1上能够发现real serevr 上的服务故障
  [root@server1 ha.d]# ipvsadm -l
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  TCP  172.25.50.100:http rr
    -> server4.example.com:http     Route   1      0          0         
  
  在浏览器上只能看到serevr4的测试页面
  [root@real50 kiosk]# curl 172.25.50.100
  server4.example.com
  [root@real50 kiosk]# curl 172.25.50.100
  server4.example.com
  
  ######将heartbeat加入负载均衡集群中:#####
  
  [root@server1 ~]# ipvsadm -C  ##清除之前的策略
  [root@server1 ~]# ipvsadm -L
  
  [root@server1 ha.d]# rpm -qd ldirectord##查询这个软件的文档
  /usr/share/doc/ldirectord-3.9.5/COPYING
  /usr/share/doc/ldirectord-3.9.5/ldirectord.cf
  /usr/share/man/man8/ldirectord.8.gz
  
  [root@server1 ha.d]# cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf .
  [root@server1 ha.d]# vim ldirectord.cf ##这个文件写着调度策略
   25 virtual=172.25.50.100:80##虚拟ip
   26         real=172.25.50.30:80 gate##真实主机的ip地址
   27         real=172.25.50.40:80 gate
   28         fallback=127.0.0.1:80 gate
   29         service=http
   30         scheduler=rr##策略:轮询
   31         #persistent=600
   32         #netmask=255.255.255.255
   33         protocol=tcp
   34         checktype=negotiate
   35         checkport=80
   36         request="index.html"
   37 #       receive="Test Page"##检测真实主机上的测试测试页面是否一致
   38 #       virtualhost=www.x.y.z
  
  [root@server1 ha.d]# /etc/init.d/ldirectord start##启动ld
  
  在server3上将httpd服务停了
  在真机上:
  [root@real50 Desktop]# curl 172.25.50.100
  server4.example.com
  调度器serverv1上:
  [root@server1 ha.d]# ipvsadm -l
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  TCP  172.25.50.100:http rr
    -> server4.example.com:http     Route   1      0          0         
  
  这时将server3上的httpd服务打开
  这时负载均衡开始工作:
  [root@real50 Desktop]# curl 172.25.50.100
  server4.example.com
  [root@real50 Desktop]# curl 172.25.50.100
  serer3.example.com
  
  [root@server1 ha.d]# /etc/init.d/ldirectord stop
  [root@server1 html]# ip addr del 172.25.50.100/24 dev eth0
  [root@server1 html]# /etc/init.d/httpd stop
  [root@server1 html]# cd /etc/ha.d/
  [root@server1 ha.d]# vim haresources
  在最后一行添加:
  server1.example.com IPaddr::172.25.50.100/24/eth0 ldirectord httpd
||||
添加虚拟ip启动脚本
  [root@server1 ha.d]# scp haresources 172.25.50.20:/etc/ha.d/#发送到server2上
  [root@server1 ha.d]# scp ldirectord.cf 172.25.50.20:/etc/ha.d/
  root@172.25.50.20's password:
  haresources                                   100% 5972     5.8KB/s   00:00   
  
   /etc/init.d/heartbeat restart##在serevr1和server2上都重新启动heartbeat
  [root@server1 ha.d]# tail -f /var/log/messages    #用过日志查看服务启动情况
  
  
  
  [root@server1 ha.d]# ipvsadm -l
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  TCP  172.25.50.100:http rr
    -> server3.example.com:http     Route   1      0          0         
    -> server4.example.com:http     Route   1      0          0  
  
  在真机上测试:
  [root@real50 Desktop]# for i in {1..8}; do curl 172.25.50.100; done
  server4.example.com
  serer3.example.com
  server4.example.com
  serer3.example.com
  server4.example.com
  serer3.example.com
  server4.example.com
  serer3.example.com
  当realserver上任何一个的http服务挂了。另外一个realserver会一直接管httpd服务
  当调度器中的server1挂了,server2会接管调度工作,保证系统正常运行
  
  Keepalived+lvs
  

  先关闭sererv1和server2的heartbeart服务
   /etc/init.d/heartbeat stop
  在server和server上都进行如下操作
  tar zxf keepalived-1.2.24.tar.gz #第三方模块,在官网上去找
  cd keepalived-1.2.24
  yum install openssl-devel -y#编译文件
  yum install libnl-devel -y
  yum install libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm -y
  rpm -ivh libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm
  warning: libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
  Preparing...                ########################################### [100%]
  package libnfnetlink-devel-1.0.0-1.el6.x86_64 is already installe
  
  cd keepalived-1.2.24
   ./configure --prefix=/usr/local/keepalived##编译,并指定安装路径,
  make && make install
  
  ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/#指定启动脚本软连接
  ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  ln -s /usr/local/keepalived/etc/keepalived /etc/
  ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin
  
  软连接设置后可以在后面的目录中生成一个新的文件,如果设置错了,把生成的新文件删除,再进行软连接设置即可。
  
  编辑集群信息配置文件
  [root@server1 etc]# cat /etc/keepalived/keepalived.conf
  ! Configuration File for keepalived
  
  global_defs {
     notification_email {
       root@localhost#接收警报的 email 地址,可以添加多个
     }
     notification_email_from Alexandre.Cassen@firewall.loc #设置邮件的发送地址
     smtp_server 192.168.200.1#设置 smtp server 地址
     smtp_connect_timeout 30#设置连接 smtp 服务器超时时间
     router_id LVS_DEVEL#load balancer 的标识 ID,用于 email 警报
     vrrp_skip_check_adv_addr
     vrrp_strict
     vrrp_garp_interval 0
     vrrp_gna_interval 0
  }
  
  vrrp_instance VI_1 {
      state MASTER设置为主机###备机改为 BACKUP,此状态是由 priority 的值来决定的,当前priority 的值小于备机的值,那么将会失去 MASTER 状态
      interface eth0#HA 监测网络接口
      virtual_router_id 51##主、备机的 virtual_router_id 必须相同,取值 0-255
      priority 100##优先级,备份机改为50,数字大的优先级高,主>备
      advert_int 1#主备之间通告间隔秒数
      authentication {
          auth_type PASS##设置认证类型,pass  或者 AH
          auth_pass 1111##设置验证密码
      }
      virtual_ipaddress {#设置虚拟 IP 地址,可以设置多个虚拟 IP 地址,每行一个
          172.25.50.100
      }
  }
  
  virtual_server 172.25.50.100 80 {#定义虚拟服务器
delay_loop 6#每隔 6 秒查询 realserver 状态
      lb_algo rr#每隔 6 秒查询 realserver 状态
      lb_kind DR#LVS 是用 DR 模式
  #    persistence_timeout 50
      protocol TCP#指定转发协议类型,有 tcp 和 udp 两种
  
      real_server 172.25.50.30 80 {#配置服务节点
          weight 1配置服务节点的权值,权值大小用数字表示,数字越大,权
  值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设
  置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统
  资源
          TCP_CHECK {#realserve 的状态检测设置部分,单位是秒
              connect_timeout 3#3 秒无响应超时
              nb_get_retry 3#重复次数
              delay_before_retry 3#重试间隔
          }
      }
     real_server 172.25.50.40 80 {
          weight 1
          TCP_CHECK {
              connect_timeout 3
              nb_get_retry 3
              delay_before_retry 3
          }
      }
  
  }
  注意:红色字体只有 备机  keepalived配置只改动红色部分
  
  将配置文件复制到备机server2上,并进行修改
  
  将server3和server4上的httpd服务开启,并设置vip:
  ip addr add 172.25.50.100/32 dev eth0l两台realserver都添加
  
  将server1和server2上的keepalived服务开启。
  
  测试:
  1. 高可用测试:停止 master 上的 keepalived 服务,看 backup 是否接管。
  2. 负载均衡测试:访问 http://192.168.0.163,看到页面在两个 realserver 上切换表示成功!
  你也可以通过 ipvsadm -Lnc 查看详细连接情况!
  3. 故障切换测试:任意关闭 realserver 上的 httpd 服务,Keepalived 监控模块是否能及时发现,
  然后屏蔽故障节点,同时服务转移到正常节点来执行
  
  



附件:http://down.运维网.com/data/2366498


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-657986-1-1.html 上篇帖子: Nginx+keepalived负载均衡高可用篇第③版 下篇帖子: lvs+keepalived负载均衡高可用集群的配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表