一、安装与配置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. idea Cannot Resolve Symbol 问题解决

    总结:要多根据有问题的提示来进行百度搜索,这一次我就是搜索了 idea 提示的错误信息 Cannot Resolve Symbol ,才找到的解决方案,所以说出现问题,如果不是很复杂的场景或者原因很多 ...

  2. WPF DataGrid列设置为TextBox控件的相关绑定

    在wpf的DataGrid控件中,某一列的数据模板为TextBox控件的话,绑定Text="{Binding TxtSn, UpdateSourceTrigger=PropertyChang ...

  3. 最简单的iOS网络请求

    做iOS开发,说到网络请求,大家可能都不约而同的提到AFN,可以说大家的网络请求都是用AFN封装而成,AFN的强大易用的确很好. 但是版本升级就会出现一些问题,所以就自己基于iOS原生封装了一个网络请 ...

  4. 在nodejs中引进模块要经历的步骤

    在nodejs中引入模块需要经历如下3个步骤 1.路径分析 2.文件定位 3.编译执行 在nodejs中模块分为两类,一类是nodejs提供的模块,称为核心模块,另一类的用户编写的模块,称为文件模块. ...

  5. HTTP 和 HTTPS 直观上看哪里不一样了

    1. 我在自己搭建的 HTTP 网站上进行登陆测试 填写账号和密码,账号:123456 ,密码:654321 (当然是乱填的,只为了看传输数据) 点击登录,用wireshark抓包看看传输的数据 2. ...

  6. 四则运算生成程序——GUI支持和部分功能改进

    项目成员:张金生     张政 工程地址: https://coding.net/u/jx8zjs/p/paperOne/git ssh://git@git.coding.net:jx8zjs/pap ...

  7. 解决局域网IP冲突

    进入cmd ipconfig -all 查看现有IP,发现IP不是192.168.1.*的形式,而是192.168.0.*等异常 ipconfig -release  释放现有IP ipconfig ...

  8. 操作系统学习(一)、80x86保护模式内存管理

    整理的不好,凑合着看吧 目录 1.内存及寻址 2.地址变换 3.分段机制 4.分页机制 5.保护 6.去到底部 一.内存及寻址 返回目录 二.地址变换 80X86 从 逻辑地址 到 物理地址 的转换: ...

  9. WebApplication与WebSite区别

    1. WebApplication(Web应用程序)和WebSite(网站)的区别:WebSite是为了兼容从ASP转过来的开发人员的习惯而存在的,用起来简单,例如:不需要创建命名控件.C#代码修改以 ...

  10. BOM之screen对象

    前面的话 screen对象在javascript编程中,比较冷门,不太常用.screen对象用来表明客户端的能力,其中包括浏览器窗口外部的显示器的信息,如像素高度和宽度等.本文将详细介绍screen对 ...