【博文推荐】基于云端虚拟机的LVS/DR+Keepalived+nginx的高可用集群架构配置

云计算 系统运维
最近,公司要我部署一个集群架构,选来选去还是选择了大家都很熟悉的基于DR的LVS+Keepalived做负载分发,然后使用轻量级的nginx做中间代理层。在这篇博文里介绍如何实现一个简单web应用功能,对于代理功能和后续的web层部署、数据层安排将择机更新。

最近,公司要我部署一个集群架构,选来选去还是选择了大家都很熟悉的基于DR的LVS+Keepalived做负载分发,然后使用轻量级的nginx做中 间代理层,这里呢先暂时实现一个简单web应用功能,对于代理功能和后续的web层部署、数据层安排将择机更新!

首先看一下集群框架:

  wKiom1R9pDCBdH6DAAFs7SXE3aQ326.jpg  

下面开始我们的集群搭建行程:

一、IP规划:

做一件事情需要想想怎么去做既简单又有条理,我们做项目也应该如此。所以这里一定先做一个简单的规划,对于你后续测试的时候出现不能分发的情况有所解决。

               负载均衡层                            代理层                      WEB层(待定)

           LVS1:10.124.20.248       nginx1:10.124.20.250              web1

 

                                                  nginx2:10.124.20.251

 

           LVS2:10.124.20.249       nginx3:10.124.20.252               web2

          VIP:10.124.20.20   对应绑定的外网IP:117.78.3.253

备注:在云端虚拟机做架构,比在自己本地虚拟机做实验,要略有不同。初次接触云端虚拟机的同学可能有点犯迷糊,不知道这个ip地址是怎么分配的,怎么去管 理。我的老师教给一个最能解决问题的办法:在任何服务之前,首先要了解整个网络环境,然后根据环境部署服务,更改配置、规则等。关于云端虚拟机,它在整个 硬件防火墙和整个路由器封闭起来的一个大的局域网集群(这里为了好理解我们姑且认为云端就一个防火墙和一个路由器)。在这个集群中,又有很多网段的局域 网,每个企业在申请虚拟机的时候一般会建立一个虚拟机组,这个机组则对应着一个网段。

这里使用的网段是10.124.20.0/24, 给各台服务器分配唯一的IP地址。这里要特别说明一下,华为云技术人员建议使用的服务器固定ip在32-254之间,在2-31之间的IP地址作为候补之 用,比如说VIP就选用这里面,还有临时加虚拟机的话也可以选用。所以对于IP地址的规划是很重要的。另外说一下,这也是在生产环境中的经验吧,VIP必 须是和集群IP地址在一个网段,还要必须有别于集群IP地址,另外要提供网站访问服务或者测试,则需要将内网的VIP与一个公网IP进行绑定,在外部网络 浏览器访问外网IP就会直接映射到内网VIP上,然后就会实现我们所熟悉的功能,VIP漂移,LVS分发。小技巧:公网IP与单纯的一个内网ip做绑定是 不成功的,所以先把需要绑定公网IP的内网IP绑定到一个虚拟机上,然后再进行绑定,绑定完之后再进行更改IP地址。(比如说我要使用10.124.20.20做VIP,首先我把10.124.20.20绑定到一台虚拟机上,通过后台将外网IP117.78.3.253与10.124.20.20绑定,也就是做映射,最后再将10.124.20.20与虚拟解绑,这样就实现了预期目的)

二、源码安装&&配置

1.LVS+Keepalived搭建 

1)LVS1:10.124.20.248&&LVS2:10.124.20.249

  1. cd /usr/local/src/ 
  2.  
  3. tar xf ipvsadm-1.24.tar.gz 
  4.  
  5. tar xf keepalived-1.1.20.tar.gz 

