官方文档上的高可用配置,它推荐的是使用haproxy的上层代理来实现服务组件的主备访问、或者负载均衡访问
 
一开始我也是使用haproxy来做的,但后来方式改了
 
测试环境:haproxy + nginx
科兴环境:haproxy
 
先抛开测试环境,等下我再在4.2节中解说一下配置
 
两边的kxcontroller主备控制节点均安装
yum install -y haproxy
 
创建目录
mkdir -p /home/haproxy/log   && mkdir -p /home/haproxy/run/
赋予目录权限
chown -R haproxy:haproxy  /home/haproxy
 
在kxcontroller1上的配置示例
 
[root@kxcontroller1 ~]# vi /etc/haproxy/haproxy.cfg
 
#全局配置
global
  chroot  /home/haproxy/log
  daemon
  group  haproxy
  maxconn  20000
  pidfile  /home/haproxy/run/haproxy.pid
  user  haproxy
 
defaults
  log  global
  maxconn  20000
  option  redispatch
  retries  3
  timeout  http-request 10s
  timeout  queue 1m
  timeout  connect 10s
  timeout  client 1m
  timeout  server 1m
  timeout  check 10s
 
#dashboard界面,不考虑VIP在谁身上,这个服务可以负载均衡访问
listen dashboard_cluster_80
  bind 10.120.42.10:80
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server kxcontroller1 10.120.42.1:80 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:80 check inter 2000 rise 2 fall 5
 
#数据库集群访问,使用backup访问实现只访问kxcontroller1,而当1挂了的时候才去访问kxcontroller2
listen galera_cluster_3306
  bind 10.120.42.10:3306
  mode tcp
  balance  source
  option  tcpka
  option  httpchk
  server kxcontroller1 10.120.42.1:3306 check port 9200 inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:3306 backup check port 9200 inter 2000 rise 2 fall 5
 
#队列 RabbitMQ 访问,使用访问实现只访问1台,当VIP在kxcontroller1上时,它的只访问kxcontroller1上的rabbitmq
listen rabbitmq_cluster_5672
  bind 10.120.42.10:5672
  mode tcp
  balance roundrobin
  server kxcontroller1 10.120.42.1:5672 check inter 2000 rise 2 fall 5
 
#镜像Glance API 访问,使用访问实现只访问1台,无论VIP在谁身上时,它只访问kxcontroller2上的Glance API ,kxcontroller1每天凌晨定时向controller2同步image文件,当kxcontroller2有故障时做手工冷备切换至controller1
listen glance_api_cluster_9292
  bind 10.120.42.10:9292
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
#  server kxcontroller1 10.120.42.1:9292 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:9292 check inter 2000 rise 2 fall 5
 
#镜像Glance 注册 访问,使用访问实现只访问1台,无论VIP在谁身上时 ,它只访问kxcontroller2上的 Glance 注册 ,kxcontroller1每天凌晨定时向controller2同步image文件,当kxcontroller2有故障时做手工冷备切换至controller1
listen glance_registry_cluster_9191
  bind 10.120.42.10:9191
  balance  source
  option  tcpka
  option  tcplog
#  server kxcontroller1 10.120.42.1:9191 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:9191 check inter 2000 rise 2 fall 5
 
 
#keystone 35357访问,使用访问实现只访问1台,当VIP在kxcontroller1上时,它只访问kxcontroller1上的 keystone 35357
listen keystone_admin_cluster_35357
  bind 10.120.42.10:35357
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server kxcontroller1 10.120.42.1:35357 check inter 2000 rise 2 fall 5
#  server kxcontroller2 10.120.42.2:35357 check inter 2000 rise 2 fall 5
 
#keystone 5000访问,使用访问实现只访问1台,当VIP在kxcontroller1上时,它只访问kxcontroller1上的 keystone 5000
listen keystone_public_internal_cluster_5000
  bind 10.120.42.10:5000
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server kxcontroller1 10.120.42.1:5000 check inter 2000 rise 2 fall 5
#  server kxcontroller2 10.120.42.2:5000 check inter 2000 rise 2 fall 5
 
