搭建高可用OpenStack(Queen版)集群(二)之部署控制节点高可用的管理支持服务

一、搭建高可用OpenStack(Queen版)集群之部署控制节点高可用的管理支持服务

一、数据库:Mariadb-Galera集群部署

1、MariaDB Galera Cluster的简介及特点
1、MariaDB Galera Cluster的主要功能
  • 多个节点数据同步复制
  • 每个节点都是主节点,每个节点都有全部的数据
  • 每个节点都可以提供读写操作
  • 失效节点自动剔除,新节点加入自动同步(慎重,新节点加入会造成锁表)
2、MariaDB Galera Cluster的优点
  • 多主的结构,不存在同步延迟的问题。(master-slave是异步同步数据,Galera是同步同步数据)
  • 不存在事务丢失的情况(有待验证)
  • 节点都可以进行读写,客户端可以任意连接到其中节点,增强负载能力
3、MariaDB Galera Cluster的缺点
  • 加入新节点时,同步数据会造成锁表
  • 对于写入操作会发生到每个节点上
  • 多少个节点就有多少份数据
  • 网络不稳,会出现脑裂情况,服务将不可用,不适用与重要数据的生产环境
  • 仅支持InnoDB/XtraDB存储引擎
2、MariaDB Galera Cluster工作流程图

当客户端发送一个commit命令,在事务被提交之前,所有对数据的更改都会被write-set收集起来,并且将write-set记录的内容发送给其他节点。

write-set将在每个节点上使用搜索到的主键进行确认性测试,测试结果决定着节点是否应用write-set更改数据。如果认证测试失败,节点将丢弃write-set;如果测试成功,则事务提交。工作如下:

3、搭建MariaDB Galera Cluster集群
1、安装mariadb和galera相关组件
复制代码
# 在全部controller节点安装mariadb,以controller01节点为例
yum install mariadb mariadb-server python2-PyMySQL -y

# 安装galera相关插件,利用galera搭建集群
yum install mariadb-server-galera mariadb-galera-common galera xinetd rsync -y 

安装完后的配置文件:

复制代码
# ll /etc/my.cnf.d/
total 28
-rw-r--r-- 1 root root   41 Oct  4  2017 auth_gssapi.cnf
-rw-r--r-- 1 root root  295 Dec 15  2016 client.cnf
-rw-r--r-- 1 root root  763 Dec 15  2016 enable_encryption.preset
-rw-r--r-- 1 root root 3509 Oct  4  2017 galera.cnf
-rw-r--r-- 1 root root 1462 Oct  4  2017 mariadb-server.cnf
-rw-r--r-- 1 root root  232 Dec 15  2016 mysql-clients.cnf
-rw-r--r-- 1 root root  285 Dec 15  2016 tokudb.cnf
2、初始化mariadb

在全部控制节点初始化数据库密码,以controller01节点为例;

复制代码
# root初始密码为空
systemctl start mariadb.service
systemctl enable mariadb.service
[root@controller01 ~]# mysql_secure_installation
Enter current password for root (enter for none): 
Set root password? [Y/n] y
New password: 
Re-enter new password: 
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y 
3、修改MariaDB的配置文件

在全部控制节点/etc/my.cnf.d/目录下新增openstack.cnf配置文件,主要设置集群同步相关参数,以controller01节点为例,个别涉及ip地址/host名等参数根据实际情况修改

复制代码
[root@controller01 my.cnf.d]# cat /etc/my.cnf.d/openstack.cnf 
[mysqld]
binlog_format = ROW
bind-address = 10.20.9.189
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
[galera]
bind-address = 10.20.9.189
wsrep_provider = /usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address ="gcomm://controller01,controller02,controller03"
wsrep_cluster_name = openstack-cluster-01
wsrep_node_name = controller01
wsrep_node_address = 10.20.9.189
wsrep_on=ON
wsrep_slave_threads=4
wsrep_sst_method=rsync
default_storage_engine=InnoDB
[embedded]
[mariadb]
[mariadb-10.1] 
4、构建mariadb集群
复制代码
# 停止全部控制节点的mariadb服务,以controller01节点为例
systemctl stop mariadb.service