ipvsadm编译安装

  1. ln -s /usr/src/kernels/2.6.32-279.el6.x86_64/ /usr/src/linux  #创建软连接 
  2.  
  3. cd /usr/local/src/ipvsadm-1.24 
  4.  
  5. make && make install 
  6.  
  7. #/sbin/ipvsadm -v  #检测ipvsadm是否安装成功(或者:#watch ipvsadm –ln) 
  8.  
  9.    ipvsadm v1.24 2005/12/10 (compiled with getopt_long and IPVS v1.2.1

将ipvsadm设置成开机自启动服务

  1. chkconfig --add  keepalived 
  2.  
  3. chkconfig keepalived on 

Keepalived编译安装

  1. /usr/local/src/keepalived-1.1.20 
  2.  
  3. ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-279.el6.x86_64 
  4.  
  5. 返回信息: 
  6.  
  7. Keepalived configuration 
  8.  
  9. ------------------------ 
  10.  
  11. Keepalived version       : 1.1.20 
  12.  
  13. Compiler                 : gcc 
  14.  
  15. Compiler flags           : -g -O2 
  16.  
  17. Extra Lib                : -lpopt -lssl -lcrypto  
  18.  
  19. Use IPVS Framework       : Yes 
  20.  
  21. IPVS sync daemon support : Yes 
  22.  
  23. Use VRRP Framework       : Yes 
  24.  
  25. Use Debug flags          : No 
  26.  
  27. make && make install 
  28.  
  29. 返回信息: 
  30.  
  31. install -d /usr/local/keepalived/bin 
  32.  
  33. install -m 755 ../bin/genhash /usr/local/keepalived/bin/ 
  34.  
  35. install -d /usr/local/keepalived/share/man/man1 
  36.  
  37. install -m 644 ../doc/man/man1/genhash.1 /usr/local/keepalived/share/man/man1 

将Keepalived做成服务:

  1. cd /usr/local/keepalived/ 
  2.  
  3. cp etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ 
  4.  
  5. cp etc/sysconfig/keepalived /etc/sysconfig/ 
  6.  
  7. mkdir /etc/keepalived 
  8.  
  9. cp etc/keepalived/keepalived.conf /etc/keepalived/ 
  10.  
  11. cp sbin/keepalived /usr/sbin/ 

2)修改Keepalived.conf配置文件    

  1. #cat /etc/keepalived/keepalived.conf  #主LVS1:10.124.20.248 
  2.  
  3.     ! Configuration File for keepalived 
  4.  
  5.     global_defs { 
  6.  
  7.         notification_email { 
  8.  
  9.                qingbo.song@apicloud.com 
  10.  
  11.          } 
  12.  
  13.         notification_email_from qingbo.song@apicloud.com 
  14.  
  15.         smtp_server 127.0.0.1 
  16.  
  17.         # smtp_connect_timeout 30 
  18.  
  19.         router_id LVS_DEVEL          
  20.  
  21.     } 
  22.  
  23.       
  24.  
  25.     vrrp_sync_group VGM {     
  26.  
  27.         group { 
  28.  
  29.                VI_1  
  30.  
  31.               } 
  32.  
  33.       
  34.  
  35.     notify_master "/opt/shell/arp.sh" 
  36.  
  37.     notify_backup "/opt/shell/arp.sh" 
  38.  
  39.     } 
  40.  
  41.     vrrp_script chk_nginx {    
  42.  
  43.     script "/opt/shell/check_nginx.sh" 
  44.  
  45.     interval 1 
  46.  
  47.     weight -2 
  48.  
  49.     } 
  50.  
  51.     vrrp_script chk_nginx2 {      
  52.  
  53.     script "/opt/shell/check_nginx2.sh" 
  54.  
  55.     interval 1 
  56.  
  57.     weight -2 
  58.  
  59.     } 
  60.  
  61.     vrrp_script chk_nginx3 {      
  62.  
  63.     script "/opt/shell/check_nginx3.sh" 
  64.  
  65.     interval 1 
  66.  
  67.     weight -2 
  68.  
  69.     } 
  70.  
  71.     vrrp_instance VI_1 {        
  72.  
  73.         state MASTER   
  74.  
  75.         interface eth0       
  76.  
  77.         virtual_router_id 51  
  78.  
  79.         priority 100    
  80.  
  81.         advert_int 1      
  82.  
  83.         authentication {     
  84.  
  85.              auth_type PASS 
  86.  
  87.              auth_pass yzkjTest 
  88.  
  89.          } 
  90.  
  91.     track_script {    
  92.  
  93.     chk_nginx 
  94.  
  95.     chk_nginx2 
  96.  
  97.     chk_nginx3 
  98.  
  99.     } 
  100.  
  101.     virtual_ipaddress { 
  102.  
  103.         10.124.20.20    
  104.  
  105.         } 
  106.  
  107.     } 
  108.  
  109.     virtual_server 10.124.20.20 80 {    
  110.  
  111.         delay_loop 5 
  112.  
  113.         lb_algo sh 
  114.  
  115.         lb_kind DR  
  116.  
  117.         persistence_timeout 60 
  118.  
  119.         protocol TCP  
  120.  
  121.     real_server 10.124.20.250 80 {     
  122.  
  123.         weight 1     
  124.  
  125.         TCP_CHECK { 
  126.  
  127.            connect_timeout 10    
  128.  
  129.            nb_get_retry 3 
  130.  
  131.            delay_before_retry 3    
  132.  
  133.            connect_port 80 
  134.  
  135.                  } 
  136.  
  137.     } 
  138.  
  139.       
  140.  
  141.     real_server 10.124.20.251 80 {  
  142.  
  143.        weight 1 
  144.  
  145.        TCP_CHECK { 
  146.  
  147.           connect_timeout 10 
  148.  
  149.           nb_get_retry 3 
  150.  
  151.           delay_before_retry 3 
  152.  
  153.           connect_port 80 
  154.  
  155.                 } 
  156.  
  157.     } 
  158.  
  159.      
  160.  
  161.     real_server 10.124.20.252 80 {  
  162.  
  163.        weight 1 
  164.  
  165.        TCP_CHECK { 
  166.  
  167.           connect_timeout 10 
  168.  
  169.           nb_get_retry 3 
  170.  
  171.           delay_before_retry 3 
  172.  
  173.           connect_port 80 
  174.  
  175.                 } 
  176.  
  177.          } 
  178.  
  179.     } 
  180.  
  181.     #cat /etc/keepalived/keepalived.conf  #备LVS1:10.124.20.249 
  182.  
  183.     ! Configuration File for keepalived 
  184.  
  185.     global_defs { 
  186.  
  187.         notification_email { 
  188.  
  189.                qingbo.song@apicloud.com 
  190.  
  191.          } 
  192.  
  193.         notification_email_from qingbo.song@apicloud.com 
  194.  
  195.         smtp_server 127.0.0.1 
  196.  
  197.         # smtp_connect_timeout 30 
  198.  
  199.         router_id LVS_DEVEL          
  200.  
  201.     } 
  202.  
  203.       
  204.  
  205.     vrrp_sync_group VGM {     
  206.  
  207.         group { 
  208.  
  209.                VI_1  
  210.  
  211.               } 
  212.  
  213.       
  214.  
  215.     notify_master "/opt/shell/arp.sh" 
  216.  
  217.     notify_backup "/opt/shell/arp.sh" 
  218.  
  219.     } 
  220.  
  221.     vrrp_script chk_nginx {    
  222.  
  223.     script "/opt/shell/check_nginx.sh" 
  224.  
  225.     interval 1 
  226.  
  227.     weight -2 
  228.  
  229.     } 
  230.  
  231.     vrrp_script chk_nginx2 {      
  232.  
  233.     script "/opt/shell/check_nginx2.sh" 
  234.  
  235.     interval 1 
  236.  
  237.     weight -2 
  238.  
  239.     } 
  240.  
  241.     vrrp_script chk_nginx3 {      
  242.  
  243.     script "/opt/shell/check_nginx3.sh" 
  244.  
  245.     interval 1 
  246.  
  247.     weight -2 
  248.  
  249.     } 
  250.  
  251.     vrrp_instance VI_1 {        
  252.  
  253.         state BACKUP 
  254.  
  255.         interface eth0       
  256.  
  257.         virtual_router_id 51  
  258.  
  259.         priority 99    
  260.  
  261.         advert_int 1      
  262.  
  263.         authentication {     
  264.  
  265.              auth_type PASS 
  266.  
  267.              auth_pass yzkjTest 
  268.  
  269.          } 
  270.  
  271.     track_script {    
  272.  
  273.     chk_nginx 
  274.  
  275.     chk_nginx2 
  276.  
  277.     chk_nginx3 
  278.  
  279.     } 
  280.  
  281.     virtual_ipaddress { 
  282.  
  283.         10.124.20.20    
  284.  
  285.         } 
  286.  
  287.     } 
  288.  
  289.     virtual_server 10.124.20.20 80 {    
  290.  
  291.         delay_loop 5 
  292.  
  293.         lb_algo sh 
  294.  
  295.         lb_kind DR  
  296.  
  297.         persistence_timeout 60 
  298.  
  299.         protocol TCP  
  300.  
  301.     real_server 10.124.20.250 80 {     
  302.  
  303.         weight 1     
  304.  
  305.         TCP_CHECK { 
  306.  
  307.            connect_timeout 10    
  308.  
  309.            nb_get_retry 3 
  310.  
  311.            delay_before_retry 3    
  312.  
  313.            connect_port 80 
  314.  
  315.                  } 
  316.  
  317.     } 
  318.  
  319.       
  320.  
  321.     real_server 10.124.20.251 80 {  
  322.  
  323.        weight 1 
  324.  
  325.        TCP_CHECK { 
  326.  
  327.           connect_timeout 10 
  328.  
  329.           nb_get_retry 3 
  330.  
  331.           delay_before_retry 3 
  332.  
  333.           connect_port 80 
  334.  
  335.                 } 
  336.  
  337.     } 
  338.  
  339.      
  340.  
  341.     real_server 10.124.20.252 80 {  
  342.  
  343.        weight 1 
  344.  
  345.        TCP_CHECK { 
  346.  
  347.           connect_timeout 10 
  348.  
  349.           nb_get_retry 3 
  350.  
  351.           delay_before_retry 3 
  352.  
  353.           connect_port 80 
  354.  
  355.                 } 
  356.  
  357.          } 
  358.  
  359.     }

