一、安装与配置HAProxy

1、调整内核参数,允许绑定VIP:

vim /etc/sysctl.conf

【内容】

net.ipv4.ip_nonlocal_bind=1

sysctl -p

2、安装HAProxy:

【源码安装】

wget -c http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.23.tar.gz

【备用链接:http://down1.chinaunix.net/distfiles/haproxy-1.4.21.tar.gz

tar zxvf haproxy-1.4.23.tar.gz

cd haproxy-1.4.23

make TARGET=linux26      #如果是32位机器,则make TARGET=linux26 ARCH=i386

make install

mkdir -p /etc/haproxy

cp examples/haproxy.cfg /etc/haproxy/haproxy.cfg【可以跳过】

【yum安装】

yum install  haproxy

3、配置HAProxy:

vim /etc/haproxy/haproxy.cfg

【内容】

global

daemon

defaults

mode http

maxconn 10000

timeout connect 10s

timeout client 10s

timeout server 10s

frontend keystone-admin-vip

bind 10.10.102.45:35357

default_backend keystone-admin-api

frontend keystone-public-vip

bind 10.10.102.45:5000

default_backend keystone-public-api

frontend quantum-vip

bind 10.10.102.45:9696

default_backend quantum-api

frontend glance-vip

bind 10.10.102.45:9191

default_backend glance-api

frontend glance-registry-vip

bind 10.10.102.45:9292

default_backend glance-registry-api

frontend nova-ec2-vip

bind 10.10.102.45:8773

default_backend nova-ec2-api

frontend nova-compute-vip

bind 10.10.102.45:8774

default_backend nova-compute-api

frontend nova-metadata-vip

bind 10.10.102.45:8775

default_backend nova-metadata-api

frontend cinder-vip

bind 10.10.102.45:8776

default_backend cinder-api

backend keystone-admin-api

balance roundrobin

server mesa-virt-01 10.10.102.6:35357 check inter 10s

server mesa-virt-02 10.10.102.7:35357 check inter 10s

backend keystone-public-api

balance roundrobin

server mesa-virt-01 10.10.102.6:5000 check inter 10s

server mesa-virt-02 10.10.102.7:5000 check inter 10s

backend quantum-api

balance roundrobin

server mesa-virt-01 10.10.102.6:9696 check inter 10s

server mesa-virt-02 10.10.102.7:9696 check inter 10s

backend glance-api

balance roundrobin

server mesa-virt-01 10.10.102.6:9191 check inter 10s

server mesa-virt-02 10.10.102.7:9191 check inter 10s

backend glance-registry-api

balance roundrobin

server mesa-virt-01 10.10.102.6:9292 check inter 10s

server mesa-virt-02 10.10.102.7:9292 check inter 10s

backend nova-ec2-api

balance roundrobin

server mesa-virt-01 10.10.102.6:8773 check inter 10s

server mesa-virt-02 10.10.102.7:8773 check inter 10s

backend nova-compute-api

balance roundrobin

server mesa-virt-01 10.10.102.6:8774 check inter 10s

server mesa-virt-02 10.10.102.7:8774 check inter 10s

backend nova-metadata-api

balance roundrobin

server mesa-virt-01 10.10.102.6:8775 check inter 10s

server mesa-virt-02 10.10.102.7:8775 check inter 10s

backend cinder-api

balance roundrobin

server mesa-virt-01 10.10.102.6:8776 check inter 10s

server mesa-virt-02 10.10.102.7:8776 check inter 10s

4、HAProxy的启动管理脚本:

vim /etc/init.d/haproxy

【内容】

# cat /etc/init.d/haproxy

#!/bin/bash

#

# chkconfig: 2345 85 15

# description: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited \

#              for high availability environments.

# processname: haproxy

# config: /etc/haproxy.cfg

# pidfile: /var/run/haproxy.pid

# Source function library.

if [ -f /etc/init.d/functions ]; then

. /etc/init.d/functions

elif [ -f /etc/rc.d/init.d/functions ] ; then