#nova api访问,不考虑VIP在谁身上,这个服务可以负载均衡访问
listen nova_compute_api_cluster_8774
  bind 10.120.42.10:8774
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server kxcontroller1 10.120.42.1:8774 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:8774 check inter 2000 rise 2 fall 5
 
#nova 元数据 访问,不考虑VIP在谁身上,这个服务可以负载均衡访问
listen nova_metadata_api_cluster_8775
  bind 10.120.42.10:8775
  balance  source
  option  tcpka
  option  tcplog
  server kxcontroller1 10.120.42.1:8775 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:8775 check inter 2000 rise 2 fall 5
 
#cinder 块存储访问,虽然这里VIP开启,但后端服务我没开启,暂时挂在这里
listen cinder_api_cluster_8776
  bind 10.120.42.10:8776
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server kxcontroller1 10.120.42.1:8776 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:8776 check inter 2000 rise 2 fall 5
 
#ceilometer 访问,虽然这里VIP开启,但后端服务我没开启,暂时挂在这里
listen ceilometer_api_cluster_8777
  bind 10.120.42.10:8777
  balance  source
  option  tcpka
  option  tcplog
  server kxcontroller1 10.120.42.1:8777 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:8777 check inter 2000 rise 2 fall 5
 
#nova VNC访问,不考虑VIP在谁身上,这个后端 服务可以负载均衡访问
listen nova_vncproxy_cluster_6080
  bind 10.120.42.10:6080
  balance  source
  option  tcpka
  option  tcplog
  server kxcontroller1 10.120.42.1:6080 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:6080 check inter 2000 rise 2 fall 5
 
#neutron  api访问,不考虑VIP在谁身上,这个后端服务可以负载均衡访问
listen neutron_api_cluster_9696
  bind 10.120.42.10:9696
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server kxcontroller1 10.120.42.1:9696 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:9696 check inter 2000 rise 2 fall 5
 
#swift 块存储访问,虽然这里VIP开启,但后端服务我没开启,暂时挂在这里
listen swift_proxy_cluster_8080
  bind 10.120.42.10:8080
  balance  source
  option  tcplog
  option  tcpka
  server kxcontroller1 10.120.42.1:8080 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:8080 check inter 2000 rise 2 fall 5
 
#展示普能用户可用于查询的页面http://10.120.42.10:8888/stats 用户和密码admin:admin
listen admin_stats
        bind 0.0.0.0:8888
        option httplog
#由于defaut没有声明,默认使用tcp,所以在里要额外配置mode http
        mode http
        stats refresh 30s
        stats uri /stats
        stats realm Haproxy Manager
        stats auth admin:admin
 
#展示管理员 admin 页面可供修改页面http://10.120.42.10:8008/admin-venic 用户和密码venic:venic8888
listen  stats_auth 0.0.0.0:8008
#由于defaut没有声明,默认使用tcp, 所以在listen里要额外配置 mode http
        mode http
        stats enable
        stats uri /admin-venic
        stats auth venic:venic8888
        stats admin if TRUE
 
 
 
 
 
[root@kxcontroller2 ~]# vi  /etc/haproxy/haproxy.cfg 
 
#全局配置
global
  chroot  /home/haproxy/log
  daemon
  group  haproxy
  maxconn  20000
  pidfile  /home/haproxy/run/haproxy.pid
  user  haproxy
 
defaults
  log  global
  maxconn  20000
  option  redispatch
  retries  3
  timeout  http-request 10s
  timeout  queue 1m
  timeout  connect 10s
  timeout  client 1m
  timeout  server 1m
  timeout  check 10s
 
#dashboard界面,不考虑VIP在谁身上,这个服务可以负载均衡访问
listen dashboard_cluster_80
  bind 10.120.42.10:80
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server kxcontroller1 10.120.42.1:80 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:80 check inter 2000 rise 2 fall 5
 