相关检测脚本:

  1. #cat /opt/shell/arp.sh  
  2.  
  3. #!/bin/bash 
  4.  
  5. VIP=10.124.20.20 
  6.  
  7. GATEWAY=10.124.20.1 
  8.  
  9. /sbin/arping -I eth0 -c 5 -s $VIP $GATEWAY &>/dev/null 
  10.  
  11.  
  12.  
  13. #cat /opt/shell/check_nginx.sh  
  14.  
  15. !/bin/bash 
  16.  
  17. url="http://10.124.20.250"    
  18.  
  19. status=$(/usr/bin/curl -s --head "$url" | awk '/HTTP/ {print $2}'
  20.  
  21. if [ "$status" != "200" ]; then 
  22.  
  23. /opt/shell/arp.sh start 
  24.  
  25. fi 
  26.  
  27.  
  28.  
  29. #cat /opt/shell/check_nginx2.sh  
  30.  
  31. !/bin/bash 
  32.  
  33. url="http://10.124.20.251"    
  34.  
  35. status=$(/usr/bin/curl -s --head "$url" | awk '/HTTP/ {print $2}'
  36.  
  37. if [ "$status" != "200" ]; then 
  38.  
  39. /opt/shell/arp.sh start 
  40.  
  41. fi 
  42.  
  43.  
  44.  
  45. #cat /opt/shell/check_nginx3.sh  
  46.  
  47. !/bin/bash 
  48.  
  49. url="http://10.124.20.252"    
  50.  
  51. status=$(/usr/bin/curl -s --head "$url" | awk '/HTTP/ {print $2}'
  52.  
  53. if [ "$status" != "200" ]; then 
  54.  
  55. /opt/shell/arp.sh start 
  56.  
  57. fi

 3)Keepalived服务启动(ifconfig eth0:1 10.124.20.248 netmask 255.255.255.255 up)

  1.   service keepalived start #服务启动 
  2.  
  3.   #ps -aux|grep keepalived #检测服务启动状态 
  4.  
  5. (/usr/local/keepalived/sbin/keepalived -D -f /etc/keepalived/keepalived.conf -D 显示在日志记录  -f 指定配置文件目录) 
  6.  
  7.   Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ 
  8.  
  9.   root     21205  0.0  0.0  36776   732 ?        Ss   17:06   0:00 keepalived -D 
  10.  
  11.   root     21207  0.0  0.1  38880  1936 ?        S    17:06   0:00 keepalived -D 
  12.  
  13.   root     21208  0.0  0.1  38880  1232 ?        S    17:06   0:00 keepalived -D 
  14.  
  15.   root     21301  0.0  0.0 103240   840 pts/0    S+   17:07   0:00 grep keepalived 

 4)#设置开机启动服务

  1. (##echo “/usr/local/keepalived/sbin/keepalived -D -f /etc/keepalived/keepalived.conf” >> /etc/rc.d/rc.local) 
  2.  
  3.  chkconfig --add  keepalived 
  4.  
  5.  chkconfig keepalived on 
  6.  
  7. service iptables stop 

5)添加防火墙规则:

  1. iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT   #使80端口提供对外服务 
  2.  
  3.  iptables -A INPUT -d 224.0.0.0/8 -j ACCEPT 
  4.  
  5.  iptables -A INPUT -p vrrp -j ACCEPT #基于DR模式,当用户发出请求后,只有DR响应ARP广播包,允许vrrp虚拟路由器冗余协议 
  6.  
  7.  /etc/rc.d/init.d/iptables save #保存规则到iptables文件,使重启后生效) 

6)开启转发功能;

  1. #vim /etc/sysctl.conf  
  2.  
  3. net.ipv4.ip_forward = 1 
  4.  
  5. #sysctl -p  #使转发能够生效 

