关于Openstack-Queens集群模式的若干知识补充

Openstack控制节点的集群模式与单机模式的部署方法,大体上差不多,无非是多两台服务器,参照本文中的补充,再按照双节点模式来部署集群模式,一定能成功。

注意事项

  1. MariaDB中Openstack各个用户的密码不能包含“@”、“_”等特殊符号,非集群也是如此。
  2. 建议通过PCS为每个组件创建一个VIP,优点是更利于负载均衡和横向扩展。
  3. 建议Openstacck所有功能调试成功后再创建PCS资源,以免调试过程中出现各种无法意料的问题。
  4. 所有组件必须绑定本机IP,然后haproxy才能绑定该组件集群的VIP,并监控到每个节点上的资源。
  5. 涉及到的IP地址包括本机IP、VIP、外网网络IP、存储网络IP等,千万别写错了。
  6. 强烈建议安装etcd,其功能类似于zookeeper,主要用于发现服务、协同工作等。

系统环境配置

调整系统内核参数:允许绑定非本机IP、允许IP转发等功能。

vi /etc/sysctl.conf

net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
fs.file-max=655350
net.ipv4.ip_local_port_range = 1025 65000
net.ipv4.tcp_tw_recycle = 1

调整系统最大文件句柄数

vi /etc/security/limits.conf

* soft nofile 65536
* hard nofile 65536

各组件特殊配置

Rabbitmq-server如何绑定本机IP?

vi /etc/rabbitmq/rabbitmq-env.conf

NODE_IP_ADDRESS=10.10.100.150
ulimit -S -n 4096

Httpd如何绑定本机IP?

vi /etc/httpd/conf/httpd.conf

Listen 10.10.100.150:80
#Listen [2001:db8::a00:20ff:fea7:ccea]:80
#Listen 80

Keystone如何同步fernet-keys?

在keystone节点生成fetnet-keys后,需要同步至其他节点,使各节点的fernet-keys保持一致。

for i in 2 3; do scp -r /etc/keystone/fernet-keys/ /etc/keystone/credential-keys/ \

root@controller$i:/etc/keystone/;done

chown -R keystone:keystone /etc/keystone/credential-keys/

集群应用及配置

集群资源管理软件包括PCS和ETCD。

PCS创建VIP

与主机解析一样,也可以为这些VIP绑定域名解析(步骤略)。

pcs resource create mariadbvip ocf:heartbeat:IPaddr2 \

ip=10.10.100.99 cidr_netmask=24 nic=ens33 op monitor interval=30s

pcs resource create rabbitmqvip ocf:heartbeat:IPaddr2 \

ip=10.10.100.98 cidr_netmask=24 nic=ens33 op monitor interval=30s

pcs resource create httpdvip ocf:heartbeat:IPaddr2 \

ip=10.10.100.97 cidr_netmask=24 nic=ens33 op monitor interval=30s

pcs resource create glancevip ocf:heartbeat:IPaddr2 \

ip=10.10.100.96 cidr_netmask=24 nic=ens33 op monitor interval=30s

pcs resource create neutronvip ocf:heartbeat:IPaddr2 \

ip=10.10.100.95 cidr_netmask=24 nic=ens33 op monitor interval=30s

pcs resource create novavip ocf:heartbeat:IPaddr2 \

ip=10.10.100.94 cidr_netmask=24 nic=ens33 op monitor interval=30s

pcs resource create cindervip ocf:heartbeat:IPaddr2 \

ip=10.10.100.93 cidr_netmask=24 nic=ens33 op monitor interval=30s

PCS创建资源

pcs resource create haproxy systemd:httpd --clone interleave=true

pcs resource create keystone systemd:httpd --clone interleave=true

pcs resource create glance-api systemd:openstack-glance-api --clone interleave=true

pcs resource create glance-registry systemd:openstack-glance-registry --clone interleave=true

pcs resource create neutron-server systemd:neutron-server --clone interleave=true

pcs resource create neutron-linuxbridge systemd:neutron-linuxbridge-agent --clone interleave=true

pcs resource create neutron-l3 systemd:neutron-l3-agent --clone interleave=true

pcs resource create neutron-dhcp systemd:neutron-dhcp-agent --clone interleave=true

pcs resource create neutron-metadata systemd:neutron-metadata-agent --clone interleave=true

pcs resource create nova-api systemd:openstack-nova-api --clone interleave=true

pcs resource create nova-consoleauth systemd:openstack-nova-consoleauth --clone interleave=true

pcs resource create nova-scheduler systemd:openstack-nova-scheduler --clone interleave=true

pcs resource create nova-conductor systemd:openstack-nova-conductor --clone interleave=true

pcs resource create nova-novncproxy systemd:openstack-nova-novncproxy --clone interleave=true

pcs resource create cinder-api systemd:openstack-cinder-api --clone interleave=true

pcs resource create cinder-scheduler systemd:openstack-cinder-scheduler --clone interleave=true

也可以通过crm管理集群资源,不过需要安装软件包“crmsh”,创建资源方法如下:

#将rabbitmq加入集群监控

crm configure primitive rabbitmq-server systemd:rabbitmq-server \

params environment_file="/etc/profile.d/rabbitmq-server.sh" \

op start interval=0s timeout=600 \

op stop interval=0s timeout=120 \