#数据库集群访问,使用backup访问实现只访问kxcontroller1,而当1挂了的时候才去访问kxcontroller2
listen galera_cluster_3306
  bind 10.120.42.10:3306
  mode tcp
  balance  source
  option  tcpka
  option  httpchk
  server kxcontroller1 10.120.42.1:3306 check port 9200 inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:3306 backup check port 9200 inter 2000 rise 2 fall 5
 
#队列 RabbitMQ 访问,使用访问实现只访问1台,当VIP在kxcontroller2上时,它只访问kxcontroller2上的rabbitmq
listen rabbitmq_cluster_5672
  bind 10.120.42.10:5672
  mode tcp
  balance roundrobin
  server kxcontroller1 10.120.42.1:5672 check inter 2000 rise 2 fall 5
 
#镜像Glance API 访问,使用访问实现只访问1台,无论VIP在谁身上时,它只访问kxcontroller2上的Glance API ,kxcontroller1每天凌晨定时向controller2同步image文件,当kxcontroller2有故障时做手工冷备切换至controller1
listen glance_api_cluster_9292
  bind 10.120.42.10:9292
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
#  server kxcontroller1 10.120.42.1:9292 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:9292 check inter 2000 rise 2 fall 5
 
#镜像Glance 注册 访问,使用访问实现只访问1台,无论VIP在谁身上时 ,它只访问kxcontroller2上的 Glance 注册 ,kxcontroller1每天凌晨定时向controller2同步image文件,当kxcontroller2有故障时做手工冷备切换至controller1
listen glance_registry_cluster_9191
  bind 10.120.42.10:9191
  balance  source
  option  tcpka
  option  tcplog
#  server kxcontroller1 10.120.42.1:9191 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:9191 check inter 2000 rise 2 fall 5
 
#keystone 35357访问,使用访问实现只访问1台,当VIP在kxcontroller2上时,它只访问kxcontroller2上的 keystone 35357
listen keystone_admin_cluster_35357
  bind 10.120.42.10:35357
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
#  server kxcontroller1 10.120.42.1:35357 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:35357 check inter 2000 rise 2 fall 5
 
#keystone 5000访问,使用访问实现只访问1台,当VIP在kxcontroller1上时,它只访问kxcontroller2上的 keystone 5000
listen keystone_public_internal_cluster_5000
  bind 10.120.42.10:5000
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
#  server kxcontroller1 10.120.42.1:5000 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:5000 check inter 2000 rise 2 fall 5
 
#nova api访问,不考虑VIP在谁身上,这个服务可以负载均衡访问
listen nova_compute_api_cluster_8774
  bind 10.120.42.10:8774
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server kxcontroller1 10.120.42.1:8774 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:8774 check inter 2000 rise 2 fall 5
 
#nova 元数据 访问,不考虑VIP在谁身上,这个服务可以负载均衡访问
listen nova_metadata_api_cluster_8775
  bind 10.120.42.10:8775
  balance  source
  option  tcpka
  option  tcplog
  server kxcontroller1 10.120.42.1:8775 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:8775 check inter 2000 rise 2 fall 5
 
#cinder 块存储访问,虽然这里VIP开启,但后端服务我没开启,暂时挂在这里
listen cinder_api_cluster_8776
  bind 10.120.42.10:8776
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server kxcontroller1 10.120.42.1:8776 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:8776 check inter 2000 rise 2 fall 5
 
 
#ceilometer 访问,虽然这里VIP开启,但后端服务我没开启,暂时挂在这里
listen ceilometer_api_cluster_8777
  bind 10.120.42.10:8777
  balance  source
  option  tcpka
  option  tcplog
  server kxcontroller1 10.120.42.1:8777 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:8777 check inter 2000 rise 2 fall 5
 
#nova VNC访问,不考虑VIP在谁身上,这个后端 服务可以负载均衡访问
listen nova_vncproxy_cluster_6080
  bind 10.120.42.10:6080
  balance  source
  option  tcpka
  option  tcplog
  server kxcontroller1 10.120.42.1:6080 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:6080 check inter 2000 rise 2 fall 5
 