三、nginx服务器的搭建

1)安装pcre-8.36.tar.gz

  1. cd /usr/local/src 
  2.  
  3.   tar xf pcre-8.36.tar.gz 
  4.  
  5.   cd pcre-8.36 
  6.  
  7.   ./configure --prefix=/usr/local/pcre 
  8.  
  9.   make && make install 

2)安装nginx-1.5.1.tar.gz

  1. cd /usr/local/src 
  2.  
  3.   tar xf nginx-1.5.1.tar.gz 
  4.  
  5.   cd nginx-1.5.1 
  6.  
  7.   ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.36 --with-openssl=/usr/local/src/openssl-1.0.0c //这里跟的目录是源码目录,而不是源码安装后的目录 
  8.  
  9.   make && make install 

3)启动

编写启动脚本:

  1. vim /etc/init.d/nginx      | chmod +x /etc/init.d/nginx 
  2.  
  3.      #!/bin/sh 
  4.  
  5.      # 
  6.  
  7.      # nginx - this script starts and stops the nginx daemin 
  8.  
  9.      # 
  10.  
  11.      # chkconfig:   - 85 15 
  12.  
  13.      # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \ 
  14.  
  15.      #               proxy and IMAP/POP3 proxy server 
  16.  
  17.      # processname: nginx 
  18.  
  19.      # config:      /usr/local/nginx/conf/nginx.conf 
  20.  
  21.      # pidfile:     /usr/local/nginx/logs/nginx.pid 
  22.  
  23.      # Source function library. 
  24.  
  25.      . /etc/rc.d/init.d/functions 
  26.  
  27.      # Source networking configuration. 
  28.  
  29.      . /etc/sysconfig/network 
  30.  
  31.      # Check that networking is up. 
  32.  
  33.      [ "$NETWORKING" = "no" ] && exit 0 
  34.  
  35.      nginx="/usr/local/nginx/sbin/nginx" 
  36.  
  37.      prog=$(basename $nginx) 
  38.  
  39.      NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" 
  40.  
  41.      lockfile=/var/lock/subsys/nginx 
  42.  
  43.      start() { 
  44.  
  45.          [ -x $nginx ] || exit 5 
  46.  
  47.          [ -f $NGINX_CONF_FILE ] || exit 6 
  48.  
  49.          echo -n $"Starting $prog: " 
  50.  
  51.          daemon $nginx -c $NGINX_CONF_FILE 
  52.  
  53.          retval=$? 
  54.  
  55.          echo 
  56.  
  57.          [ $retval -eq 0 ] && touch $lockfile 
  58.  
  59.          return $retval 
  60.  
  61.      } 
  62.  
  63.      stop() { 
  64.  
  65.          echo -n $"Stopping $prog: " 
  66.  
  67.          killproc $prog -QUIT 
  68.  
  69.          retval=$? 
  70.  
  71.          echo 
  72.  
  73.          [ $retval -eq 0 ] && rm -f $lockfile 
  74.  
  75.          return $retval 
  76.  
  77.      } 
  78.  
  79.      restart() { 
  80.  
  81.          configtest || return $? 
  82.  
  83.          stop 
  84.  
  85.          start 
  86.  
  87.      } 
  88.  
  89.      reload() { 
  90.  
  91.          configtest || return $? 
  92.  
  93.          echo -n $"Reloading $prog: " 
  94.  
  95.          killproc $nginx -HUP 
  96.  
  97.          RETVAL=$? 
  98.  
  99.          echo 
  100.  
  101.      } 
  102.  
  103.      force_reload() { 
  104.  
  105.          restart 
  106.  
  107.      } 
  108.  
  109.      configtest() { 
  110.  
  111.        $nginx -t -c $NGINX_CONF_FILE 
  112.  
  113.      } 
  114.  
  115.      rh_status() { 
  116.  
  117.          status $prog 
  118.  
  119.      } 
  120.  
  121.      rh_status_q() { 
  122.  
  123.          rh_status >/dev/null 2>&1 
  124.  
  125.      } 
  126.  
  127.      case "$1" in 
  128.  
  129.          start) 
  130.  
  131.              rh_status_q && exit 0 
  132.  
  133.              $1 
  134.  
  135.              ;; 
  136.  
  137.          stop) 
  138.  
  139.              rh_status_q || exit 0 
  140.  
  141.              $1 
  142.  
  143.              ;; 
  144.  
  145.          restart|configtest) 
  146.  
  147.              $1 
  148.  
  149.              ;; 
  150.  
  151.          reload) 
  152.  
  153.              rh_status_q || exit 7 
  154.  
  155.              $1 
  156.  
  157.              ;; 
  158.  
  159.          force-reload) 
  160.  
  161.              force_reload 
  162.  
  163.              ;; 
  164.  
  165.          status) 
  166.  
  167.              rh_status 
  168.  
  169.              ;; 
  170.  
  171.          condrestart|try-restart) 
  172.  
  173.              rh_status_q || exit 0 
  174.  
  175.                  ;; 
  176.  
  177.          *) 
  178.  
  179.              echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" 
  180.  
  181.              exit 2 
  182.  
  183.      esac

