分享

在openstack实例中做HA,实现Web双机热备

desehawk 发表于 2015-4-26 12:19:00 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 2 37429

问题导读

1.在配置HA的时候做了哪些准备工作?
2.两个实例中如何配置实现Web双机热备?
3.如何测试是否双机热备?






我用nginx+keepalived实现双机,对内外提供web服务。
  1. fixed_ip=192.168.0.0/24(内网)
  2. float_ip=192.168.8.0/24(外网)
复制代码


先创建两个实例。登录到两个实例中

  1. ifconfig
复制代码


查看两个实例的网卡是不是eth0,如果不是eth0,删除下面这个文件

  1. rm -f /etc/udev/rules.d/70-persistent-net.rules
  2. halt -p   #关机
复制代码


去实例相对应的宿主机上,修改对应实例xml文件

  1. cd /etc/libvirt/qemu/
  2. vim instance-00000002.xml
复制代码


删除xml文件中的下面四行

Instance-interface2.jpg

重新定义一下xml文件,并启动实例
  1. virsh define instance-00000002.xml
  2. virsh start instance-00000002
复制代码


这样在实例中配置的虚拟IP就可以和其他主机通信,配一个试试。
  1. ifconfig eth0:0 192.168.0.66/24 up
  2. ifconfig eth0:1 192.168.8.77/24 up
复制代码
用别的机器ping 192.168.0.66能通,ping 192.168.8.77不通,原因很简单,实例是桥接到宿主机br100上,br100也是192.168.0.0网段,所以8.77没有路由就出不去,同样的原理,那就给宿主机br100也配个8.0网段的虚拟IP吧。
  1. ifconfig br100:0 192.168.8.88/24 up
复制代码
在用别的机器ping下192.168.8.88和192.168.8.77吧,果然通了。可以做HA了。

到两个实例中配置
先释放刚才配置的eth0:0和eth0:1的IP


  1. ifconfig eth0:0 down
  2. ifconfig eth0:1 down
复制代码
安装配置nginx和keepalived

  1. yum -y install nginx keepalived
  2. /etc/init.d/nginx start; chkconfig nginx on
  3. cat > /etc/keepalived/keepalived.conf << _GEEK_
  4. global_defs {
  5.    router_id LVS_DEVEL
  6. }
  7. vrrp_script chk_nginx_port {
  8.     script "/etc/keepalived/nginx_pid.sh"  #检测nginx进程是否存在
  9.     interval 2                  #2s执行一次脚本
  10.     weight 2
  11. }
  12. vrrp_instance nginx1 {
  13.     state MASTER                #主备或主主
  14.     interface eth0
  15.     mcast_src_ip 192.168.0.2    #对方的IP
  16.     virtual_router_id 51        #主、备机的 virtual_router_id 必须相同
  17.     priority 100                #主、备机取不同的优先级,主机值较大,备份机值较小
  18.     advert_int 1                #查间隔,默认1秒
  19.     authentication {
  20.         auth_type PASS          #两边保持一致
  21.         auth_pass 1111          #认证方式和口令
  22.     }
  23.     track_script {
  24.     chk_nginx_port
  25.     }
  26.     virtual_ipaddress {
  27.         192.168.0.77/24         #内网用户通过0.77来访问Web
  28.         192.168.8.77/24         #外网用户通过8.77来访问Web  VRRP HA 虚拟地址 如果有多个VIP,继续换行填写
  29.     }
  30. }
  31. virtual_server 192.168.0.77 80 {
  32.     delay_loop 1                #健康检查时间间隔
  33.     lb_algo rr                  #LVS算法
  34.     lb_kind DR                  #负载均衡转发规则NAT|DR|RUN
  35.     persistence_timeout 10      #会话保持时间
  36.     protocol TCP
  37.     real_server 192.168.0.2 80 {
  38.         weight 3                #权重
  39.         TCP_CHECK {
  40.             connect_timeout 1   #(1秒无响应超时)
  41.             nb_get_retry 1      #重连次数
  42.             delay_before_retry 1 #重连间隔时间
  43.             connect_port 80      #健康检查的端口的端口
  44.         }
  45.     }
  46.     real_server 192.168.0.3 80 {
  47.         weight 3
  48.         TCP_CHECK {
  49.             connect_timeout 1
  50.             nb_get_retry 1
  51.             delay_before_retry 1
  52.             connect_port 80
  53.         }
  54.     }
  55. }
  56. virtual_server 192.168.8.77 80 {
  57.     delay_loop 1
  58.     lb_algo rr
  59.     lb_kind DR
  60.     persistence_timeout 10
  61.     protocol TCP
  62.     real_server 192.168.0.2 80 {
  63.         weight 3
  64.         TCP_CHECK {
  65.             connect_timeout 1
  66.             nb_get_retry 1
  67.             delay_before_retry 1
  68.             connect_port 80
  69.         }
  70.     }
  71.     real_server 192.168.0.3 80 {
  72.         weight 3
  73.         TCP_CHECK {
  74.             connect_timeout 1
  75.             nb_get_retry 1
  76.             delay_before_retry 1
  77.             connect_port 80
  78.         }
  79.     }
  80. }
  81. _GEEK_
复制代码


检测nginx进程脚本nginx_pid.sh

  1. cat > /etc/keepalived/nginx_pid.sh << _GEEK_
  2. #/bin/bash
  3. NGINX_PID=`ps -C nginx --no-header |wc -l`
  4. if [ $NGINX_PID -eq 0 ];then
  5.     killall keepalived
  6. fi
  7. _GEEK_
  8. chmod +x /etc/keepalived/nginx_pid.sh
  9. /etc/init.d/keepalived start; chkconfig keepalived on
复制代码


在iptables中开启80端口(或在安全组中添加80端口,我测试不起作用,有人测试成功请告诉我)
  1. iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
复制代码


两个实例都配置好后,可以用192.168.8.77或192.168.0.77来访问Web。
测试:
宕掉一个实例的nginx服务,看可不可以继续访问

  1. killall nginx
复制代码


不能访问,检查log
  1. tail -f /var/log/message
复制代码
两个Web数据需要存储到Swift中去,请参考(挂载Swift到网站主目录下)

  1. http://www.longgeek.com/2012/09/10/swift-to-site-data-store/
复制代码






已有(2)人评论

跳转到指定楼层
Redgo 发表于 2015-4-26 14:03:46
NiceNiceNice
回复

使用道具 举报

hb1984 发表于 2015-4-27 16:40:55
谢谢楼主分享。        
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条