#neutron  api访问,不考虑VIP在谁身上,这个后端服务可以负载均衡访问
listen neutron_api_cluster_9696
  bind 10.120.42.10:9696
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server kxcontroller1 10.120.42.1:9696 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:9696 check inter 2000 rise 2 fall 5
 
#cinder 块存储访问,虽然这里VIP开启,但后端服务我没开启,暂时挂在这里
listen swift_proxy_cluster_8080
  bind 10.120.42.10:8080
  balance  source
  option  tcplog
  option  tcpka
  server kxcontroller1 10.120.42.1:8080 check inter 2000 rise 2 fall 5
  server kxcontroller2 10.120.42.2:8080 check inter 2000 rise 2 fall 5
 
#展示普能用户可用于查询的页面http://10.120.42.10:8888/stats 用户和密码admin:admin
listen admin_stats
        bind 0.0.0.0:8888
        option httplog
#由于defaut没有声明,默认使用tcp,所以在里要额外配置mode http
        mode http
        stats refresh 30s
        stats uri /stats
        stats realm Haproxy Manager
        stats auth admin:admin
 
#展示管理员 admin 页面可供修改页面http://10.120.42.10:8008/admin-venic 用户和密码venic:venic8888
listen  stats_auth 0.0.0.0:8008
#由于defaut没有声明,默认使用tcp, 所以在listen里要额外配置 mode http
        mode http
        stats enable
        stats uri /admin-venic
        stats auth venic:venic8888
        stats admin if TRUE
 
 
 
两个科兴的控制主备节点配置好后,
 
systemctl start haproxy.service
systemctl enable haproxy.service
 
测试监控页面是否生效,以判断haproxy是否正常工作
http://10.120.42.10:8888/stats
http://10.120.42.10:8008/admin-venic
 
启动时,没有获取到VIP备节点会发现haproxy服务启动不了。原因如下,
 
haproxy启动时提示失败:
[ALERT] 164/1100300 (11606) : Starting proxy linuxyw.com: cannot bind socket
 
修复前,在主备节点上执行 netstat -anp | grep haproxy,检测VIP的端口是否都在监听。
这个问题,其实就是因为你的haproxy没有得到VIP的原因,而你的配置文件又绑定了当前不存在VIP地址,所以会提示以上错误
当然,我们要确保的haproxy服务要提前先启动,不然等故障时,到去手动启动haproxy服务,就无法高可用了。
 
解决方法:
修改内核参数:
vi /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind=1
保存结果,使内核参数生效
sysctl -p
 
再启动haproxy就可以启动了