. /etc/rc.d/init.d/functions

else

exit 0

fi

CONF_FILE="/etc/haproxy/haproxy.cfg"

HAPROXY_BINARY="/usr/local/sbin/haproxy"

PID_FILE="/var/run/haproxy.pid"

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0

[ -f ${CONF_FILE} ] || exit 1

RETVAL=0

start() {

$HAPROXY_BINARY -c -q -f $CONF_FILE

if [ $? -ne 0 ]; then

echo "Errors found in configuration file."

return 1

fi

echo -n "Starting HAproxy: "

daemon $HAPROXY_BINARY -D -f $CONF_FILE -p $PID_FILE

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && touch /var/lock/subsys/haproxy

return $RETVAL

}

stop() {

echo -n "Shutting down HAproxy: "

killproc haproxy -USR1

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/haproxy

[ $RETVAL -eq 0 ] && rm -f $PID_FILE

return $RETVAL

}

restart() {

$HAPROXY_BINARY -c -q -f $CONF_FILE

if [ $? -ne 0 ]; then

echo "Errors found in configuration file, check it with 'haproxy check'."

return 1

fi

stop

start

}

check() {

$HAPROXY_BINARY -c -q -V -f $CONF_FILE

}

rhstatus() {

pid=$(pidof haproxy)

if [ -z "$pid" ]; then

echo "HAProxy is stopped."

exit 3

fi

status haproxy

}

condrestart() {

[ -e /var/lock/subsys/haproxy ] && restart || :

}

# See how we were called.

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

reload)

restart

;;

condrestart)

condrestart

;;

status)

rhstatus

;;

check)

check

;;

*)

echo $"Usage: haproxy {start|stop|restart|reload|condrestart|status|check}"

RETVAL=1

esac

exit $RETVAL

5、检查HAProxy的配置是否正确:

# /etc/init.d/haproxy check

Configuration file is valid

【可能要经过如下处理:】

1). 【问题】

etc/init.d/haproxy check

-bash: /etc/init.d/haproxy: Permission denied

【解决】

cd /etc/init.d

chmod a+x haproxy

2). 【问题】

/etc/init.d/haproxy check

/etc/init.d/haproxy: line 70: /usr/local/bin/haproxy: No such file or directory

【解决】

cp /usr/local/sbin/haproxy /usr/local/bin/

二、Pacemaker + CoroSync配置

1、先定义一些资源属性约束(包括禁止STONITH错误,忽略Quorum,防止资源在恢复之后移动等):

# crm configure

property stonith-enabled=false

property no-quorum-policy=ignore

rsc_defaults resource-stickiness=100

rsc_defaults failure-timeout=0

rsc_defaults migration-threshold=10

2、配置VIP资源:

crm(live)configure#

primitive api-vip ocf:heartbeat:IPaddr2 params ip=10.10.102.45 cidr_netmask=24 op monitor interval=5s

3、配置HAProxy资源:

crm(live)configure#

primitive haproxy lsb:haproxy op monitor interval="5s"

4、定义运行的HAProxy和VIP必须在同一节点上:

crm(live)configure#

colocation haproxy-with-vip INFINITY: haproxy api-vip

5、定义先接管VIP之后才启动HAProxy:

crm(live)configure#

order haproxy-after-IP mandatory: api-vip haproxy

6、验证并提交配置:

crm(live)configure# verify

crm(live)configure# commit

crm(live)configure# quit

7、资源状态查看

查看资源状态:

crm_mon -1 【可能有问题】

crm status

在机器1上查看:

/etc/init.d/haproxy status

haproxy (pid  1629) is running...

ip addr show eth0

2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 08:00:27:67:ab:7e brd ff:ff:ff:ff:ff:ff

inet 10.10.102.6/24 brd 192.168.1.255 scope global eth0

inet 10.10.102.45/24 brd 192.168.1.255 scope global secondary eth0【此处会显示虚拟ip】