op monitor interval=10 timeout=20 \

meta priority=100

crm configure clone rabbitmq-server-clone rabbitmq-server meta target-role=Started

 

#cat /etc/profile.d/rabbitmq-server.sh

#export RABBITMQ_USE_LONGNAME=true

 

#将haproxy加入集群监控中

crm configure primitive haproxy systemd:haproxy \

op start interval=0s \

op start interval=0s timeout=20s \

op stop interval=0s timeout=20s \

op monitor interval=20s timeout=30s \

meta priority=100 target-role=Started

colocation haproxy-with-vip inf: vip:Started haproxy:Started

 

#将memcached加入集群监控中

crm configure primitive memcached systemd:memcached params \

op monitor interval=30s timeout=30s

crm configure clone openstack-dashboard-clone httpd meta

crm configure clone openstack-memcached-clone memcached

 

#将openstack-glance-registry加入集群监控中

crm configure primitive openstack-glance-registry systemd:openstack-glance-registry \

op start interval=0s timeout=45s \

op stop interval=0s timeout=45s \

op monitor interval=30s timeout=30s

PCS定义服务启动顺序

#定义 neutron

pcs constraint order order_neutron-metadata-agent_neutron-dhcp-agent \
neutron-metadata-agent-clone:start neutron-dhcp-agent-clone:start \
symmetrical=true

 

#定义 memcached + dashboard

pcs constraint order order_memcached_httpd openstack-memcached-clone:start\
openstack-dashboard-clone:start \
symmetrical=true

 

#定义 vip + haproxy + neutron-server

pcs constraint order order_vip_haproxy vip:start haproxy:start \
pcs constraint order order_vip_neutron-server vip:start \
openstack-neutron-server-clone:start

 

#定义 neutron-openvswitch + neutron-metadata

pcs constraint order order_neutron-openvswitch-agent_neutron-metadata-agent \
neutron-openvswitch-agent-clone:start neutron-metadata-agent-clone:start \
symmetrical=true

 

#定义 memcached + nova-consoleauth

pcs constraint order order_memcached_nova-consoleauth \
openstack-memcached-clone:start openstack-nova-consoleauth-clone:start\
symmetrical=true

 

#定义 neutron-metadata + neutron-l3

pcs constraint order order_neutron-metadata-agent_neutron-l3-agent \
neutron-metadata-agent-clone:start neutron-l3-agent-clone:start \
symmetrical=true

ETCD配置

注意:配置中的IP地址不能用主机名代替,各节点需要绑定本机IP。

#[member]
ETCD_NAME="controller1"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://10.10.100.150:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.10.100.150:2379,http://10.10.100.150:4001"

#[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.10.100.150:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.10.100.150:2379,http://10.10.100.150:4001"
ETCD_INITIAL_CLUSTER="controller1=http://10.10.100.150:2380,controller2=http://10.10.100.149:2380,controller3=http://10.10.100.148:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

RabbitMQ集群配置

不建议用Haproxy负载RabbitMQ,而是采用Openstack自带的RabbitMQ集群管理模式。

通过Haproxy负载RabbitMQ时,nova-api会报如下错误:

Unexpected error during heartbeart thread processing, retrying...: IOError: Socket closed

虽然暂不清楚有什么影响(系统和虚拟机均正常运行),但既然有错误,就必须解决。

vi /etc/nova/nova.conf

#transport_url=rabbit://openstack:Openstack123@10.10.100.98:5672
transport_url=rabbit://openstack:Openstack123@controller1:5672,controller2:5672,controller3:5672

或者调整Haproxy中的RabbitMQ配置,只保留一个master,其他的设为backup,设置方法请看后文。

MariaDB集群监控

创建数据库用户

mysql -uroot -pMariadb123

GRANT PROCESS ON *.* TO 'clusterchecker'@'localhost' IDENTIFIED BY 'Clusterchecker123';

flush privileges;

创建监控服务

#yum -y install xinetd

vi /etc/xinetd.d/mariadbchk

点击此处下载MariaDB集群监控脚本,保存至 xinetd/mariadbchk 配置中所说的位置,请根据实际情况修改其中的数据库用户信息,且赋予执行权限。

service mariadbchk
{
  disable = no
  flags = REUSE
  socket_type = stream
  port = 9200
  wait = no
  user = nobody
  server = /opt/scripts/mariadbchk
  log_on_failure += USERID
  only_from = 0.0.0.0/0
  per_source = UNLIMITED
}

添加系统服务

echo "mariadbchk      9200/tcp                # mariadbchk" >> /etc/services

启动xinetd

systemctl enable xinetd && systemctl start xinetd

其他优化补充说明

哪些组件一般不通过haproxy做负载?

Memcached一般使用Openstack自带的集群管理方案,而不是加入haproxy。

memcached_servers = controller01:11211,controller2:11211,controller3:11211

RabbitMQ用haproxy负载还是用openstack自带的集群管理方案?

Openstack官方建议使用其自带的集群管理方案,但本人一直通过haproxy进行负载,暂未发现问题。

transport_url=rabbit://openstack:Openstack123@10.10.100.98:5672
#transport_url=rabbit://openstack:Openstack123@controller1:5672,controller2:5672,controller3:5672

1 2
赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

感谢您的支持与帮助

支付宝扫一扫打赏

微信扫一扫打赏