g87616758 发表于 2018-12-31 11:21:17

高可用集群企业级应用实战

  Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
  Keepalived工作流程图:

https://s4.运维网.com/oss/201711/09/116e10f39ec80a55c7cc37d38d767a6a.png-wh_500x0-wm_3-wmp_4-s_3491198301.png
  工作流程图详解:
  keepalived主要是模块是VRRP Stack和Cheackers,实现HA集群中失败切换(Failover)功能。Keepalived通过VRRP功能能再结合LVS负载均衡软件即可部署一个高性能的负载均衡集群系统。,Cheackers主要实现可实现对服务器运行状态检测和故障隔离。,其中ipvs和realserver健康状态检查通过配置文件配置就可以实现,而其他服务高可用则需要通过自己编写脚本,然后配置keepalived调用来实现。Keepalived运行有3个守护进程。父进程主要负责读取配置文件初始化、监控2个子进程等;然后两个子进程,一个负责VRRP,另一个负责Cheackers健康检查。其中父进程监控模块为WacthDog,工作实现:每个子进程打开一个接受unix域套接字,父进程连接到那些unix域套接字并向子进程发送周期性(5s)hello包。上图是Keepalived的功能体系结构,大致分两层:用户空间(user space)和内核空间(kernel space)。内核空间:主要包括IPVS(IP虚拟服务器,用于实现网络服务的负载均衡)和NETLINK(提供高级路由及其他相关的网络功能)两个部份。
  VRRP协议的相关介绍:

  VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)可以认为是实现路由器高可用的协议,简单的说,当一个路由器故障时可以由另一个备份路由器继续提供相同的服务。VRRP根据优先级来确定虚拟路由器中每台路由器的角色(Master路由器或Backup路由器)。VRRP优先级的取值范围为0到255(数值越大表明优先级越高),可配置的范围是1到254,优先级0为系统保留给路由器放弃Master位置时候使用,255则是系统保留给IP地址拥有者使用。优先级越高,则越有可能成为Master路由器。当两台优先级相同的路由器同时竞争Master时,比较接口IP地址大小。接口地址大者当选为Master。
  实战演练:实现基于keepalived高可用基于LVS-DR模式的双主架构
  一:环境准备:
  四台centos虚拟机分别命名为:lvs-master、lvs-backup、realserver1、realserver2
  都是双网卡模式:桥接和仅主机
  lvs-master: vip1:172.17.250.11
  dip:172.17.27.10
  lvs-backup:vip2:172.17.250.12
  dip:172.17.250.43

  realserver1:rip:172.17.0.66
  realserver2:rip:172.17.250.41
  分别在lvs-master和lvs-backup上安装keepalived
  清空防火墙策略:iptables -F,关闭selinux策略
  二:配置相关文件
  1、修改keepalived主(lvs-server-master)配置文件实现virtual_instance
  vrrp_instance VI_1 {
  state MASTER
  interface ens33
  virtual_router_id 90
  priority 100
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1015
  }
  virtual_ipaddress {
  172.17.250.11
  }
  }
  

  virtual_server 172.17.250.11 80 {
  delay_loop 6
  lb_algo wrr
  lb_kind DR
  nat_mask 255.255.255.255
  persistence_timeout 120
  protocol TCP
  

  real_server 172.17.0.66 80 {
  weight 1
  HTTP_GET {
  url {
  path /
  }
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
  }
  real_server 172.17.250.41 80 {
  weight 1
  HTTP_GET {
  url {
  path /
  }
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
  }
  }
  

  vrrp_instance VI_2 {
  state BACKUP
  interface ens33
  virtual_router_id 93
  priority 98
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1234
  }
  virtual_ipaddress {
  172.17.250.12
  }
  }
  virtual_server 172.17.250.12 443 {
  delay_loop 6
  lb_algo wrr
  lb_kind DR
  nat_mask 255.255.255.255
  persistence_timeout 120
  protocol TCP
  

  real_server 172.17.0.66 443 {
  weight 1
  HTTP_GET {
  url {
  path /
  }
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
  }
  real_server 172.17.250.41 443 {
  weight 1
  HTTP_GET {
  url {
  path /
  }
  connect_timeout 3
  nb_get_retry 3
  delay_before_retry 3
  }
  }
  }
  2,lvs-backup与lvs-master配置文件大致相同,所以就只列出不同的地方,没列出的都是相同的代码

  vrrp_instance VI_1 {
  state MASTER
  interface ens33
  virtual_router_id 90
  priority 98    ###由原来的100改为了98
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1015
  }
  virtual_ipaddress {
  172.17.250.11
  }
  }
  vrrp_instance VI_2 {
  state BACKUP
  interface ens33
  virtual_router_id 93
  priority 100    ###由原来的98改为了100
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 1234
  }
  virtual_ipaddress {
  172.17.250.12
  }
  }
  3,realserver1和realserver2配置都一样
  因为realserver使用了443端口,所以说需要进行加密所以应该打开nginx中的https server
  cd /etc/pki/tls/certs

  生成密钥和证书:make cert.pem
  拷贝cert.pem到nginx配置文件中:
  cp cert.pem /etc/nginx
  cd /etc/nginx
  创建一个密钥文件,并把cert.pem中的密钥拷到此文件中
  vim cert.key

