一、搭建高可用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
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叢集
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,以下配置以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
#
# 如果需要安裝最新版本,可參考:javascript:void(0)
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