service nginx start 启动服务

4)RS配置脚本

 启动RS配置:

  1. sh /opt/RS.sh start 

四、测试

浏览器访问测试117.78.3.253,能够返回想要的信息即为成功!

五、总结

使用LVS+Keepalived做负载均衡,首先先将内部各个服务器的iptables与selinux关闭,确保内部网络通畅,一般而言,将上述防火 墙关闭之后,安装上述配置文件提供的参数进行配置,是能够实现预期功能的。我的文档中可能提到过要设置iptables规则,这个要在测试通过之后,再打 开iptables,然后写上防火墙规则。通过查阅很多资料,看到很多人都在防火墙关闭的情况实验成功,看来防火墙与LVS的分发功能是多少有点冲突,对 于这方面的知识学习,有待于我们在今后的工作和学习中进行探索,我也将对后续知识在被人博客上做介绍,希望以后能在这个平台与大家一起交流、学习、成长!

qingbo.song@apicloud.com

2014-12-02

原文链接:http://swht1278.blog.51cto.com/7138082/1585684

责任编辑:Ophira 来源: 51CTO
相关推荐

2019-10-09 16:02:16

NginxKeepalivedLvs

2023-05-15 08:20:56

2015-07-03 11:26:07

MySQL高可用架MHA

2019-10-31 09:03:12

Java集群微服务

2019-12-24 14:28:00

KeepalivedNginxTomcat

2014-05-30 13:35:21

MySQL Clust架构

2012-02-15 00:01:34

2019-09-09 09:53:52

K8s集群架构

2011-11-28 21:01:03

NginxKeepalived高可用

2014-12-23 11:23:14

DRBDHeartbeatNFS

2017-11-13 11:07:32

Nginx搭建高可用

2020-10-28 07:10:07

Nginx高可用高并发

2012-05-18 10:11:10

虚拟机VM

2015-04-24 09:06:43

云存储故障切换虚拟化

2014-12-24 11:13:06

可用性集availabilitset

2015-10-21 12:58:58

keepalived集群Linux

2010-06-21 14:37:18

2009-09-16 10:30:16

创建高可用虚拟机

2010-07-26 09:02:38

2015-07-29 13:21:58

DockerRails 集群高可用架构
点赞
收藏

51CTO技术栈公众号