https://s4.运维网.com/oss/201711/09/feb11bd404c74336a9b8f65664aed373.png-wh_500x0-wm_3-wmp_4-s_2623212632.png
  

  HTTPS server
  server {
  listen       443 ssl;
  server_namelocalhost;
  root html;
  ssl_certificate      cert.pem;   ###存放证书的文件
  ssl_certificate_keycert.key;    ####存放密钥的文件
  

  ssl_session_cache    shared:SSL:1m;
  ssl_session_timeout5m;
  

  ssl_ciphersHIGH:!aNULL:!MD5;
  ssl_prefer_server_cipherson;
  

  location / {
  indexindex.html index.htm;
  }
  }
  

  }
配置回环网卡:
ifconfig lo:0 172.17.250.11 broadcast 172.17.250.11 netmask 255.255.255.255 up
route add -host 172.17.250.11 lo:0

ifconfig lo:1 172.17.250.12 broadcast 172.17.250.12 netmask 255.255.255.255 up
route add -host 172.17.250.11 lo:0
          忽略ip与mac不匹配的问题:
            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
  

  

  三:测试检验高可用的效果
  1、配置完成后,观察两侧IP的是情况,看是否虚拟IP在主上配置成功
  2、停掉主服务上的keepalived服务,看虚拟IP是否正常转移到从节点上
  

  a,首先查看虚拟ip是否在lvs-master和lvs-backup上配置成功
  ipvsadm -L -n
https://s3.运维网.com/oss/201711/09/38704b3199a44b7bb96c77201aa44e0d.png-wh_500x0-wm_3-wmp_4-s_548231408.png
https://s4.运维网.com/oss/201711/09/bf8efd9485a35503aa7bd021f513337e.png-wh_500x0-wm_3-wmp_4-s_3470512817.png
  从图中可以看到vip1:172.17.250.11
  vip2:172.17.250.12

  b,关掉lvs-backup的keepalived服务
  systemctl stop keepalived
  查看vip2:172.17.250.12是否跑到了lvs-master主机上
https://s2.运维网.com/oss/201711/09/7897914a1336b4872c722b3d5c137594.png-wh_500x0-wm_3-wmp_4-s_2537020012.png
https://s2.运维网.com/oss/201711/09/da9198ad8c42446a991d1d63768198f4.png-wh_500x0-wm_3-wmp_4-s_2437416172.png
  图中看出lvs-backup上已经没有了vip2:172.17.250.12
  而是出现在了lvs-master上
  

  




页: [1]
查看完整版本: 高可用集群企业级应用实战