부록 B. Ansible 플레이북을 통해 자동화된 수동 작업
이 문서에서 제공하는 Ansible 기반 솔루션은 지원되는 방식으로 인스턴스 HA를 구성하기 위한 수동 절차를 자동화하도록 설계되었습니다. 참조를 위해 이 부록은 솔루션에 의해 자동화된 단계를 제공합니다.
1. 컴퓨팅 노드에서 libvirtd 및 모든 OpenStack 서비스를 비활성화하여 시작합니다.
heat-admin@compute-n # sudo openstack-service stop heat-admin@compute-n # sudo openstack-service disable heat-admin@compute-n # sudo systemctl stop libvirtd heat-admin@compute-n # sudo systemctl disable libvirtd
heat-admin@compute-n # sudo openstack-service stop
heat-admin@compute-n # sudo openstack-service disable
heat-admin@compute-n # sudo systemctl stop libvirtd
heat-admin@compute-n # sudo systemctl disable libvirtd
2. pacemaker-remote 와 함께 사용할 인증 키를 만듭니다.
컴퓨팅 노드 중 하나에서 이 단계를 수행합니다.
heat-admin@compute-1 # sudo mkdir -p /etc/pacemaker/ heat-admin@compute-1 # sudo dd if=/dev/urandom of=/etc/pacemaker/authkey bs=4096 count=1 heat-admin@compute-1 # sudo cp /etc/pacemaker/authkey ./ heat-admin@compute-1 # sudo chown heat-admin:heat-admin authkey
heat-admin@compute-1 # sudo mkdir -p /etc/pacemaker/
heat-admin@compute-1 # sudo dd if=/dev/urandom of=/etc/pacemaker/authkey bs=4096 count=1
heat-admin@compute-1 # sudo cp /etc/pacemaker/authkey ./
heat-admin@compute-1 # sudo chown heat-admin:heat-admin authkey
3. 이 키를 director 노드에 복사한 다음 나머지 컴퓨팅 및 컨트롤러 노드에 복사합니다.
stack@director # scp authkey heat-admin@node-n:~/ heat-admin@node-n # sudo mkdir -p --mode=0750 /etc/pacemaker heat-admin@node-n # sudo chgrp haclient /etc/pacemaker heat-admin@node-n # sudo chown root:haclient /etc/pacemaker/authkey
stack@director # scp authkey heat-admin@node-n:~/
heat-admin@node-n # sudo mkdir -p --mode=0750 /etc/pacemaker
heat-admin@node-n # sudo chgrp haclient /etc/pacemaker
heat-admin@node-n # sudo chown root:haclient /etc/pacemaker/authkey
4. 모든 컴퓨팅 노드에서 pacemaker-remote 를 활성화합니다.
heat-admin@compute-n # sudo systemctl enable pacemaker_remote heat-admin@compute-n # sudo systemctl start pacemaker_remote
heat-admin@compute-n # sudo systemctl enable pacemaker_remote
heat-admin@compute-n # sudo systemctl start pacemaker_remote
5. pacemaker(1.1.12-22.el7_1.4.x86_64) 및 resource-agents(3.9.5-40.el7_1.5.x86_64) 패키지의 필수 버전이 컨트롤러 및 컴퓨팅 노드에 설치되어 있는지 확인합니다.
heat-admin@controller-n # sudo rpm -qa | egrep \'(pacemaker|resource-agents)'
heat-admin@controller-n # sudo rpm -qa | egrep \'(pacemaker|resource-agents)'
6. BZ#1257414 에 필요한 다음 제약 조건 해결 방법을 적용합니다.
이 문제는 RHSA-2015:1862 에서 해결되었으며 환경에 필요하지 않을 수 있습니다.
7. overcloudrc 파일을 사용하여 NovaEvacuate 활성/패시브 리소스를 생성하여 auth_url,username,tenant 및 password 값을 제공합니다.
stack@director # scp overcloudrc heat-admin@controller-1:~/ heat-admin@controller-1 # . ~/overcloudrc heat-admin@controller-1 # sudo pcs resource create nova-evacuate ocf:openstack:NovaEvacuate auth_url=$OS_AUTH_URL username=$OS_USERNAME password=$OS_PASSWORD tenant_name=$OS_TENANT_NAME \
stack@director # scp overcloudrc heat-admin@controller-1:~/
heat-admin@controller-1 # . ~/overcloudrc
heat-admin@controller-1 # sudo pcs resource create nova-evacuate ocf:openstack:NovaEvacuate auth_url=$OS_AUTH_URL username=$OS_USERNAME password=$OS_PASSWORD tenant_name=$OS_TENANT_NAME \
- 1
- 공유 스토리지를 사용하지 않는 경우 no_shared_storage=1 옵션을 포함합니다. 자세한 내용은 2.1절. “공유 스토리지의 예외”를 참조하십시오.
8. 유동 IP 리소스 및 Image 서비스(glance), OpenStack Networking(neutron), Compute(nova) 서비스 후에 nova-evacuate 가 시작되었는지 확인합니다.
heat-admin@controller-1 # for i in $(sudo pcs status | grep IP | awk \'{ print $1 }\'); do sudo pcs constraint order start $i then nova-evacuate ; done
heat-admin@controller-1 # for i in openstack-glance-api-clone neutron-metadata-agent-clone openstack-nova-conductor-clone; do sudo pcs constraint order start $i then nova-evacuate require-all=false ; done
heat-admin@controller-1 # for i in $(sudo pcs status | grep IP | awk \'{ print $1 }\'); do sudo pcs constraint order start $i then nova-evacuate ; done
heat-admin@controller-1 # for i in openstack-glance-api-clone neutron-metadata-agent-clone openstack-nova-conductor-clone; do sudo pcs constraint order start $i then nova-evacuate require-all=false ; done
9. 컨트롤 플레인에서 모든 OpenStack 리소스를 비활성화합니다.
heat-admin@controller-1 # sudo pcs resource disable openstack-keystone --wait=540
heat-admin@controller-1 # sudo pcs resource disable openstack-keystone --wait=540
여기에 사용된 시간 초과(--wait=540)는 예로만 사용됩니다. ID 서비스 중지에 필요한 시간 및 하드웨어의 전원에 따라 시간 초과 기간을 늘리는 것이 좋습니다.
10. cibadmin 데이터를 사용하여 현재 컨트롤러 목록을 생성합니다.
heat-admin@controller-1 # controllers=$(sudo cibadmin -Q -o nodes | grep uname | sed s/.*uname..// | awk -F\" \'{print $1}')
heat-admin@controller-1 # echo $controllers
heat-admin@controller-1 # controllers=$(sudo cibadmin -Q -o nodes | grep uname | sed s/.*uname..// | awk -F\" \'{print $1}')
heat-admin@controller-1 # echo $controllers
11. 이 목록을 사용하여 이러한 노드를 osprole=controller 속성이 있는 컨트롤러로 태그합니다.
heat-admin@controller-1 # for controller in ${controllers}; do sudo pcs property set --node ${controller} osprole=controller ; done
heat-admin@controller-1 # for controller in ${controllers}; do sudo pcs property set --node ${controller} osprole=controller ; done
12. 환경에 이미 존재하는 stonith 장치 목록을 빌드합니다.
heat-admin@controller-1 # stonithdevs=$(sudo pcs stonith | awk \'{print $1}')
heat-admin@controller-1 # echo $stonithdevs
heat-admin@controller-1 # stonithdevs=$(sudo pcs stonith | awk \'{print $1}')
heat-admin@controller-1 # echo $stonithdevs
13. 컨트롤 플레인 서비스에 태그를 지정하여 위에서 확인한 컨트롤러에서만 실행되도록 하여 나열된 stonith 장치를 건너뜁니다.
14. neutron-openvswitch-agent:부터 pacemaker 에서 컴퓨팅 노드 리소스를 채우십시오.
heat-admin@controller-1 # sudo pcs resource create neutron-openvswitch-agent-compute systemd:neutron-openvswitch-agent op start timeout 200s stop timeout 200s --clone interleave=true --disabled --force heat-admin@controller-1 # sudo pcs constraint location neutron-openvswitch-agent-compute-clone rule resource-discovery=exclusive score=0 osprole eq compute heat-admin@controller-1 # sudo pcs constraint order start neutron-server-clone then neutron-openvswitch-agent-compute-clone require-all=false
heat-admin@controller-1 # sudo pcs resource create neutron-openvswitch-agent-compute systemd:neutron-openvswitch-agent op start timeout 200s stop timeout 200s --clone interleave=true --disabled --force
heat-admin@controller-1 # sudo pcs constraint location neutron-openvswitch-agent-compute-clone rule resource-discovery=exclusive score=0 osprole eq compute
heat-admin@controller-1 # sudo pcs constraint order start neutron-server-clone then neutron-openvswitch-agent-compute-clone require-all=false
그런 다음 compute libvirtd 리소스입니다.
heat-admin@controller-1 # sudo pcs resource create libvirtd-compute systemd:libvirtd op start timeout 200s stop timeout 200s --clone interleave=true --disabled --force heat-admin@controller-1 # sudo pcs constraint location libvirtd-compute-clone rule resource-discovery=exclusive score=0 osprole eq compute heat-admin@controller-1 # sudo pcs constraint order start neutron-openvswitch-agent-compute-clone then libvirtd-compute-clone heat-admin@controller-1 # sudo pcs constraint colocation add libvirtd-compute-clone with neutron-openvswitch-agent-compute-clone
heat-admin@controller-1 # sudo pcs resource create libvirtd-compute systemd:libvirtd op start timeout 200s stop timeout 200s --clone interleave=true --disabled --force
heat-admin@controller-1 # sudo pcs constraint location libvirtd-compute-clone rule resource-discovery=exclusive score=0 osprole eq compute
heat-admin@controller-1 # sudo pcs constraint order start neutron-openvswitch-agent-compute-clone then libvirtd-compute-clone
heat-admin@controller-1 # sudo pcs constraint colocation add libvirtd-compute-clone with neutron-openvswitch-agent-compute-clone
그런 다음 openstack-ceilometer-compute 리소스:
heat-admin@controller-1 # sudo pcs resource create ceilometer-compute systemd:openstack-ceilometer-compute op start timeout 200s stop timeout 200s --clone interleave=true --disabled --force heat-admin@controller-1 # sudo pcs constraint location ceilometer-compute-clone rule resource-discovery=exclusive score=0 osprole eq compute heat-admin@controller-1 # sudo pcs constraint order start openstack-ceilometer-notification-clone then ceilometer-compute-clone require-all=false heat-admin@controller-1 # sudo pcs constraint order start libvirtd-compute-clone then ceilometer-compute-clone heat-admin@controller-1 # sudo pcs constraint colocation add ceilometer-compute-clone with libvirtd-compute-clone
heat-admin@controller-1 # sudo pcs resource create ceilometer-compute systemd:openstack-ceilometer-compute op start timeout 200s stop timeout 200s --clone interleave=true --disabled --force
heat-admin@controller-1 # sudo pcs constraint location ceilometer-compute-clone rule resource-discovery=exclusive score=0 osprole eq compute
heat-admin@controller-1 # sudo pcs constraint order start openstack-ceilometer-notification-clone then ceilometer-compute-clone require-all=false
heat-admin@controller-1 # sudo pcs constraint order start libvirtd-compute-clone then ceilometer-compute-clone
heat-admin@controller-1 # sudo pcs constraint colocation add ceilometer-compute-clone with libvirtd-compute-clone
다음은 nova-compute 리소스입니다.
15. 컴퓨팅 노드에 stonith 장치를 추가합니다. 각 컴퓨팅 노드에 대해 다음 명령을 실행합니다.
heat-admin@controller-1 # sudo pcs stonith create ipmilan-overcloud-compute-N fence_ipmilan pcmk_host_list=overcloud-compute-0 ipaddr=10.35.160.78 login=IPMILANUSER passwd=IPMILANPW lanplus=1 cipher=1 op monitor interval=60s;
heat-admin@controller-1 # sudo pcs stonith create ipmilan-overcloud-compute-N fence_ipmilan pcmk_host_list=overcloud-compute-0 ipaddr=10.35.160.78 login=IPMILANUSER passwd=IPMILANPW lanplus=1 cipher=1 op monitor interval=60s;
다음과 같습니다.
-
N 은 각 컴퓨팅 노드의 식별 수입니다(예:
ipmilan-overcloud-compute-1,ipmilan-overcloud-compute-2등). - IPMILANUSER 및 IPMILANPW 는 IPMI 장치의 사용자 이름 및 암호입니다.
16. 별도의 fence-nova stonith 장치를 생성합니다.
17. 펜싱 후 컴퓨팅 노드를 복구할 수 있는지 확인합니다.
heat-admin@controller-1 # sudo pcs property set cluster-recheck-interval=1min
heat-admin@controller-1 # sudo pcs property set cluster-recheck-interval=1min
18. 컴퓨팅 노드 리소스를 생성하고 노드의 물리적 펜스 장치와 fence-nova 를 모두 포함하도록 stonith 수준 1 을 설정합니다. 각 컴퓨팅 노드에 대해 다음 명령을 실행합니다.
heat-admin@controller-1 # sudo pcs resource create overcloud-compute-N ocf:pacemaker:remote reconnect_interval=60 op monitor interval=20 heat-admin@controller-1 # sudo pcs property set --node overcloud-compute-N osprole=compute heat-admin@controller-1 # sudo pcs stonith level add 1 overcloud-compute-N ipmilan-overcloud-compute-N,fence-nova heat-admin@controller-1 # sudo pcs stonith
heat-admin@controller-1 # sudo pcs resource create overcloud-compute-N ocf:pacemaker:remote reconnect_interval=60 op monitor interval=20
heat-admin@controller-1 # sudo pcs property set --node overcloud-compute-N osprole=compute
heat-admin@controller-1 # sudo pcs stonith level add 1 overcloud-compute-N ipmilan-overcloud-compute-N,fence-nova
heat-admin@controller-1 # sudo pcs stonith
N 을 각 compute 노드의 식별 번호로 바꿉니다(예: overcloud-compute-1,overcloud-compute-2 등). 이러한 식별 번호를 사용하여 각 컴퓨팅 노드와 이전에 생성된 stonith 장치(예: overcloud-compute-1 및 ipmilan-overcloud-compute-1)와 일치시킵니다.
19. 컨트롤 및 컴퓨팅 플레인 서비스를 활성화합니다.
20. 실패한 리소스를 정리하기 전에 환경이 안정될 때까지 잠시 기다립니다.
heat-admin@controller-1 # sleep 60 heat-admin@controller-1 # sudo pcs resource cleanup heat-admin@controller-1 # sudo pcs status heat-admin@controller-1 # sudo pcs property set stonith-enabled=true
heat-admin@controller-1 # sleep 60
heat-admin@controller-1 # sudo pcs resource cleanup
heat-admin@controller-1 # sudo pcs status
heat-admin@controller-1 # sudo pcs property set stonith-enabled=true