# 任选1个控制节点以如下方式启动mariadb服务,这里选择controller01节点
/usr/libexec/mysqld --wsrep-new-cluster --user=root &

# 其他控制节点加入mariadb集群,以controller02节点为例;
# 启动后加入集群,controller02节点从controller01节点同步数据,也可同步查看mariadb日志/var/log/mariadb/mariadb.log
systemctl start mariadb.service
systemctl status mariadb.service
复制代码
  重新启动controller01节点;
复制代码
# 启动前删除contrller01节点的数据 
pkill -9 mysql
rm -rf /var/lib/mysql/*

# 注意以system unit方式启动mariadb服务时的权限
chown mysql:mysql /var/run/mariadb/mariadb.pid

# 启动后查看节点所在服务状态,controller01节点从controller02节点同步数据
systemctl start mariadb.service
systemctl status mariadb.service
复制代码
  查看集群状态
复制代码
[root@controller01 ~]# mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 10.1.20-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show status like "wsrep_cluster_size";
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+
1 row in set (0.00 sec)

MariaDB [(none)]> SHOW status LIKE 'wsrep_ready';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wsrep_ready   | ON    |
+---------------+-------+
1 row in set (0.00 sec)
4、设置心跳检测clustercheck
1、准备脚本
复制代码
# 下载clustercheck脚本
wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck

# clustercheck这个文件也许存在,检查是否一致

# 赋权
chmod +x clustercheck
cp -rp ~/clustercheck /usr/bin/ 
2、创建心跳检测用户

在任意控制节点创建clustercheck_user用户并赋权;

注意账号/密码与脚本中的账号/密码对应,这里采用的是脚本默认的账号/密码,否则需要修改clustercheck脚本文件

复制代码
[root@controller01 ~]# mysql -uroot -pmysql_pass
MariaDB [(none)]> GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!';
MariaDB [(none)]> FLUSH PRIVILEGES; 
3、创建检测配置文件

在全部控制节点新增心跳检测服务配置文件/etc/xinetd.d/mysqlchk,以controller01节点为例

复制代码
[root@controller01 ~]# vim /etc/xinetd.d/mysqlchk
# default: on
# description: mysqlchk
service mysqlchk
{
   port = 9200
   disable = no
   socket_type = stream
   protocol = tcp
   wait = no
   user = root
   group = root
   groups = yes
   server = /usr/bin/clustercheck
   type = UNLISTED
   per_source = UNLIMITED
   log_on_success =
   log_on_failure = HOST
   flags = REUSE
} 
4、启动心跳检测服务
复制代码
# 修改/etc/services,变更tcp9200端口用途,以controller01节点为例
[root@controller01 ~]# vim /etc/services
#wap-wsp         9200/tcp                # WAP connectionless session service
mysqlchk        9200/tcp                # mysqlchk

# 启动xinetd服务,以controller01节点为例
systemctl daemon-reload
systemctl enable xinetd
systemctl start xinetd 
5、测试心跳检测脚本

在全部控制节点验证,以controller01节点为例

复制代码
[root@controller01 ~]# /usr/bin/clustercheck

二、消息队列:RabbitMQ集群部署

采用openstack官方的安装方法,在未更新erlang的情况下,rabbitmq不是最新版本。

如果需要部署最新版本rabbitmq集群,可参考:RabbitMQ集群配置 - Netonline - 博客园

**  1、**安装rabbitmq
复制代码
# 在全部控制节点,使用aliyun的epel镜像,以controller01节点为例
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install erlang rabbitmq-server -y
systemctl enable rabbitmq-server.service 
**  2、**构建rabbitmq集群
复制代码
# 任选1个控制节点首先启动rabbitmq服务,这里选择controller01节点
systemctl start rabbitmq-server.service
rabbitmqctl cluster_status

# 分发.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@controller02:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@controller03:/var/lib/rabbitmq/

# 修改controller02/03节点.erlang.cookie文件的用户/组,以controller02节点为例
[root@controller02 ~]# chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie

# 注意修改全部控制节点.erlang.cookie文件的权限,默认即400权限,可不修改
[root@controller02 ~]# ll /var/lib/rabbitmq/.erlang.cookie

# 启动controller02/03节点的rabbitmq服务 
systemctl start rabbitmq-server

# 构建集群,controller02/03节点以ram节点的形式加入集群
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@controller01
rabbitmqctl start_app

复制代码
[root@controller01 ~]# rabbitmqctl cluster_status

**  3、创建**rabbitmq账号
复制代码
# 在任意节点新建账号并设置密码,以controller01节点为例
rabbitmqctl add_user openstack openstack

# 设置新建账号的状态
rabbitmqctl set_user_tags openstack administrator

# 设置新建账号的权限
rabbitmqctl set_permissions -p "/" openstack ".*" ".*" ".*"

# 查看账号
rabbitmqctl list_users 
**  4、**镜像队列ha(在controller01执行)
复制代码
# 设置镜像队列高可用
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

# 查看镜像队列策略
rabbitmqctl list_policies 

5、安装web管理插件

在全部控制节点安装web管理插件,以controller01节点为例

复制代码
rabbitmq-plugins enable rabbitmq_management

浏览器访问,http://10.20.9.190:15672/

三、Memcached集群

Memcached是无状态的,各控制节点独立部署,openstack各服务模块统一调用多个控制节点的memcached服务即可。

采用openstack官方的安装方法,如果需要部署最新版本memcached,可参考:Memcached&PHP-Memcache安装配置 - Netonline - 博客园

在全部控制节点安装memcached,以下配置以controller01节点为例。

1、安装memcached
复制代码
yum install memcached python-memcached -y
**  2、 更改**memcached
复制代码
sed -i 's|127.0.0.1,::1|0.0.0.0|g' /etc/sysconfig/memcached 
**  3、启动memcached,并设置为开机自启**
复制代码
systemctl enable memcached.service
systemctl start memcached.service
systemctl status memcached.service

四、搭建Pacemaker cluster stack集群

Openstack官网使用开源的pacemaker cluster stack做为集群高可用资源管理软件。

详细介绍:https://docs.openstack.org/ha-guide/controller-ha-pacemaker.html

**  1.、**安装pacemaker
复制代码
  在全部控制节点安装相关服务,以controller01节点为例;
复制代码
yum install pacemaker pcs corosync fence-agents resource-agents -y
**  2、**构建集群
1、启动pcs服务,在全部控制节点执行,以controller01节点为例
复制代码
systemctl enable pcsd
systemctl start pcsd

# 修改集群管理员hacluster(默认生成)密码,在全部控制节点执行,以controller01节点为例
# echo pacemaker_pass | passwd --stdin hacluster
Changing password for user hacluster.
passwd: all authentication tokens updated successfully.
2、认证配置在任意节点操作,以controller01节点为例;
复制代码
# 节点认证,组建集群,需要采用上一步设置的password
# pcs cluster auth controller01 controller02 controller03 -u hacluster -p pacemaker_pass --force
controller01: Authorized
controller02: Authorized
controller03: Authorized
3、创建并命名集群,在任意节点操作,以controller01节点为例;
复制代码
# 生成配置文件:/etc/corosync/corosync.conf
pcs cluster setup --force --name openstack-cluster-01 controller01 controller02 controller03

**  3、**启动服务

在任意控制节点操作

1、启动集群,以controller01节点为例
复制代码
# pcs cluster start --all
controller01: Starting Cluster...
controller02: Starting Cluster...
controller03: Starting Cluster...
2、设置集群开机启动
复制代码
# pcs cluster enable --all
controller01: Cluster Enabled
controller02: Cluster Enabled
controller03: Cluster Enabled
3、查看集群状态,也可使用" crm_mon -1"命令
复制代码
# “DC”:Designated Controller;
# 通过”cibadmin --query --scope nodes”可查看节点配置
复制代码
pcs status cluster

4、查看corosync状态
复制代码
# “corosync”表示一种底层状态等信息的同步方式
pcs status corosync

5、查看节点
复制代码
# 或:corosync-cmapctl runtime.totem.pg.mrp.srp.members
corosync-cmapctl | grep members

6、查看集群资源

方法一:使用命令(暂时没有资源)

复制代码
pcs resource 

方法二:web访问

通过web访问任意控制节点:https://10.20.9.189:2224

账号/密码(即构建集群时生成的密码):hacluster/pacemaker_pass

登录前如下图

登录后图下图

**  4、**设置属性

在任意控制节点设置属性即可,以controller01节点为例(下面的命令没有返回值);

复制代码
# 设置合适的输入处理历史记录及策略引擎生成的错误与警告,在troulbshoot时有用
pcs property set pe-warn-series-max=1000 \
pe-input-series-max=1000 \
pe-error-series-max=1000 

# pacemaker基于时间驱动的方式进行状态处理,” cluster-recheck-interval”默认定义某些pacemaker操作发生的事件间隔为15min,建议设置为5min或3min
pcs property set cluster-recheck-interval=5

# corosync默认启用stonith,但stonith机制(通过ipmi或ssh关闭节点)并没有配置相应的stonith设备(通过“crm_verify -L -V”验证配置是否正确,没有输出即正确),此时pacemaker将拒绝启动任何资源;
# 在生产环境可根据情况灵活调整,验证环境下可关闭
pcs property set stonith-enabled=false

# 默认当有半数以上节点在线时,集群认为自己拥有法定人数,是“合法”的,满足公式:total_nodes < 2 * active_nodes;
# 以3个节点的集群计算,当故障2个节点时,集群状态不满足上述公式,此时集群即非法;当集群只有2个节点时,故障1个节点集群即非法,所谓的”双节点集群”就没有意义;
# 在实际生产环境中,做2节点集群,无法仲裁时,可选择忽略;做3节点集群,可根据对集群节点的高可用阀值灵活设置
pcs property set no-quorum-policy=ignore

# v2的heartbeat为了支持多节点集群,提供了一种积分策略来控制各个资源在集群中各节点之间的切换策略;通过计算出各节点的的总分数,得分最高者将成为active状态来管理某个(或某组)资源;
# 默认每一个资源的初始分数(取全局参数default-resource-stickiness,通过"pcs property list --all"查看)是0,同时每一个资源在每次失败之后减掉的分数(取全局参数default-resource-failure-stickiness)也是0,此时一个资源不论失败多少次,heartbeat都只是执行restart操作,不会进行节点切换;
# 如果针对某一个资源设置初始分数”resource-stickiness“或"resource-failure-stickiness",则取单独设置的资源分数;
# 一般来说,resource-stickiness的值都是正数,resource-failure-stickiness的值都是负数;有一个特殊值是正无穷大(INFINITY)和负无穷大(-INFINITY),即"永远不切换"与"只要失败必须切换",是用来满足极端规则的简单配置项;
# 如果节点的分数为负,该节点在任何情况下都不会接管资源(冷备节点);如果某节点的分数大于当前运行该资源的节点的分数,heartbeat会做出切换动作,现在运行该资源的节点将释 放资源,分数高出的节点将接管该资源
复制代码
# pcs property list 只可查看修改后的属性值,参数”--all”可查看含默认值的全部属性值;
# 也可查看/var/lib/pacemaker/cib/cib.xml文件,或”pcs cluster cib”,或“cibadmin --query --scope crm_config”查看属性设置,” cibadmin --query --scope resources”查看资源配置
pcs property list

**  5、**配置vip
1、在任意控制节点设置vip(resource_id属性)即可,命名即为"vip";
  • ocf(standard属性):资源代理(resource agent)的一种,另有systemd,lsb,service等;
  • heartbeat:资源脚本的提供者(provider属性),ocf规范允许多个供应商提供同一资源代理,大多数ocf规范提供的资源代理都使用heartbeat作为provider;
  • IPaddr2:资源代理的名称(type属性),IPaddr2便是资源的type;
  • 通过定义资源属性(standard:provider:type),定位"vip"资源对应的ra脚本位置;
  • centos系统中,符合ocf规范的ra脚本位于/usr/lib/ocf/resource.d/目录,目录下存放了全部的provider,每个provider目录下有多个type;
  • op:表示Operations

**  创建vip10.20.9.47**

复制代码
pcs resource create vip ocf:heartbeat:IPaddr2 ip=10.20.9.47 cidr_netmask=24 op monitor interval=30s

**  查看集群资源通过"pcs resouce"查询,vip资源在controller01节点**

pcs resource

vip (ocf::heartbeat:IPaddr2): Started controller01

**  通过"ip a show"可查看vip**

复制代码
# ip a show ens192
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:50:56:85:3b:76 brd ff:ff:ff:ff:ff:ff
    inet 10.20.9.189/24 brd 10.20.9.255 scope global ens192
       valid_lft forever preferred_lft forever
    inet 10.20.9.47/24 brd 10.20.9.255 scope global secondary ens192
       valid_lft forever preferred_lft forever
**  6、**High availability management
1、通过web访问任意控制节点:

https://10.20.9.189:2224

账号/密码(即构建集群时生成的密码):hacluster/pacemaker_pass

2、虽然以cli的方式设置了集群,但web界面默认并不显示,手动添加集群

实际操作只需要添加已组建集群的任意节点即可,如下:

注意:(本实验环境只有一个vip)

如果api区分admin/internal/public接口,对客户端只开放public接口,通常设置两个vip,如命名为:vip_management与vip_public;

建议是将vip_management与vip_public约束在1个节点

复制代码
pcs constraint colocation add vip_management with vip_public

五、Haproxy

复制代码
  在全部控制节点安装haproxy,以controller01节点为例;
1、安装haproxy
复制代码
# 
# 如果需要安装最新版本,可参考:CentOS7.2 部署Haproxy 1.7.2 - Netonline - 博客园
复制代码
yum install haproxy -y
**  2、**配置haproxy.cfg
1、haproxy依靠rsyslog输出日志,是否输出日志根据实际情况设定;备份原haproxy.cfg文件
复制代码
cp /etc/haproxy/haproxy.cfg{,.bak}
2、集群的haproxy文件,涉及服务较多,这里针对涉及到的openstack服务,一次性设置完成,如下:

VIP:10.20.9.47

#grep -v ^# /etc/haproxy/haproxy.cfg

复制代码
global
  chroot  /var/lib/haproxy
  daemon
  group  haproxy
  user  haproxy
  maxconn  4000
  pidfile  /var/run/haproxy.pid

defaults
  log  global
  maxconn  4000
  option  redispatch
  retries  3
  timeout  http-request 10s
  timeout  queue 1m
  timeout  connect 10s
  timeout  client 1m
  timeout  server 1m
  timeout  check 10s

# haproxy监控页
listen stats
  bind 0.0.0.0:1080
  mode http
  stats enable
  stats uri /
  stats realm OpenStack\ Haproxy
  stats auth admin:admin
  stats  refresh 30s
  stats  show-node
  stats  show-legends
  stats  hide-version

# horizon服务
 listen dashboard_cluster
  bind 10.20.9.47:80
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server controller01 10.20.9.189:80 check inter 2000 rise 2 fall 5
  server controller02 10.20.9.190:80 check inter 2000 rise 2 fall 5
  server controller03 10.20.9.45:80 check inter 2000 rise 2 fall 5

# mariadb服务;
# 设置controller01节点为master,controller02/03节点为backup,一主多备的架构可规避数据不一致性;
# 另外官方示例为检测9200(心跳)端口,测试在mariadb服务宕机的情况下,虽然”/usr/bin/clustercheck”脚本已探测不到服务,
# 但受xinetd控制的9200端口依然正常,导致haproxy始终将请求转发到mariadb服务宕机的节点,暂时修改为监听3306端口
listen galera_cluster
  bind 10.20.9.47:3306
  balance  source
  mode    tcp
  server controller01 10.20.9.189:3306 check inter 2000 rise 2 fall 5
  server controller02 10.20.9.190:3306 backup check inter 2000 rise 2 fall 5
  server controller03 10.20.9.45:3306 backup check inter 2000 rise 2 fall 5

# 为rabbirmq提供ha集群访问端口,供openstack各服务访问;(vip需要改个和后端rabbitmq不一样的端口号)
# 如果openstack各服务直接连接rabbitmq集群,这里可不设置rabbitmq的负载均衡
 listen rabbitmq_cluster
  bind 10.20.9.47:5673
  mode tcp
  option tcpka
  balance roundrobin
  timeout client  3h
  timeout server  3h
  option  clitcpka
  server controller01 10.20.9.189:5672 check inter 10s rise 2 fall 5
  server controller02 10.20.9.190:5672 check inter 10s rise 2 fall 5
  server controller03 10.20.9.45:5672 check inter 10s rise 2 fall 5

# glance_api服务
 listen glance_api_cluster
  bind 10.20.9.47:9292
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server controller01 10.20.9.189:9292 check inter 2000 rise 2 fall 5
  server controller02 10.20.9.190:9292 check inter 2000 rise 2 fall 5
  server controller03 10.20.9.45:9292 check inter 2000 rise 2 fall 5

# glance_registry服务
 listen glance_registry_cluster
  bind 10.20.9.47:9191
  balance  source
  option  tcpka
  option  tcplog
  server controller01 10.20.9.189:9191 check inter 2000 rise 2 fall 5
  server controller02 10.20.9.190:9191 check inter 2000 rise 2 fall 5
  server controller03 10.20.9.45:9191 check inter 2000 rise 2 fall 5

# keystone_admin_internal_api服务
 listen keystone_admin_cluster
  bind 10.20.9.47:35357
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server controller01 10.20.9.189:35357 check inter 2000 rise 2 fall 5
  server controller02 10.20.9.190:35357 check inter 2000 rise 2 fall 5
  server controller03 10.20.9.45:35357 check inter 2000 rise 2 fall 5

# keystone_public _api服务
 listen keystone_public_cluster
  bind 10.20.9.47:5000
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server controller01 10.20.9.189:5000 check inter 2000 rise 2 fall 5
  server controller02 10.20.9.190:5000 check inter 2000 rise 2 fall 5
  server controller03 10.20.9.45:5000 check inter 2000 rise 2 fall 5

# 兼容aws ec2-api
 listen nova_ec2_api_cluster
  bind 10.20.9.47:8773
  balance  source
  option  tcpka
  option  tcplog
  server controller01 10.20.9.189:8773 check inter 2000 rise 2 fall 5
  server controller02 10.20.9.190:8773 check inter 2000 rise 2 fall 5
  server controller03 10.20.9.45:8773 check inter 2000 rise 2 fall 5

 listen nova_compute_api_cluster
  bind 10.20.9.47:8774
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server controller01 10.20.9.189:8774 check inter 2000 rise 2 fall 5
  server controller02 10.20.9.190:8774 check inter 2000 rise 2 fall 5
  server controller03 10.20.9.45:8774 check inter 2000 rise 2 fall 5

 listen nova_placement_cluster
  bind 10.20.9.47:8778
  balance  source
  option  tcpka
  option  tcplog
  server controller01 10.20.9.189:8778 check inter 2000 rise 2 fall 5
  server controller02 10.20.9.190:8778 check inter 2000 rise 2 fall 5
  server controller03 10.20.9.45:8778 check inter 2000 rise 2 fall 5

 listen nova_metadata_api_cluster
  bind 10.20.9.47:8775
  balance  source
  option  tcpka
  option  tcplog
  server controller01 10.20.9.189:8775 check inter 2000 rise 2 fall 5
  server controller02 10.20.9.190:8775 check inter 2000 rise 2 fall 5
  server controller03 10.20.9.45:8775 check inter 2000 rise 2 fall 5

 listen nova_vncproxy_cluster
  bind 10.20.9.47:6080
  balance  source
  option  tcpka
  option  tcplog
  server controller01 10.20.9.189:6080 check inter 2000 rise 2 fall 5
  server controller02 10.20.9.190:6080 check inter 2000 rise 2 fall 5
  server controller03 10.20.9.45:6080 check inter 2000 rise 2 fall 5

 listen neutron_api_cluster
  bind 10.20.9.47:9696
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server controller01 10.20.9.189:9696 check inter 2000 rise 2 fall 5
  server controller02 10.20.9.190:9696 check inter 2000 rise 2 fall 5
  server controller03 10.20.9.45:9696 check inter 2000 rise 2 fall 5

 listen cinder_api_cluster
  bind 10.20.9.47:8776
  balance  source
  option  tcpka
  option  httpchk
  option  tcplog
  server controller01 10.20.9.189:8776 check inter 2000 rise 2 fall 5
  server controller02 10.20.9.190:8776 check inter 2000 rise 2 fall 5
  server controller03 10.20.9.45:8776 check inter 2000 rise 2 fall 5
**  3、**配置内核参数
复制代码
  全部控制节点修改内核参数,以controller01节点为例;
  net.ipv4.ip_nonlocal_bind:是否允许no-local ip绑定,关系到haproxy实例与vip能否绑定并切换;
  net.ipv4.ip_forward:是否允许转发
复制代码
echo "net.ipv4.ip_nonlocal_bind = 1" >>/etc/sysctl.conf
echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
sysctl -p
**  4、**启动
复制代码
  开机启动是否设置可自行选择,利用pacemaker设置haproxy相关资源后,pacemaker可控制各节点haproxy服务是否启动
复制代码
systemctl enable haproxy
systemctl restart haproxy
systemctl status haproxy

访问:http://10.20.9.47:1080/

账号:admin 密码:admin

5、设置pcs资源
1、任意控制节点操作即可,以controller01节点为例;添加资源lb-haproxy-clone
复制代码
[root@controller01 ~]# pcs resource create lb-haproxy systemd:haproxy --clone 
[root@controller01 ~]# pcs resource
 vip    (ocf::heartbeat:IPaddr2):    Started controller01
 Clone Set: lb-haproxy-clone [lb-haproxy]
     Started: [ controller01 controller02 controller03 ]
2、设置资源启动顺序,先vip再lb-haproxy-clone

通过"cibadmin --query --scope constraints"可查看资源约束配置

复制代码
# pcs constraint order start vip then lb-haproxy-clone kind=Optional
Adding vip lb-haproxy-clone (kind: Optional) (Options: first-action=start then-action=start)
3、官方建议设置vip运行在haproxy active的节点

通过绑定lb-haproxy-clone与vip服务,将两种资源约束在1个节点;约束后,从资源角度看,其余暂时没有获得vip的节点的haproxy会被pcs关闭

复制代码
[root@controller01 ~]# pcs constraint colocation add lb-haproxy-clone with vip
[root@controller01 ~]# pcs resource
 vip    (ocf::heartbeat:IPaddr2):    Started controller01
 Clone Set: lb-haproxy-clone [lb-haproxy]
     Started: [ controller01 ]
     Stopped: [ controller02 controller03 ]

4、通过high availability management查看资源相关的设置,如下:

https://10.20.9.189:2224/managec/openstack-cluster-01/main#/resources/lb-haproxy

相关推荐
哈里谢顿1 天前
OpenStack 中的 nova-conductor 与 ironic-conductor 及其分布式锁机制详解
openstack
哈里谢顿5 天前
OpenStack oslo-config 详解
openstack
感哥11 天前
OpenStack Cinder 创建卷
openstack
感哥11 天前
OpenStack Cinder 架构
openstack
感哥11 天前
OpenStack Nova Scheduler 计算节点选择机制
openstack
感哥14 天前
OpenStack Nova 创建虚拟机
openstack
感哥14 天前
OpenStack Glance(镜像)
openstack
感哥14 天前
OpenStack Keystone详解
openstack
安全菜鸟23 天前
传统方式部署OpenStack具体教程
openstack
forestqq1 个月前
华为L420国产笔记本(统信UOS桌面专业版1070)安装openEuler2403虚拟机
运维·虚拟化·统信