openstack私有云布署实践【4.1 上层代理haproxy配置 (科兴环境)】的更多相关文章

  1. openstack私有云布署实践【2 安装前的服务器基本环境准备】

    服务器物理机都安装centos7.2 1511版本 , 此次采用的分区方式全是自动XFS格式LVM,在装系统时就将所有本地raid5硬盘都加入LVM全用了.默认/home目录有着最大的硬盘空间 并且我 ...

  2. openstack私有云布署实践【12.2 网络Neutron-controller节点配置(办公网环境)】

    网络这一块推荐使用的是 Neutron--LinuxBirdge的Ha高可用,此高可用方案对Public作用不是很大,Public只用到DHCP,而Private则会用到L3 Agent,则此方案是有 ...

  3. openstack私有云布署实践【12.1 网络Neutron-controller节点配置(科兴环境)】

    网络这一块推荐使用的是 Neutron--LinuxBirdge的Ha高可用,此高可用方案对Public作用不是很大,Public只用到DHCP,而Private则会用到L3 Agent,则此方案是有 ...

  4. openstack私有云布署实践【0 前言】

    管理控制层面示图: 其实在修改这个布署文档是,我发现当时生产中的布署已经严重偏离了openstack高可用的指导思想.我们自己实践的高可用其实是适应自己的架构而做的调整,因为我们现实手头上中没有比较符 ...

  5. openstack私有云布署实践【9.3 主从controller单向同步glance-image目录】

    采用Rysnc单向同步,而不用双方实时同步,原因是在历史的运行过程中,我们发现,有些镜像包太大,当在主用的glance将镜像保存时,并不是一时半会就把镜像保存好,当主用在保存时,备用节点又在实时同步那 ...

  6. openstack私有云布署实践【9.2 Glance镜像管理(办公网环境)】

    首先登录controller1创建glance数据库,并赋于远程和本地访问的权限.      mysql -u root -p   CREATE DATABASE glance; GRANT ALL ...

  7. openstack私有云布署实践【14.2 登录页dashboard-controller(办公网环境)】

    这一小节基本配置相同,但留意以下紫色部份的配置,当初为了管理方便,我们让办公网openstack的dashboard的登录桥接了科兴的dashboard,由此统一dashboard界面的登录地址   ...

  8. openstack私有云布署实践【5 数据库MariaDB 集群】

    kxcontroller1   kxcontroller2  controller1 这3台作角色 确保服务器的域名解析访问正常   确保NTP时间同步   配置HAproxy主备访问,其中的一项数据 ...

  9. openstack私有云布署实践【1 网络拓扑说明】

      图1说明:办公网的openstack使用2台交换机,10.40.40.2是24口  10.40.40.6是48口,管理网段接10.40.40.2VLAN1002     虚拟机的public网段接 ...

随机推荐

  1. Java构造器的深入理解

    [构造器与方法的深入理解] 构造器的深入理解 [博主]高瑞林 [博客地址]http://www.cnblogs.com/grl214 [博客地址]http://www.cnblogs.com/grl2 ...

  2. MVC源码解析 - 目录

    尽管MVC6和MVC4,5已经有很大不同, 但是, 作为一个普通开发人员, 还真没有资格去选择使用哪个版本. So, 尽管已经是old的版本, 还是再次花点时间去温故知新. 我记得在15年初的时候, ...

  3. Mac os 下使用gem命令的坑

    在安装sass的时候,发现无论如何都装不上. 于是各种搜索资料.终于在网上找到了原因.在这里附上地址,感谢作者. https://argcv.com/articles/4429.c 为了加深理解同时防 ...

  4. PRML 第二章mindmap

    PRML第二章的Mindmap,这一章读的比较快,主要是很多计算和证明的过程都跳过了,感觉不是特别需要认真去看每一个公式,能够记住每个小节的结论.公式就可以了.当然有能力.有时间的人还是可以认真读的, ...

  5. json的细节

    之前一直纳闷为什么在js里直接写的json数据可以不用eval()直接解析,而后台传入ajax的json数据需要eval()一下才能解析 原来是我没搞清楚json格式字符串跟json对象 var te ...

  6. 修改release management client对应的服务器的地址

    参考资料:http://stackoverflow.com/questions/25313053/how-to-change-a-release-management-server-name-in-r ...

  7. MySQL语句相关经验总结

    1. 字段自减 UPDATE `table_name` SET `total`=IF(`total` < 1, 0, `total`-1) WHERE `id` = 1; 一般在做字段减法的时候 ...

  8. 超实用 JS 代码段笔记(一)

    序1:30段简单代码段(有删减) 1 . 区分 IE 和 非 IE 浏览器 if(!+[1,]){ console.log('ie浏览器'); }else{ console.log('非ie浏览器') ...

  9. ajax中的stasus错误详解

    一.英文版解析 0: (Uninitialized) the send( ) method has not yet been invoked. 1: (Loading) the send( ) met ...

  10. hdu 2188 选拔志愿者(sg博弈)

    Problem Description 对于四川同胞遭受的灾难,全国人民纷纷伸出援助之手,几乎每个省市都派出了大量的救援人员,这其中包括抢险救灾的武警部队,治疗和防疫的医护人员,以及进行心理疏导的心理 ...