inet6 fe80::a00:27ff:fe67:ab7e/64 scope link

valid_lft forever preferred_lft forever

在机器2上查看:

/etc/init.d/haproxy status

HAProxy is stopped.

ip addr show eth0

2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 08:00:27:67:ab:7e brd ff:ff:ff:ff:ff:ff

inet 10.10.102.7/24 brd 192.168.1.255 scope global eth0

inet6 fe80::a00:27ff:fe67:ab7e/64 scope link tentative dadfailed

valid_lft forever preferred_lft forever

从上面的这些信息,可以知道VIP绑定在机器1上,同时只有机器1上的HAProxy已经启动.

8、Failover测试

在pacemaker中standby正在运行资源的机器,观察集群资源在两台机器中间的转移。

【用到的命令】

crm node standby 机器名

crm status

crm node online 机器名

三、以keystone为例配置API服务

1、/etc/keystone/keystone.conf配置【如果是其他API服务应该修改认证地址,不修改绑定地址】

【貌似无需修改,都绑定监听自己的物理ip】

2、service endpoint配置【在一台机器上修改就行了,由于此时mysql已经实现HA,所以在任意一台机器上修改endpoint对两台机器都是全局有效的】

1) 以当前admin身份登录keystone

2)创建绑定vip的endpoint

keystone service-list

【记住service-list中keystone的service-id】

keystone endpoint-create --region RegionOne \

--service-id  $(keystone service-list | awk '/ keystone / {print $2}') \

--publicurl "http://10.10.102.45:5000/v2.0" \

--internalurl "http://10.10.102.45:5000/v2.0" \

--adminurl http://10.10.102.45:35357/v2.0

【10.10.102.45为vip】

3)删除旧的endpoint

keystone endpoint-list

【记住旧的endpoint的id号】

keystone endpoint-delete 21a7b25a08d74882a711f09f0c313170

4)重启服务

service openstack-keystone restart

5)验证

export OS_AUTH_URL=http://10.10.102.45:35357/v2.0/

【10.10.102.45为vip】

keystone user-list(正常)

四、测试与验证:

由于API服务没有作为pacemaker的资源,所以必须在两台机器中的一台上手动停掉API服务,然后在其他机器上用VIP登录API服务

【例如,用到的命令如下】

service openstack-keystone stop

service openstack-keystone status

参考网站:

http://openstack.redhat.com/Load_Balance_OpenStack_API#HAProxy

http://www.zrwm.com/?p=6983

http://docwiki.cisco.com/wiki/COE_Grizzly_Release:_High-Availability_Manual_Installation_Guide#Glance_Installation

http://openstack.redhat.com/RDO_HighlyAvailable_and_LoadBalanced_Control_Services 【附带Mysql和Qpid的HA配置】

OpenStack API部分高可用配置(二)的更多相关文章

  1. OpenStack API部分高可用配置(一)

    一.概况与原理  SHAPE  \* MERGEFORMAT 1)所需要的配置组件有:pacemaker+corosync+HAProxy 2)主要原理:HAProxy作为负载均衡器,将对openst ...

  2. OpenStack中MySQL高可用配置

    采用Heartbeat+DRBD+mysql高可用方案,配置两个节点的高可用集群 l  配置各节点互相解析 gb07 gb06 l  配置各节点时间同步 gb07 [root@gb07 ~]# ntp ...

  3. 双主MySQL+keepalived高可用配置

    部署双节点双主数据库服务器mysql 分别在二台服务器上安装mysql,要求同版本或主服务器比从服务器版本高. 主机mysql配置: Vi /etc/my.cnf [mysqld] Log-bin=m ...

  4. MariaDB+Keepalived双主高可用配置MySQL-HA

    利用keepalived构建高可用MySQL-HA,保证两台MySQL数据的一致性,然后用keepalived实现虚拟VIP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换. ...

  5. Spring Cloud之踩坑01 -- Eureka高可用配置

    转载:https://blog.csdn.net/dear_Alice_moon/article/details/79373955 问题描述: 在进行Eureka高可用配置时,控制台一直出现“.... ...

  6. Keepalived保证Nginx高可用配置

    Keepalived保证Nginx高可用配置部署环境 keepalived-1.2.18 nginx-1.6.2 VM虚拟机redhat6.5-x64:192.168.1.201.192.168.1. ...

  7. Mycat高可用解决方案二(主从复制)

    Mycat高可用解决方案二(主从复制) 系统部署规划 名称 IP 主机名称 用户名/密码 配置 mysql主节点 192.168.199.110 mysql-01 root/hadoop 2核/2G ...

  8. springCloud 之 Eureka注册中心高可用配置

    springCloud的eureka高可用配置方案思路是:几个服务中心之间相互注册,比如两个注册中心,A注册到B上,B注册到A上,如果是三个注册中心则是:A注册到BC上,B注册到AC上,C注册到AB上 ...

  9. ES数据库高可用配置

    ES高可用集群部署 1.ES高可用架构图 2.创建ES用户组 1.Elasticsearch不能在 root 用户下启动,我们需要在三台机器上分创建一个普通用户# 创建elastic用户 userad ...

