> create repository
[high-availability]
name = High Availability
baseurl==file:///home/rhel8/
enabled=1
gpgkey=0
> 환경정보 RHEL8.4
node1.example.com
192.168.122.201
192.168.50.201
node2.example.com
192.168.122.202
192.168.50.202
- 방화벽 중지
[root@node01 ~]# systemctl stop firewalld.service
[root@node02 ~]# systemctl stop firewalld.service
- /etc/hosts 설정 (both)
[root@node01 ~]# vi /etc/hosts
192.168.122.201 node1
192.168.122.202 node2
192.168.50.201 nodehb1
192.168.50.202 nodehb2
[root@node02 ~]# vi /etc/hosts
192.168.122.201 node1
192.168.122.202 node2
192.168.50.201 nodehb1
192.168.50.202 nodehb2
-------subscription 등록---------------Optional--------------------------------------------------------------------------
# subscription-manager register --auto-attach
# subscription-manager repos --disable=*
# subscription-manager repos --enable=rhel-8-for-x86_64-highavailability-rpms
# subscription-manager repos --enable=rhel-8-for-x86_64-baseos-rpms
# subscription-manager repos --enable=rhel-8-for-x86_64-appstream-rpms
------------------------------------------------------------------------------------------------
*참고 https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/8/html/deploying_red_hat_enterprise_linux_8_on_public_cloud_platforms/azure-install-red-hat-ha-packages-and-agents_configuring-rhel-high-availability-on-azure
1. pacemaker install(both)
# yum install pcs pacemaker fence-agents-all
2. pcs start : (both)
# systemctl start pcsd
# systemctl enable pcsd
----------------optional----------------------------------------------------------------------------------------------
firewalld 데몬을 실행하는 경우 Red Hat High Availability Add-On에 필요한 포트를 활성화합니다.
# firewall-cmd --permanent --add-service=high-availability
(# firewall-cmd --add-service=high-availability)
# firewall-cmd --reload
---------------------------------------------------------------------------------------------------
3. hacluster 패스워드 변경(both)
# echo redhat | passwd --stdin hacluster
4. Cluster node 설정 및 Corosync 구동
[root@node01 ~]#pcs host auth nodehb1 nodehb2 -u hacluster -p redhat
5. cluster 생성 및 시작
[root@node01 ~]# pcs cluster setup --start my_cluster nodehb1 nodehb2 totem token=10000 join=100
_ _ _ _ _ _ _ _ _ __ _ _ _ __ __ _ _
Or
(pcs cluster config update transport knet_pmtud_interval=35 totem token=10000 join=100)
[root@node01 ~]# pcs cluster start --all
- 노드가 부팅될 때 클러스터의 각 노드에서 클러스터 서비스를 실행하도록 클러스터 서비스를 활
성화합니다
# pcs cluster enable --all
6. Cluster 기본 설정
> 리소스 등록 시 fence device 작동 방지
# pcs property set stonith-enabled=false
# pcs property set stonith-enabled=true
- 장애 처리 후 리소스 이동 방지 설정
# pcs resource defaults update resource-stickiness=1000
- Quorum 설정
# pcs property set no-quorum-policy=stop
쿼럼 사용시에는 suicide
# pcs property set no-quorum-policy=suicide
----------------------------------------------
・ignore : 무시(모든 노드가 쿼럼을 가지고있는 것으로서 리소스관리를 하기해, 분단된 모든 노드에서 서비스를 가동한다.)
・freeze : 아무것도 하지않음
・stop : 클러스터의 분단에 영향을 받는 모든 리소스를 정지
・suicide : 클러스터의 분단에 영향을 받는 모든 노드를 펜싱
------------------------------------------------
- 리소스를 생성할 때 해당 리소스에 대한 migration-threshold 옵션을 설정하여 정의된 실패 횟수 후에
새 노드로 이동하도록 리소스를 구성할 수 있습니다
# pcs resource defaults update migration-threshold=1
- 클러스터를 유지 관리 모드로 전환하려면 다음 명령을 사용하여 maintenance-mode 클러스터 속성을
true 로 설정합니다
# pcs property set maintenance-mode=true
( 위 명령어를 하면 모두 unmanaged로 변하게 됨. 서비스 시작이안됌...그럼
# pcs property unset maintenance-mode 명령어로 해소)
- 셋팅 확인
# pcs property show
--------LVM 생성시 참고------------------
> lvm.conf 설정
# vim /etc/lvm/lvm.conf
system_id_source = "uname"
# lvm systemid
system ID: z1.example.com
# uname -n
z1.example.com
---------------------------------------------
7. HALVM 생성 또는 HALVM 설정
# pvcreate /dev/sda1
# vgcreate --setautoactivation n vg_cluster /dev/sda1 <<<< RHEL8.5 이상 가능 (lvm2-2.03.12-1.el8 later)
(or # vgcreate my_vg /dev/sdb1 << RHEL8.4 이하 )
*생성 중인 LVM 볼륨에
기존 볼륨 그룹을 사용하는 경우 볼륨 그룹에
# vgchange --setautoactivation n my_vg
명령을 사용하여 이 플래그를 재설정할 수 있습니다.
# vgs -o+systemid
# lvcreate -l 100%FREE -n lv_cluster vg_cluster
# lvs
# mkfs.xfs /dev/vg_cluster/lv_cluster
> 활성화 상태 확인
#lvs -o +autoactivation
8. Resource 등록 및 확인
-리소스 등록 및 확인
# pcs resource
> VIP
# pcs resource create vip ocf:heartbeat:IPaddr2 ip=192.168.122.210 cidr_netmask=24 nic=enp1s0 op monitor interval=30s timeout=45s
# pcs resource create vip IPaddr2 ip=192.168.122.210 cidr_netmask=24 --group svc_httpd
>LVM 등록
# pcs resource create vg_cluster LVM-activate vgname=vg_cluster vg_access_mode=system_id --group svc_httpd
다른예시)
pcs resource create halvm ocf:heartbeat:LVM-activate vgname=vg00 activation_mode=exclusive vg_access_mode=system_id op monitor interval=60 timeout=120 on-fail=fence --group=svc
> Filesystem
# pcs resource create fs-httpd ocf:heartbeat:Filesystem device=/dev/vg_cluster/lv_cluster directory=/httpd fstype=xfs op monitor interval=45 timeout=60 OCF_CHECK_LEVEL=20 --group svc_httpd
> APP 등록
. OCF 형식
# pcs resource create httpd ocf:heartbeat:apache configfile="/etc/httpd/conf/httpd.conf" --group svc_httpd op monitor interval=30s
. LSB 형식
# pcs resource create LSB_APP lsb:chrony op monitor interval=30s --group svc_httpd
------------DB 등록 예시 ------------------------------------------------
- 실행 APP 스크립트 등록시
ex)
# pcs resource create mariadb ocf:heartbeat:mysql binary="/usr/bin/mysqld_safe" socket="/data/mariadb/mysql.sock" config="/etc/my.cnf" datadir="/data/mariadb" op start timeout=60s op stop timeout=60s op monitor interval=20 timeout=30
등록할 Pacemaker 리소스 이름 : mariadb
MariaDB 소켓 위치 : /data/mariadb/mysql.sock
MariaDB 디렉토리 위치 : /data/mariadb
--------------------------------------------------------------------------
> resource 그룹화
# pcs resource group add svc_httpd vip vg_sh fs-httpd
9. Node 우선 순위 제한 설정
# pcs constraint location svc_httpd prefers nodehb1=1000
# pcs constraint location svc_httpd prefers nodehb2=500
------------사용법----------------------------------------------------------------------
# pcs constraint
.score 확인
# pcs constraint show --full
Location Constraints:
Ordering Constraints:
Resource Sets:
set ClusterIP ClusterIP1 ClusterIP2 (id:pcs_rsc_set) (id:pcs_rsc_order)
set ClusterIP1 ClusterIP2 ClusterIP (id:pcs_rsc_set-1) (id:pcs_rsc_order-1)
# pcs constraint remove pcs_rsc_order
# pcs constraint remove pcs_rsc_order-1
----------------------------------------------------------------------------------------
10. Fence Device 설정
10.1) Fence Device 설정(vbmc 설정시)
- Connetc test
fence_ipmilan -A password -P -a 192.168.122.1 -u 7000 -l ipmiadmin -p redhat -o status
# 1번 노드
pcs stonith create ipmi1 fence_ipmilan pcmk_host_list="RHEL84-ex436-node1" ip=192.168.122.1 delay=15 ipport="7000" username=ipmiadmin password=redhat lanplus=on auth=password op monitor interval=1800s
# 2번 노드
pcs stonith create ipmi2 fence_ipmilan pcmk_host_list="RHEL84-ex436-node2" ip=192.168.122.1 ipport="7001" username=ipmiadmin password=redhat lanplus=on auth=password op monitor interval=1800s
10.2) Configure device in stonith-ng (SCSI fence)
> 여러 장치를 지정할 때 쉼표로 구분 ,하십시오
# pcs stonith create scsi fence_scsi pcmk_host_list="node1.example.com node2.example.com" pcmk_reboot_action="off" devices="/dev/mapper/mpathb,/dev/mapper/mpathc" meta provides="unfencing" --force
ex)
pcs stonith create scsi fence_scsi pcmk_host_list="RHEL84-ex436-node1 RHEL84-ex436-node2" pcmk_reboot_action="off" devices="/dev/sdb" meta provides="unfencing" --force
> not used HALVM
# pcs stonith create scsi fence_scsi pcmk_host_list="node1.example.com node2.example.com" pcmk_reboot_action="off" meta provides="unfencing" --force
> Used HALVM
# pcs stonith create scsi fence_scsi pcmk_host_list="RHEL84-ex436-node1 RHEL84-ex436-node2" pcmk_reboot_action="off" devices="/dev/mapper/mpathb,/dev/mapper/mpathc" meta provides="unfencing" --force
>update 로 이미 생성된 목록을 변경할 수도 있습니다.
# pcs stonith update scsi devices="/dev/mapper/mpathb,/dev/mapper/mpathc"
> 확인방법
# sg_persist -n -i -r -d /dev/mapper/mpathb
PR generation=0xa0, Reservation follows:
Key=0xf1070001
scope: LU_SCOPE, type: Write Exclusive, registrants only
# sg_persist -n -i -k -d /dev/mapper/mpathb
PR generation=0xa0, 8 registered reservation keys follow:
0xf1070002
0xf1070002
0xf1070001
0xf1070001
0xf1070001
0xf1070001
0xf1070002
0xf1070002
> scsi 가 정상적으로 작동 안될때
# pcs stonith update scsi pcmk_monitor_action="metadata"
https://access.redhat.com/solutions/1421063
10.3) Power fence
# pcs stonith create ipmi1 fence_ipmilan pcmk_host_list="UKISS_DB1.cs" ipaddr="UKISS_DB1.ipmi" login="admin" passwd="rplinux)(87" lanplus=on auth=password delay=15 power_wait=20 op monitor interval=60s timeout=120s
# pcs stonith create ipmi2 fence_ipmilan pcmk_host_list="UKISS_DB2.cs" ipaddr="UKISS_DB2.ipmi" login="admin" passwd="rplinux)(87" lanplus=on auth=password power_wait=20 op monitor interval=60s timeout=120s
10.4) Kdump 설정
# pcs stonith create fence_kdump fence_kdump pcmk_reboot_action="off" pcmk_host_list="RHEL84-ex436-node1;RHEL84-ex436-node2" timeout="30" pcmk_off_retries=1
# touch /etc/kdump.conf
# systemctl restart kdump
-------Fence 생성시 참고-------------------------------------------------------------
# pcs stonith list [filter]
#pcs stonith describe [stonith_agent]
# pcs stonith fence node_name
# pcs stonith fence RHEL84-ex436-node2
OR
# fence_ipmilan -a ipaddress -l username -p password -o status
ex) # fence_ipmilan -A password -P -a 192.168.12.39 -l USERID -p PASSW0RD -o status
# fence_ipmilan -a ipaddress -l username -p password -o reboot
# fence_ipmilan -a ipaddress -l username -p password -o status -D /tmp/$(hostname)-fence_agent.debug
#fence_ipmilan -A password -P -a 192.168.122.1 -l ipmiadmin -p redhat -o reboot --ipport=7001
ex)
pcs stonith create ipmi1 fence_ipmilan pcmk_host_list="thekoerdb.cs" ipaddr=thekoerdb.ipmi login=thekoerpdb passwd='thekoerpdb!2' lanplus=on auth=password delay=15 power_wait=20 op monitor interval=60s timeout=120s
pcs stonith create ipmi2 fence_ipmilan pcmk_host_list="thekoera1.cs" ipaddr=thekoera1.ipmi login=thekoerpap1 passwd='thekoerpap1@' lanplus=on auth=password power_wait=20 op monitor interval=60s timeout=120s
● Fence device 등록
# pcs stonith create prd_fence fence_ilo5 pcmk_host_list=sjoneprd-hb ipaddr=10.10.10.10 login=admin passwd=password pcmk_reboot_action=reboot pcmk_monitor_timeout=60s
----------------------------------------------------------------------------------------
확인작업
# lsinitrd /boot/initramfs-$(uname -r)kdump.img | egrep "fence|hosts"
11. Fence 우선순위 지정
# pcs stonith level add 1 nodehb1 fence_kdump
# pcs stonith level add 1 nodehb2 fence_kdump
pcs stonith level add 2 nodehb1 ipmi1
pcs stonith level add 2 nodehb2 ipmi2
12. Fence agent Rule 지정
# pcs constraint location ipmi1 avoids nodehb1
# pcs constraint location ipmi2 avoids nodehb2
----- optional --------------------------
# firewall-cmd --add-port=7410/udp
# firewall-cmd --add-port=7410/udp --permanent
-----------------------------------------
> Test 시나리오
1. filesystem umount
2. service stop
. 서비스 케이블 절체
. Heartbeat 케이블 절체
3. vip stop
. ip addr2
# ip addr delete 192.168.0.100 dev bond0
4.
########[명령어]###############
# pcs resource move GROUP_SERVICE node01
. GROUP_SERVICE 를 node1로 서비스 절체
# pcs property
# pcs resource config svc_httpd
- 서비스가 시작되어 다시 실행되면 실패한 리소스의 실패 상태를 삭제할 수 있으며 클러스터 상태
를 볼 때 실패한 작업 알림이 더 이상 표시되지 않습니다.
# pcs resource cleanup svc_httpd
- 서비스가 실행 중인 노드를 대기 모드로 설정합니다. 펜싱을 비활성화했으므로 클러스터가
이러한 상황에서 복구하는 데 펜싱이 필요하므로 노드 수준 오류를 효율적으로 시뮬레이션할
수 없습니다(예: 전원 케이블 가져오기).
# pcs node standby z1.example.com
- 클러스터 서비스를 첫 번째 노드로 복원하려면 노드를 standby 모드에서 전환합니다. 이 경우 해
당 노드로 다시 서비스를 이동할 필요는 없습니다.
# pcs node unstandby z1.example.com
pcs cluster cib filename 명령을 사용하여 지정된 파일에 원시 클러스터 구성을 저장할 수 있습니다. 이전
에 클러스터를 구성하고 활성 CIB가 있는 경우 다음 명령을 사용하여 원시 xml 파일을 저장합니다.
#pcs cluster cib filename
# pcs status
# pcs status resources
# pcs cluster status
# pcs config
# pcs cluster corosync
# pcs resource defaults
>> issue : unmanaged
# pcs property unset maintenance-mode
https://access.redhat.com/solutions/1473623
# pcs property list --all | grep maintenance-mode
# pcs cluster cib | grep maintenance-mode
>>> OCF Resource Agents are found in /usr/lib/ocf/resource.d/$PROVIDER
vbmc add RHEL84-ex436-node1 --port 7000 --username ipmiadmin --password redhat --libvirt-uri=qemu+ssh://root@RHEL84-ex436-node1/system
vbmc add RHEL84-ex436-node2 --port 7002 --username ipmiadmin --password redhat --libvirt-uri=qemu+ssh://root@RHEL84-ex436-node2/system
# vbmc start RHEL84-ex436-node1
# vbmc start RHEL84-ex436-node2
fence_ipmilan -A password -P -a 192.168.122.1 -l ipmiadmin -p redhat -o status --ipport=7000
fence_ipmilan -A password -P -a 192.168.122.1 -l ipmiadmin -p redhat -o status --ipport=7001
fence_ipmilan -A password -P -a 192.168.122.1 -l ipmiadmin -p redhat -o reboot --ipport=7001
> 리소스 순서 바꾸기
# pcs resource group add group-name resource-id [--before resource-id | --after resource-id ]
. https://access.redhat.com/solutions/2883801
no-quorum-policy 설정 변경
no-quorum-policy를 ignore로 설정하면, 클러스터는 쿼럼 없이도 자원을 시작할 수 있습니다
pcs property set no-quorum-policy=ignore 로 쿼럼 없이도 클러스터를 시작하도록 설정합니다.
ex)
# pcs resource group add svc_httpd vip --after vg_cluster
. vg_cluster 이후에 vip 순서로 기동
# pcs resource group add svc_httpd vip --before vg_cluster
. vg_cluster 이전에 vip가 먼저 기동 순서
> 볼륨이 만들어지고 나서 추후에 HA 볼륨으로 인식
vgchange --setautoactivation n <VG이름>
> 확인
vgs -o +autoactivation
>>>>>>>>질문
* Clone Set: bond0-monitor-clone [bond0-monitor]:
* Started: [ UKISS_DB1.cs UKISS_DB2.cs ]
# pcs resource create bond0-monitor ocf:heartbeat:ethmonitor interface=bond0 clone
# pcs constraint location UKISS_SVC rule score=-INFINITY ethmonitor-bond0 ne 1
# pcs resource meta bond0-monitor-clone orderd=true
# pcs stonith create scsi fence_scsi pcmk_host_list="node1.example.com node2.example.com" pcmk_reboot_action="off" devices="/dev/mapper/mpathb,/dev/mapper/mpathc" meta provides="unfencing" --force
# pcs stonith update scsi devices="/dev/mapper/mpathb,/dev/mapper/mpathc"
>> exfat 사용시 필요
# yum install -y exfat-utils fuse fuse-exfat
nodehb1:RHEL84~
pcmk_host_list
https://access.redhat.com/solutions/2619961
============ LSB 예시 ========================
[root@node01 init.d]# cat chrony
#!/bin/bash
case $1 in
start)
echo "################ Start #################"
su - root -c "systemctl start chronyd"
;;
stop)
echo "################ Stop #################"
su - root -c "systemctl stop chronyd"
;;
status)
if [ ` ps -ef | grep chronyd | grep -v grep | wc -l ` -eq 1 ];then
exit 0
else
exit 3
fi
;;
*)
echo "plz check" ;;
esac
==========================================
RHEL8.6 ISCSI 생성
> targetcli 설치
# yum install targetcli
> target 데몬 enable 후 활성화
# systemctl enable --now target
Created symlink from /etc/systemd/system/multiuser.target.wants/target.service to /usr/lib/systemd/system/target.service.
> target 데몬 상태 확인
# systemctl status target
> targetcli 진입
[root@lilo-san ~]# targetcli
> /backstores/block create LUN1 /dev/vdb1
[client]
yum install iscsi-initiator-utils
# systemctl enable --now iscsi iscsid
set attribute authentication=0
iscsiadm -m discovery -t st -p 192.168.122.203
>constraint 제거
# pcs constraint list --full
Warning: This command is deprecated and will be removed. Please use 'pcs constraint config' instead.
Location Constraints:
Resource: svc_httpd
Enabled on:
Node: rhcs01 (score:1000) (id:location-svc_httpd-rhcs01-1000)
Node: rhcs02 (score:500) (id:location-svc_httpd-rhcs02-500)
Node: rhcs02 (score:INFINITY) (role:Started) (id:cli-prefer-svc_httpd)
score 보기
# crm_simulate -Ls
[root@rh8-nd1 ~]# vgs -ao+systemid
VG #PV #LV #SN Attr VSize VFree System ID
rhel 1 2 0 wz--n- <11.00g 0
testvg 2 1 0 wz--n- <1.20g 0 rh8-nd1 <<===---- System ID is now updated to passive node
[root@rh8-nd1 ~]# vgchange -ay testvg
1 logical volume(s) in volume group "testvg" now active
https://access.redhat.com/solutions/3819022
pcs stonith create scsi fence_scsi pcmk_host_list="RHEL84-ex436-node1 RHEL84-ex436-node2" pcmk_reboot_action="off" devices="/dev/disk/by-id/wwn-0x6001405e0c76df330334e2db582c7403" meta provides="unfencing" --force
/var/log/cluster/corosync.log
/var/log/pcsd/pcsd.log
/var/log/pacemaker/pacemaker.log
/var/log/messages
- 만약 시작뿐만 아니라 종료 시에도 동일한 순서가 적용되길 원한다면, **symmetrical=true**로 설정합니다.
pcs constraint order start resource_A then resource_B kind=Mandatory symmetrical=true
- Pacemaker 클러스터에서 **colocation (위치 제약)**은 두 리소스가 같은 노드에 함께 실행되도록 강제하는 규칙입니다. pcs constraint colocation remove 명령어는 기존에 설정된 colocation 제약 조건을 제거할 때 사용됩니다.
pcs constraint colocation remove <source_resource> <target_resource>