随机推荐

  1. 微信小程序之缓存——不同页面传递数据

    1. 添加缓存 单个密钥允许存储的最大数据长度为1MB,所有数据存储上限为10MB. // 存储信息到storage // 异步存储 set() { wx.setStorage({ key: 'use ...

  2. 微信小程序之路由

    1. 路由方式 路由方式 触发时机 路由前页面 路由后页面 初始化 小程序打开的第一个页面 onLoad, onShow 打开新页面 调用 API wx.navigateTo 或使用组件 onHide ...

  3. Macaca之Android原理浅析

    经过研究macaca的android模块源码,原理主要由以下三块构成 一.uiautomator TODO 二.nanohttp TODO 二.adb forward TODO

  4. REST-framework快速构建API--权限

    我们在访问资源时,有些资源保密程度较高,需要特殊的人员才能访问.比如,获取公司的每日收入流水的API接口,只能CEO才能查看. 这时,我们就需要将资源设定权限了. REST-framework实现如下 ...

  5. 写个发邮件的功能php的(全代码)

    ---恢复内容开始--- 正好做了个项目,需要在线留言,一般在线留言发邮件是很常见的方式,一开始从网上搜了很久都没有很全的,也有全一点的,但是也不能用,运行不成功,下面给大家分享一下运行成功了的全部代 ...

  6. 杂谈---小故事小道理,面试中的小技巧(NO.2)

    本篇是接着上一篇面试随笔的,上一次有猿友反应写的有些“扯淡”,LZ思来想去最大的原因可能是由于上一章写的全是一些大忌,既然是大忌,那么在现实当中发生的概率还是相对较小的,大部分人还是很少在面试中犯如此 ...

  7. HTML表单与输入实例

    解释HTML 表单用于搜集不同类型的用户输入.HTML 表单包含表单元素.表单元素指的是不同类型的 input 元素.复选框.单选按钮.提交按钮等等.<input> 元素<input ...

  8. 整理一些常用的前端CND加速库,VUE,Jquery,axios

    VUE https://cdn.staticfile.org/vue/2.2.2/vue.min.js Jquery https://cdn.bootcss.com/jquery/3.4.0/jque ...

  9. GitHub 新手教程 六,Git GUI 新手教程(3),从GitHub远端同步代码库

    从GitHub把代码库下载到本地: 1,打开 GitGUI,单击我们之前克隆好的本地库: 2,按图片所示点击,同步远端代码: 3,出现如下提示后,点击“Close”: 4,上面只是把代码下载下来,还没 ...

  10. [算法总结] 6 道题搞定 BAT 面试——堆栈和队列

    本文首发于我的个人博客:尾尾部落 0. 基础概念 栈:后进先出(LIFO) 队列:先进先出(FIFO) 1. 栈的 java 实现 import java.util.Arrays; public cl ...