顯示具有 Cloud 標籤的文章。 顯示所有文章
顯示具有 Cloud 標籤的文章。 顯示所有文章

2022年12月23日 星期五

在 RHEL / CentOS 9 上使用 Podman 安裝 Wordpress

學習目標:
  • 在 RHEL / CentOS 9 上使用 Podman 安裝 Wordpress CMS 系統
安裝設定流程:
  1. 安裝 podman 套件:
    # yum install -y podman
    
  2. 啟動 podman 服務:
    # systemctl enable --now podman
    
  3. 設定 8085 port 為 Wordpress 對外服務的 port,所以在建立 pod 時,指定 8085 對內部的 container 80 port:
    # podman pod create --name wordpress-pod -p 8085:80
    # firewall-cmd --add-port=8085/tcp
    # firewall-cmd --runtime-to-permanent
    # podman pod start wordpress-pod
    
  4. 建立並啟動 MariaDB 的 container :
    # podman run -d \
    --pod wordpress-pod \
    -e MYSQL_ROOT_PASSWORD="mysql" \
    -e MYSQL_DATABASE="wordpress" \
    -e MYSQL_USER="wordpress" \
    -e MYSQL_PASSWORD="mypassword2W3E" \
    --name=wordpress-database mariadb
    
  5. 建立並啟動 Wordpress 的 container :
    # podman run -d \
    --pod wordpress-pod \
    -e WORDPRESS_DB_NAME="wordpress" \
    -e WORDPRESS_DB_USER="wordpress" \
    -e WORDPRESS_DB_PASSWORD="mypassword2W3E" \
    -e WORDPRESS_DB_HOST="127.0.0.1" \
    --name wordpress-web wordpress
    
  6. 查看 container 運作情況:
    # podman ps
    # podman pod list
    
  7. 使用瀏覽器,開啟 http://localhost:8085,即可開啟全新的 WordPress 安裝流程。

參考文獻:
  1. https://kamadiam.com/wordpress-on-podman/
  2. https://frankknow.com/woo-ecpay-settings/
  3. https://podman-desktop.io/docs/getting-started/getting-started

2018年1月31日 星期三

在 CentOS/RHEL 7 上,新增 OpenStack Cinder 儲存節點

學習目標:
  • 在 OpenStack 平台上,增加 Cinder 儲存節點!
  • 本次範例假設 OpenStack 平台上,己經有架設好的 Control 節點!
操作流程:
  1. 在 Cinder 節點主機上,架設好 LVM 儲存空間!
  2. 在 Cinder 節點主機上,安裝必要的套件:
    # yum install openstack-cinder targetcli python-keystone
    
  3. 在 Cinder 節點主機上,修改設定檔內容:
    # cd /etc/cinder
    # vim cinder.conf
    (修改下列設定,其他設定保持不變...)
    [DEFAULT]
    my_ip = 192.168.100.3  (本 Cinder 節點主機想要提供 Cinder 服務的 IP 位置)
    glance_api_servers = http://192.168.100.1:9292 (提供 glance API 連到該 Cinder 的主機清單列表)
    enable_v3_api=True
    storage_availability_zone=nova
    default_availability_zone=nova
    default_volume_type=iscsi
    auth_strategy=keystone
    enabled_backends=lvm-op3 (名稱很重要,請一下需要對應LVM名稱)
    nova_catalog_info=compute:nova:publicURL
    nova_catalog_admin_info=compute:nova:adminURL
    osapi_volume_listen=0.0.0.0
    osapi_volume_workers=32
    iscsi_protocol = iscsi
    debug=False
    log_dir=/var/log/cinder
    transport_url=rabbit://guest:guest@192.168.100.1:5672/
    control_exchange=openstack
    api_paste_config=/etc/cinder/api-paste.ini
    glance_host=192.168.100.1
    [backend]
    [backend_defaults]
    [barbican]
    [brcd_fabric_example]
    [cisco_fabric_example]
    [coordination]
    [cors]
    [database]
    connection=mysql+pymysql://cinder:0d9082d5643849e4@192.168.100.1/cinder
    [fc-zone-manager]
    [healthcheck]
    [key_manager]
    [keystone_authtoken]
    auth_uri=http://192.168.100.1:5000/
    auth_type=password
    auth_url=http://192.168.100.1:35357
    username=cinder
    password=HelloWorld
    project_name=services
    [matchmaker_redis]
    [nova]
    [oslo_concurrency]
    lock_path=/var/lib/cinder/tmp
    [oslo_messaging_amqp]
    [oslo_messaging_kafka]
    [oslo_messaging_notifications]
    driver=messagingv2
    [oslo_messaging_rabbit]
    ssl=False
    [oslo_messaging_zmq]
    [oslo_middleware]
    [oslo_policy]
    policy_file=/etc/cinder/policy.json
    [oslo_reports]
    [oslo_versionedobjects]
    [profiler]
    [ssl]
    [lvm-op3]
    volume_backend_name=lvm
    volume_driver=cinder.volume.drivers.lvm.LVMVolumeDriver
    iscsi_ip_address=192.168.100.5
    iscsi_helper=lioadm
    volume_group=data
    volumes_dir=/var/lib/cinder/volumes
    
  4. 在 Cinder 節點主機上,新增一下記錄檔:
    # touch /var/log/cinder/volume.log
    # chown root.cinder /var/log/cinder/volume.log
    # chmod g+w /var/log/cinder/volume.log
    # restorecon -R /etc/cinder
    # restorecon -R /var/log/cinder
    
  5. 在 Cinder 節點主機上,啟動 Cinder Volume 服務:
    # systemctl enable openstack-cinder-volume.service target.service
    # systemctl start openstack-cinder-volume.service target.service
    
  6. 在 Control 節點主機上,查詢 Cinder 服務:
    (keystone_admin)]# cinder service-list
    

參考範例:
  • https://docs.openstack.org/mitaka/install-guide-rdo/cinder-storage-install.html

2018年1月14日 星期日

在 CentOS/RHEL 7 上安裝 OpenStack 套件

學習目標:
  • 在多節點的硬體平台基礎上,安裝 OpenStack 套件!
  • 本次範例以三個節點為示範!
操作流程:
  1. 三部主機同時安裝相關的套件:
    # yum update
    # reboot
    
  2. 三部主機可暫時停用防火牆:
    # systemctl disable firewalld 
    # systemctl stop firewalld (重開機後,會自動啟動!需要時,仍需要關上!)
    
  3. 三部主機同時設定 chronyd:
    # yum install chrony
    # vim /etc/chrony.conf
    server time.stdtime.gov.tw iburst
    
    # systemctl enable chronyd.service
    # systemctl restart chronyd.service
    
  4. 三部主機上,停用 NetworkManger 套件,並同時啟用 network 套件:
    # systemctl stop NetworkManager
    # systemctl disable NetworkManager
    # systemctl enable network
    # hostnamectl set-hostname control.example.com (每部均不相同!)
    # reboot
    
  5. 在 Control Node 上,設定連線用的 ssh key:
    # ssh-keygen
    # ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.2
    # ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.3
    # ssh network
    
  6. 在 Control Node 上,修改 /etc/hosts 檔案:
    # vim /etc/hosts
    (其他省略...)
    192.168.1.1 control control.example.com
    192.168.1.2 network network.example.com
    192.168.1.3 compute1 compute1.example.com
    
  7. 在 Control Node 上,將 /etc/hosts 檔案送至另兩部主機上:
    # scp /etc/hosts root@192.168.1.2:/etc/
    # scp /etc/hosts root@192.168.1.3:/etc/
    
  8. 在三部主機上,安裝 OpenStack Pike 倉儲套件:
    # yum install centos-release-openstack-pike
    # yum upgrade
    # reboot
    # yum install python-openstackclient
    # yum install openstack-selinux
    
  9. 在 Control Node 上,安裝 PackStack 套件,用來協助安裝、設定 OpenStack:
    # yum install openstack-packstack
    
  10. 在 Control Node 上,產生 answer.txt 檔案,並且編修內容:
    # packstack --gen-answer-file=/root/answer.txt
    # vim /root/answer.txt
    (部份省略,只顯示必須修改的要項...)
    CONFIG_DEFAULT_PASSWORD=a123456
    CONFIG_CEILOMETER_INSTALL=y
    CONFIG_NTP_SERVERS=tick.stdtime.gov.tw
    CONFIG_CONTROLLER_HOST=192.168.1.1
    CONFIG_COMPUTE_HOSTS=192.168.1.3
    CONFIG_NETWORK_HOSTS=192.168.1.2
    CONFIG_PROVISION_DEMO=n
    CONFIG_KEYSTONE_ADMIN_PW=a123456
    CONFIG_HEAT_INSTALL=y
    CONFIG_CINDER_VOLUMES_CREATE=y
    CONFIG_LBAAS_INSTALL=y
    CONFIG_CINDER_VOLUME_NAME=data
    CONFIG_NEUTRON_METERING_AGENT_INSTALL=y
    CONFIG_NEUTRON_FWAAS=y
    CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vlan
    CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vlan
    CONFIG_NEUTRON_ML2_VLAN_RANGES=physnet1:1:1000
    CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-eth1
    CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-eth1:eth1
    CONFIG_HEAT_CFN_INSTALL=y
    CONFIG_HORIZON_SSL=y
    CONFIG_SWIFT_INSTALL=n
    
  11. 在 Control Node 上,執行安裝 OpenStack 套件:
    # packstack --answer-file=/root/answer.txt
    

參考文獻:
  • http://www.techsupportpk.com/2016/12/installing-openstack-on-multi-node-in-linux.html
  • https://www.linuxtechi.com/multiple-node-openstack-liberty-installation-on-centos-7-x/
  • https://www.linuxtechi.com/multinode-openstack-newton-installation-centos7/

2017年8月24日 星期四

在 CentOS / RHEL 7 上架設 oVirt (RHEV-M) 服務

學習目標:
  • 安裝 oVirt 套件,以利管理虚擬機!
  • oVirt 套件,類似 RHEVM 管理套件,無授權使用問題!
操作流程:
  1. 安裝 oVirt 的 repository 套件:
    # yum install http://resources.ovirt.org/pub/yum-repo/ovirt-release41.rpm
    
  2. 安裝 dnf 的 相闗套件:
    # yum install dnf
    
  3. 安裝 oVirt 的套件:
    # dnf install -y ovirt-engine
    
  4. 安裝與設定 PostgreSQL 套件:
    # yum install postgresql postgresql-server postgresql-contrib
    # postgresql-setup initdb
    # vim /var/lib/pgsql/data/pg_hba.conf
    host    all             all             127.0.0.1/32            md5
    host    all             all             ::1/128                 md5
    
    # vim /var/lib/pgsql/data/postgresql.conf
    autovacuum_vacuum_scale_factor = 0.01  
    autovacuum_analyze_scale_factor = 0.075  
    autovacuum_max_workers = 6  
    maintenance_work_mem = 65536  
    max_connections = 150  
    lc_messages = 'en_US.UTF-8'
    
    # systemctl start postgresql
    # systemctl enable postgresql
    # firewall-cmd --permanent --add-service=postgresql
    # firewall-cmd --reload
    # psql -h 127.0.0.1 -U postgres -W
    postgres=# create database ovirt;
    
  5. 安裝設定 oVirt Engine :
    # engine-setup
    
  6. 按照出現的訊息,逐一安裝系統設定值 !
  7. 打開瀏覽器,連線到 oVirt 的管理網頁:
    # firefox https://www.example.com:443/ovirt-engine
    (登入的帳密 admin/你自己設定的密碼 )
    
  • http://www.ovirt.org/download/

2017年3月25日 星期六

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(十四)

學習目標:
  • 建立叢集系統的網路備援機制!
操作流程:練習(一)
  1. 在乾淨的環境上,建立叢集系統:
    [root@nodea ~]# yum -y install pcs fence-agents-all fence-agents-rht
    [root@nodea ~]# systemctl enable pcsd
    [root@nodea ~]# systemctl start pcsd
    [root@nodea ~]# firewall-cmd --permanent --add-service=high-availability
    [root@nodea ~]# firewall-cmd --reload
    [root@nodea ~]# echo centos | passwd --stdin hacluster
    [root@nodea ~]# pcs cluster auth -u hacluster -p centos node{a..c}.example.com
    
  2. 在 nodea 上設定叢集系統使用 RRP 的 passive 模式,建立兩個 ring 網路環境:
    [root@nodea ~]# pcs cluster setup --start --enable --name clusterX \
    > nodea.example.com,nodea_r1.example.com \
    > nodeb.example.com,nodeb_r1.example.com \
    > nodec.example.com,nodec_r1.example.com \
    > --rrpmode passive 
    
  3. 在 nodea 上,建立 fence 限制機制:
    [root@nodea ~]# pcs stonith create fence_all fence_rht \
    > ipaddr="fencing.example.com" \
    > pcmk_host_check="none"
    > pcmk_host_list=""
    
  4. 在 nodec 上,測試網路運作機制:
    [root@nodec ~]# nmcli con down "System eth1"
    [root@nodea ~]# corosync-quorumtool
    [root@nodec ~]# nmcli con down "System eth2"
    
操作流程:練習(二)
  1. 查詢 multipath 上的硬體裝置:
    [root@nodea ~]# ls /dev/disk/by-id/dm-uuid-mpath-*
    
  2. 建立該硬體資源的 fence 代理管理設定:
    [root@nodea ~]# pcs stonith create scsi-killer fence_scsi \
    > devices="/dev/disk/by-id/dm-uuid-mpath-FQDN" \
    > pcmk_monitor_action=metadata \
    > pcmk_host_list="nodea.example.com nodeb.example.com nodec.example.com" \
    > pcmk_reboot_action="off" \
    > meta provides="unfencing"
    
  3. 在每個節點上,分別建立兩個不同 level 的 fence 代理機制:
    [root@nodea ~]# pcs stonith level add 1 nodea.example.com fence_nodea
    [root@nodea ~]# pcs stonith level add 2 nodea.example.com scsi-killer
    
  4. 利用更動 nodec 的設定,觀察 fence 運作情況:
    [root@nodea ~]# pcs stonith update fence_nodec ipaddr="broken.example.com"
    [root@nodea ~]# pcs stonith fence nodec.example.com
    [root@nodea ~]# multipath -ll
    

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(十三)

學習目標:
  • 用 GFS2 叢集檔案系統提供資源儲存!
操作流程:練習(一)
  1. 在各節點上,安裝 gfs2-utils 與 lvm2-cluster 兩個套件:
    [root@nodea ~]# yum -y install gfs2-utils lvm2-cluster
    
  2. 在各節點上,設定 no-quorum-policy=freeze:
    [root@nodea ~]# pcs property set no-quorum-policy=freeze
    
  3. 在 nodea 節點上,設定 DLM 代理資源:
    [root@nodea ~]# pcs resource create dlm ocf:pacemaker:controld op monitor interval=30s on-fail=fence clone interleave=true ordered=true
    
  4. 在各節點上,設定 locking_type 在 /etc/lvm/lvm.conf 檔案內:
    [root@nodea ~]# lvmconf --enable-cluster
    
  5. 在各節點上,先暫停 lvm2-lvmetad 服務的運作,以利修改設定檔:
    [root@nodea ~]# systemctl stop lvm2-lvmetad
    
  6. 在 nodea 節點上,設定 clvmd 成為叢集資源:
    [root@nodea ~]# pcs resource create clvmd ocf:heartbeat:clvm op monitor interval=30s on-fail=fence clone interleave=true ordered=true
    
  7. 在 nodea 節點上,設定啟用條件順序,讓 dlm 資源早於 clvmd 資源啟用,並且只能用於同一節點上:
    [root@nodea ~]# pcs constraint order start dlm-clone then clvmd-clone
    [root@nodea ~]# pcs constraint colocation add clvmd-clone with dlm-clone
    
  8. 在 nodea 節點上,建立 LVM 檔案系統:
    [root@nodea ~]# pvcreate /dev/mapper/mpatha
    [root@nodea ~]# vgcreate -Ay -cy cluster_vg /dev/mapper/mpatha
    [root@nodea ~]# lvcreate -L 2G -n gfsdata cluster_vg
    
  9. 在 nodea 節點上,建立 gfs2 檔案系統於 LVM 上:
    [root@nodea ~]# mkfs.gfs2 -t clusterX:gfsdata -j2 /dev/mapper/cluster_vg-gfsdata
    [root@nodea ~]# mkdir /gfsdata
    [root@nodea ~]# mount -t gfs2 /dev/mapper/cluster_vg-gfsdata /gfsdata
    [root@nodea ~]# echo "Hello, cluster gfs2" > /gfsdata/test1
    
操作流程:練習(二)
  1. 在 nodec 上,將 LVM 檔案系統掛載 (會發現空間不足掛載):
    [root@nodec ~]# mount -t gfs2 /dev/mapper/cluster_vg-gfsdata /gfsdata
    
  2. 在 nodea 上檢查 GFS2 檔案系統掛載情況以及硬碟剩餘空間:
    [root@nodea ~]# gfs2_edit -p jindex /dev/mapper/cluster_vg-gfsdata | grep journal
    [root@nodea ~]# df -h /gfsdata
    
  3. 在 nodea 上,增加兩個 journal 掛載數:
    [root@nodea ~]# gfs2_jadd -j2 /gfsdata
    
  4. 在 nodea 上,再次檢查 GFS2 檔案系統掛載情況以及硬碟剩餘空間:
    [root@nodea ~]# gfs2_edit -p jindex /dev/mapper/cluster_vg-gfsdata | grep journal
    [root@nodea ~]# df -h /gfsdata
    
  5. 在 nodea 上,增加 LVM 空間:
    [root@nodea ~]# lvextend -L +512MB /dev/mapper/cluster_vg-gfsdata
    
  6. 在 nodea 上,增加 GFS 空間至 LVM 空間大大:
    [root@nodea ~]# gfs2_grow /gfsdata
    [root@nodea ~]# df -h /gfsdata
    
  7. 在 nodec 上,再次將 LVM 檔案系統掛載:
    [root@nodec ~]# mount -t gfs2 /dev/mapper/cluster_vg-gfsdata /gfsdata
    
操作流程:練習(三)
  1. 在各節點上,準備 DLM 以及 clvmd 服務:
    [root@nodea ~]# yum install -y gfs2-utils lvm2-cluster
    [root@nodea ~]# pcs property set no-quorum-policy=freeze
    [root@nodea ~]# pcs resource create dlm ocf:pacemaker:controld op monitor \ 
    > interval=30s on-fail=fence clone interleave=true ordered=true
    [root@nodea ~]# lvmconf --enable-cluster
    [root@nodea ~]# systemctl stop lvm2-lvmetad
    [root@nodea ~]# pcs resource create clvmd ocf:heartbeat:clvm op monitor \
    > interval=30s on-fail=fence clone interleave=true ordered=true
    [root@nodea ~]# pcs constraint order start dlm-clones then clvmd-clone
    [root@nodea ~]# pcs constraint colocation add clvmd-clone with dlm-clone
    
  2. 在 nodea 上,建立 LVM ,並且製作 GFS2 檔案系統:
    [root@nodea ~]# pvcreate /dev/mapper/mpatha
    [root@nodea ~]# vgcreate -Ay -cy socks /dev/mapper/mpatha
    [root@nodea ~]# lvcreate -L 1G -n shoes socks
    [root@nodea ~]# mkfs.gfs2 -t clusterx:centos-gfs2 -j3 /dev/mapper/socks-shoes 
    
  3. 在 nodea 上,建立 cluster 資源:
    [root@nodea ~]# pcs resource create clusterfs Filesystem \
    > device="/dev/socks/shoes" directory="/mnt/pants" \
    > fstype="gfs2" options="noatiome" op monitor interval=10s
    > on-fail=fence clone interleave=true
    [root@nodea ~]# pcs constraint order start clvmd-clone then clusterfs-clone
    [root@nodea ~]# pcs constraint colocation add clusterfs-clone with clvmd-clone
    
  4. 在 nodec 上,確認掛載況狀:
    [root@nodec ~]# mount | grep /mnt/pants
    

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(十二)

學習目標:
  • 用 LVM 架 GFS 檔案系統!
  • Cluster 上的 LVM 架構:HA-LVM 與 Clustered LVM!
    • HA-LVM:vg 與其上的 lv,一次只給一個節點使用!
      • 設定方式一:使用 LVM 標籤
      • 設定方式二:使用 clustered LVM daemon , clvmd
    • Clustered LVM:在分享的儲存設備中,所有的vg 與 lv 均可給所有節點使用!
  • 重點提示:
    • LVM 觀念與多重路徑概念整合
    • LVM 設定檔:/etc/lvm/lvm.conf
    • LVM 架構查詢指令:vgcfgrestore
    • LVM 架構參數改變後,需要執行指令:lvchange
操作流程:練習(一)
  1. 在 nodea 上,切割兩個分割區,練習 LVM 基本操作:
    [root@nodea ~]# fdisk /dev/vdb
    [root@nodea ~]# partprobe
    [root@nodea ~]# pvcreate /dev/vdb2 /dev/vdb3
    [root@nodea ~]# vgcreate vgsrv /dev/vdb2 /dev/vdb3
    [root@nodea ~]# vgs
      VG    #PV #LV #SN Attr   VSize VFree
      vgsrv   2   0   0 wz--n- 3.99g 3.99g
    
  2. 在 vgsrv 上,切割一個 LV 分割區:
    [root@nodea ~]# lvcreate -n resizeme -L 2G vgsrv
    
  3. 在 resizeme 上,建立 xfs 檔案系統:
    [root@nodea ~]# mkfs -t xfs /dev/vgsrv/resizeme
    
  4. 將新建立的 xfs 檔案系統,掛載在 /mnt 目錄下:
    [root@nodea ~]# mount /dev/vgsrv/resizeme /mnt
    [root@nodea ~]# touch /mnt/file{0..9}
    
  5. 缷載 /mnt 目錄:
    [root@nodea ~]# umount /mnt
    
  6. 縮減 resizeme 大小至 1G:
    [root@nodea ~]# lvresize -L 1G /dev/vgsrv/resizeme
    [root@nodea ~]# mount /dev/vgsrv/resizeme /mnt  --> 發現不能掛載
    
  7. 檢查 vgsrv 架構:
    [root@nodea ~]# vgcfgrestore -l vgsrv
    :(略)
    :
    File:  /etc/lvm/archive/vgsrv_00002-1891440157.vg
      VG name:     vgsrv
      Description: Created *before* executing 'lvresize -L 1G /dev/vgsrv/resizeme'
      Backup Time: Fri Mar 24 18:50:14 2017
    :
    :(略)
    
  8. 回復到縮減前的狀態:
    [root@nodea ~]# vgcfgrestore -f /etc/lvm/archive/vgsrv_00002-1891440157.vg vgsrv
    
  9. 進行回復後的更新動作:
    [root@nodea ~]# lvchange -an /dev/vgsrv/resizeme 
    [root@nodea ~]# lvchange -ay /dev/vgsrv/resizeme 
    
  10. 重新掛載 /mnt 目錄:
    [root@nodea ~]# mount /dev/vgsrv/resizeme /mnt
    [root@nodea ~]# ls -al /mnt
    
  11. 再次缷載 /mnt 目錄,並移除 resizeme :
    [root@nodea ~]# umount /mnt
    [root@nodea ~]# lvremove /dev/vgsrv/resizeme
    
操作流程:練習(二),使用HA-LVM
  1. 在 nodea 上,將多重路徑上的硬碟設備,做成 LVM 檔案系統 :
    [root@nodea ~]# pvcreate /dev/mapper/mpatha
    [root@nodea ~]# vgcreate clustervg /dev/mapper/mpatha
    [root@nodea ~]# lvcreate -L 1G -n clusterlv clustervg
    [root@nodea ~]# mkfs -t xfs /dev/clustervg/clusterlv
    
  2. 在所有節點上,編寫 lvm 設定檔內容:
    [root@nodea ~]# vim /etc/lvm/lvm.conf
    locking_type = 1
    volume_list = []  --> 表示本地端的LVM不分享!
    
  3. 在所有節點上,重新設定 initramfs 檔案:
    [root@nodea ~]# dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r); reboot
    
  4. 在所有節點上,查詢 cluster 服務運作是否正常:
    [root@nodea ~]# pcs status
    
  5. 在 nodea 節點上,建立 LVM 資源:
    [root@nodea ~]# pcs resource create halvm LVM volgrpname=clustervg exclusive=true --group halvmfs
    [root@nodea ~]# pcs resource create xfsfs Filesystem device="/dev/clustervg/clusterlv" directory="/mnt" fstype="xfs" --group halvmfs
    [root@nodea ~]# pcs status
    [root@nodea ~]# lvs
    [root@nodea ~]# mount | grep clusterlv
    
  6. 在 nodea 節點上,測試 HA-LVM 功能:
    [root@nodea ~]# pcs cluster standby nodea.example.com
    [root@nodea ~]# pcs status
    [root@nodea ~]# pcs cluster unstandby nodea.example.com
    :
    (到各節點查詢,LVM被掛載到哪個節點上)
    
操作流程:練習(二),使用 Clustered LVM 方式
  1. 在各節點上,安裝 dlm 及 lvm2-cluster 套件:
    [root@nodea ~]# yum -y install dlm  lvm2-cluster
    [root@nodea ~]# lvmconf --enable-cluster
    
  2. 在各節點上,先暫停 lvm2-lvmetad 服務的運作,以利修改設定檔:
    [root@nodea /]# systemctl stop lvm2-lvmetad
    
  3. 在 nodea 節點上,新增使用 controld 資源代管的 dlm 資源:
    [root@nodea ~]# pcs resource create dlm controld op monitor interval=30s on-fail=fence clone interleave=true ordered=true
    
  4. 在 nodea 節點上,新增使用 clvm 資源代管的 clvmd 資源:
    [root@nodea ~]# pcs resource create clvmd clvm op monitor interval=30s on-fail=fence clone interleave=true ordered=true
    
  5. 在 nodea 節點上,設定啟用條件順序,讓 dlm 資源早於 clvmd 資源啟用,並且只能用於同一節點上:
    [root@nodea ~]# pcs constraint order start dlm-clone then clvmd-clone
    [root@nodea ~]# pcs constraint colocation add clvmd-clone with dlm-clone
    
  6. 在 nodea 節點上,建立 LVM 檔案系統:
    [root@nodea ~]# pvcreate /dev/mapper/mpatha
    [root@nodea ~]# vgcreate myvg /dev/mapper/mpatha
    [root@nodea ~]# lvcreate -L 1G -n mylv myvg
    

2017年3月23日 星期四

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(十一)

學習目標:
  • 管理擁有多重路徑的儲存設備!
  • 重點提示:
    • 多重路徑套件:device-mapper-multipath
    • 設定檔:/etc/multipath.conf
    • 指令:mpathconf
    • Daemon:multipathd
操作流程:練習(一)
  1. 在 nodea、nodeb、nodec 上,安裝 device-mapper-multipath 工具套件:
    [root@nodea ~]# yum -y install device-mapper-multipath 
    
  2. 在 nodea 上,啟動 multipath 設定檔:
    [root@nodea ~]# mpathconf --enable 
    
  3. 在 nodea 上,修改 multipath 設定檔 /etc/multipath.conf:
    [root@nodea ~]# vim /etc/mutipath.conf
     blacklist {
            devnode "^vd[a-z]"  --> 啟免本地端設備被納入!
    }
    
  4. 在 nodea 上,把 iSCSI 加入 multipath 設定檔中:
    [root@nodea ~]# /usr/lib/udev/scsi_id -g -u /dev/sda
    36001405e92cadbc599440ef89643bc0b
    [root@nodea ~]# vim /etc/mutipath.conf
    (加入下列內容:)
    multipaths {
            multipath {
                    wwid 36001405e92cadbc599440ef89643bc0b
                    alias   ClusterStorage
                    path_grouping_policy    failover
            }
    }
    
    
  5. 在 nodea 上,複製 multipath 設定檔到 nodeb、nodec 節點上:
    [root@nodea ~]# rsync -avz -e ssh /etc/multipath.conf nodeb:/etc/mutlipath.conf
    [root@nodea ~]# rsync -avz -e ssh /etc/multipath.conf nodec:/etc/multipath.conf
    
  6. 在 nodea、nodeb、nodec 上,啟動 multipathd 服務:
    [root@nodea ~]# systemctl enable multipathd ; systemctl start multipathd
    [root@nodeb ~]# systemctl enable multipathd ; systemctl start multipathd
    [root@nodec ~]# systemctl enable multipathd ; systemctl start multipathd
    
  7. 在 nodea、nodeb、nodec 上,查看 multipathd 服務情況:
    [root@nodea ~]# multipath -ll
    [root@nodeb ~]# multipath -ll
    [root@nodec ~]# multipath -ll
    
  8. 在 nodea 上,切割分割區:
    [root@nodea ~]# fdisk /dev/mapper/ClusterStorage 
    
  9. 在 nodea、nodeb、nodec 上,更新 partition table 資訊:
    [root@nodea ~]# partprobe
    [root@nodeb ~]# partprobe
    [root@nodec ~]# partprobe
    
  10. 在 nodea、nodeb、nodec 上,查看分割區內容:
    [root@nodea ~]# ls -la /dev/mapper/
    [root@nodeb ~]# ls -la /dev/mapper/
    [root@nodec ~]# ls -la /dev/mapper/
    
  11. 在 nodea、nodeb、nodec 上,若沒發現分割區,可利用 kpartx 建立:
    [root@nodea ~]# kpartx -a -v /dev/mapper/ClusterStorage
    [root@nodeb ~]# kpartx -a -v /dev/mapper/ClusterStorage
    [root@nodec ~]#  kpartx -a -v /dev/mapper/ClusterStorage
    

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(十)

學習目標:
  • 將 iSCSI 分享的硬碟,掛載至 cluster 上!
  • 進一步設定掛載 iSCSI 硬碟的參數!
操作流程:練習(一)
  1. 在 nodea 上,安裝 iscsi-initiator 工具套件,並且設定啟動:
    [root@nodea ~]# yum -y install iscsi-initiator-utils 
    [root@nodea ~]# vim /etc/iscsi/initiatorname.iscsi
    InitiatorName=iqn.2017-04.com.example:node
    [root@nodee ~]# systemctl enable iscsi; systemctl start iscsi
    
  2. 在 nodea 上,查詢 fence 主機所提供的 iscsi 裝置:
    [root@nodea ~]# iscsiadm -m discovery -t st -p 172.24.0.20
    [root@nodea ~]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 -p 172.24.0.20 -l
    [root@nodea ~]# lsblk
    [root@nodea ~]# tail /var/log/messages
    
  3. 在 nodea 上,瀏覽相關連結資訊:
    [root@nodea ~]# iscsiadm -m session -P 3
    [root@nodea ~]# cd /var/lib/iscsi/nodes
    [root@nodea nodes]# ls -lR
    [root@nodea nodes]# less iqn.2017-04.com.example\:fence.disk01/172.24.0.20\,3260\,1/default
    
  4. 在 nodea 上,使用指令查看相關訊息:
    [root@nodea /]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 -p 172.24.0.20 -u
    [root@nodea /]# lsblk
    [root@nodea /]# ls -Rl /var/lib/iscsi/nodes/  --> 資料仍存在
    [root@nodea /]# systemctl restart iscsi
    [root@nodea /]# lsblk
    [root@nodea /]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 -p 172.24.0.20 -u
    [root@nodea /]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 -p 172.24.0.20 -o delete
    [root@nodea /]# lsblk
    [root@nodea /]# systemctl restart iscsi
    [root@nodea /]# lsblk   --> 應該是不會自動掛載上來了
    [root@nodea /]# iscsiadm -m discovery -t st -p 172.24.0.20
    [root@nodea /]# ls -Rl /var/lib/iscsi/nodes/
    [root@nodea /]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 -p 172.24.0.20 -o delete
    [root@nodea /]# ls -Rl /var/lib/iscsi/nodes/
    
操作流程:練習(二)
  1. 在 nodea 上,掛載 iSCSI 硬碟,並且切割好硬碟、建立 xfs 檔案系統:
    [root@nodea ~]#  iscsiadm -m discovery -t st -p 172.24.0.20
    [root@nodea ~]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 -p 172.24.0.20 -l
    [root@nodee ~]# lsblk
    [root@nodea ~]# fdisk /dev/sda
    (切割出一個硬碟)
    [root@nodea ~]# partprobe
    [root@nodea ~]# mkfs.xfs /dev/sda1
    [root@nodea ~]# mkdir /mnt/iscsi ; mount -t xfs -o rw,_netdev /dev/sda1 /mnt/iscsi
    
  2. 在 nodea 上,先關閉網路連線:
    [root@nodea ~]# nmcli device disconnect eth0
    
  3. 在 nodea 上,進行時間測試:
    [root@nodea ~]# time touch /mnt/iscsi/test1
    (出現下列結果:)
    touch: cannot touch ‘/mnt/iscsi/test1’: No space left on device
    
    real 0m47.201s
    user 0m0.002s
    sys 0m0.001s
    
    
  4. 在 nodea 上,開啟網路連線:
    [root@nodea ~]# nmcli device connect eth0
    
  5. 在 nodea 上,調整 iscsi 連線的 replacement_timeout 時間值到 5 秒:
    [root@nodea ~]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 \
    > -p 172.24.0.20 -o update -n node.session.timeo.replacement_timeout -v 5
    [root@nodea ~]# umount /mnt/iscsi
    [root@nodea ~]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 -p 172.24.0.20 -u
    [root@nodea ~]# iscsiadm -m node -T iqn.2017-04.com.example:fence.disk01 -p 172.24.0.20 -l
    [root@nodea ~]# mount -t xfs -o rw,_netdev /dev/sda1 /mnt/iscsi
    
  6. 在 nodea 上,再次關閉網路連線,並進行時間測試:
    [root@nodea ~]# nmcli device disconnect eth0
    time touch /mnt/iscsi/test2
    
    touch: cannot touch ‘/mnt/iscsi/test2’: No space left on device
    (出現下列結果,時間明顯缩短:)
    real 0m0.002s
    user 0m0.000s
    sys 0m0.002s
    
    
  7. 在 nodea 上,開啟網路連線:
    [root@nodea ~]# nmcli device connect eth0
    

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(九)

學習目標:
  • 管理兩節點的 Cluster 架構!
操作流程:練習(一)
  1. 在 nodee,nodef 上,安裝 pcs 與 fence-agents 套件:
    [root@nodee ~]# yum -y install pcs fence-agents-all 
    [root@nodee ~]# firewall-cmd --permanent --add-service=high-availability
    [root@nodee ~]# firewall-cmd --permanent --add-port=1229/tcp
    [root@nodee ~]# firewall-cmd --reload
    
  2. 在 nodee,nodef 上,啟動 pcsd 服務:
    [root@nodee ~]# systemctl enable pcsd ; systemctl start pcsd 
    [root@nodee ~]# echo centos7 | passwd --stdin hacluster
    [root@nodee ~]# pcs cluster auth -u hacluster -p centos7 \
    > nodee.example.com nodef.example.com
    
  3. 將 nodee,nodef 組成一個兩節點 cluster ,名為 R2 :
    [root@nodee ~]# pcs cluster setup --start --enable \
    > --name R2 \
    > --wait_for_all=0 \
    > nodee.example.com \
    > nodef.example.com
    
    [root@nodee ~]# pcs status
    
  4. 建立一個 fence 機制,代理 fence 使用 fence_xvm ,延遅時間設至五秒 :
    [root@nodee ~]# pcs stonith create fence_nodee fence_xvm \
    > port="guest5" \
    > pcmk_host_list="nodee.example.com" \
    > delay=5
    
    [root@nodee ~]# pcs stonith create fence_nodef fence_xvm \
    > port="guest6" \
    > pcmk_host_list="nodef.example.com" \
    > delay=5
    

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(八)

學習目標:
  • 設定群組資源開啟使用的順序規則
  • 限制三設定值:order location colocation
操作流程:練習(一)
  1. 在 nodea 上,切割分割區約 256 MB(需要掛載iSCSI服務):
    [root@nodea ~]# fdisk /dev/vdb
    (過程簡略...)
    
    [root@nodea ~]# partprobe   --> 必須在所有節點上做
    [root@nodea ~]# mkfs -t xfs /dev/vdb1
    
  2. 在各節點上,取消被 pacemaker 控制的 NFS 服務:
    [root@nodea ~]# systemctl stop nfs-lock ; systemctl disable nfs-lock
    
  3. 在 nodea 節點上,建立一個 nfs 的檔案資源群組:
    [root@nodea ~]# pcs resource create nfsshare Filesystem \
    > device=/dev/vdb1 \
    > directory=/nfsshare \
    > fstype=xfs --group nfs
    
  4. 在 nodea 節點上,建立一個分享服務,置於 nfs 資源群組內:
    [root@nodea ~]# pcs resource create nfsd nfsserver \
    > nfs_shared_infodir=/nfsshare/nfsinfo \
    > --group nfs
    
  5. 在 nodea 節點上,建立一個分享資源目錄,置於 nfs 資源群組內:
    [root@nodea ~]# pcs resource create nfsroot exportfs \
    > clientspec="*" \
    > options=rw,sync,no_root_squash \
    > directory=/nfsshare fsid=0 \
    > --group nfs
    
  6. 在 nodea 節點上,配置一個 IP 位置,置於 nfs 資源群組內:
    [root@nodea ~]# pcs resource create nfsip IPaddr2 \
    > ip=172.24.0.82 \
    > cidr_netmask=24 \
    > --group nfs
    
  7. 在各節點上,啟動防火牆設定:
    [root@nodea ~]# firewall-cmd --permanent --add-service=nfs ; firewall-cmd --reload
    
  8. 在 workstation 主機上,掛載分享出來的目錄:
    [root@fence ~]# mkdir /mnt/nfsv4share 
    [root@fence ~]# mount 172.24.0.82:/ /mnt/nfsv4share
    [root@fence ~]# touch /mnt/nfsv4share/test.txt 
    
  9. 驗證 NFS 分享工作,在 nodea 失效時,仍可以提供服務:
    [root@nodea ~]# pcs cluster standby nodea.example.com
    [root@nodea ~]# pcs status
    [root@fence ~]# ls /mnt/nfsv4share/ 
    
  10. 回復原設定:
    [root@nodea ~]# pcs cluster unstandby nodea.example.com
    [root@nodea ~]# pcs status
    [root@fence ~]# umount /mnt/nfsv4share/ 
    
操作流程:練習(二)
  1. 移動部份資源到其它節點:
    [root@nodea ~]# pcs resource move firstweb nodeb.example.com
    [root@nodea ~]# pcs resource clear firstweb
    [root@nodea ~]# pcs resource move nfs nodec.example.com
    [root@nodea ~]# pcs resource clear nfs
    
  2. 在 nodea 節點上,設定一個 location ,限定 firstweb 分數200:
    [root@nodea ~]# pcs constraint location firstweb prefers \
    > nodea.example.com=200
    
    [root@nodea ~]# pcs status
    
  3. 在 nodea 節點上,設定 firstweb 的資源分數預設值改成 500,nodeb改成499:
    [root@nodea ~]# pcs resource defaults resource-stickiness=500
    [root@nodea ~]# pcs constraint location firstweb prefers \
    > nodeb.example.com=499
    
    [root@nodea ~]# pcs status
    
  4. 在 nodea 節點上,設定 nfs 的資源,避免在 nodec 上執行:
    [root@nodea ~]# pcs constraint location nfs avoids nodec.example.com
    
    [root@nodea ~]# pcs status
    

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(七)

學習目標:
  • 如何對 Cluster 中的資源除錯!
  • 如何檢查 Cluster 中的網路錯誤
操作流程:練習(一)
  1. 在 nodea 上,編修 httpd.conf 檔案,修改 Listen 參數:
    [root@nodea ~]# vim /etc/httpd/conf/httpd.conf
    :
     Listen 29
    :
    
  2. 在 nodea 上,同歩 Cluster 設定,並重新啟動 Cluster:
    [root@nodea ~]# pcs cluster sync 
    [root@nodea ~]# pcs cluster stop --all
    [root@nodea ~]# pcs cluster start --all
    [root@nodea ~]# pcs status resources
    
  3. 在 nodea 上,同歩 Cluster 設定,並重新啟動 Cluster:
    [root@nodea ~]# pcs cluster sync 
    [root@nodea ~]# pcs cluster stop --all
    [root@nodea ~]# pcs cluster start --all
    [root@nodea ~]# pcs status resources 
    
  4. 在 nodea 上,查詢有故障發生的群組資源:
    [root@nodea ~]#  pcs resource failcount show firstwebserver
    
  5. 在 nodea 上,啟動除錯功能:
    [root@nodea ~]# pcs resource debug-start firstwebserver --full
    
  6. 在 nodea 上,顯示資源內容與設定檔:
    [root@nodea ~]# pcs resource show firstwebserver
    
  7. 在 nodea 上,移除在 Cluster 設定上不正確的設定檔參數:
    [root@nodea ~]# pcs resource update firstwebserver configfile=
    
  8. 在 nodea 上,再次查詢有故障發生的群組資源:
    [root@nodea ~]#  pcs resource failcount show firstwebserver
    [root@nodea ~]# pcs status
    
操作流程:練習(二)
  1. 在 nodea 上,查詢 Cluster 網路狀態:
    [root@nodea ~]# pcs status
    [root@nodea ~]# corosync-quorumtool
    [root@nodea ~]# ping -i 4 nodec
    
  2. 在 nodec 上,查詢防火牆的問題:
    [root@nodec~]# firewall-cmd --list-all
    
  3. 在 nodec 上,重新設定防火牆:
    [root@nodec~]# firewall-cmd --permanent --add-service=high-availability
    [root@nodec~]# firewall-cmd --reload
    
  4. 在 nodea 上,查詢 Cluster 狀態:
    [root@nodea ~]# pcs status
    

2017年3月22日 星期三

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(四)

學習目標:
  • 在 clusterX 上,管理 fence 平台與控制節點運作!
  • 實作上,以 fence-virtd 為練習方式,控制 hypervior 上的VM!
Fence Device Server 安裝流程:
  1. 在實體主機上,安裝 fence device server 套件:
    [root@fence ~]# yum -y install fence-virtd fence-virtd-libvirt fence-virtd-multicast
    
  2. 在實體主機上,產生 fence_xvm.key:
    [root@fence ~]# mkdir /etc/cluster
    [root@fence ~]# cd /etc/cluster
    [root@fence ~]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=4k count=1
    
  3. 將 fence_xvm.key 複製到各VM上:
    [root@fence ~]# ssh nodea
    [root@nodea ~]# mkdir /etc/cluster ; exit
    [root@fence ~]# scp /etc/cluster/fence_xvm.key nodea:/etc/cluster
    
  4. 利用指令設定 fence_virtd 設定檔 /etc/fence_virt.conf:
    [root@fence ~]# fence_virtd -c
    (注意下列設定,其餘保持預設值:)
    interface: [br0] (與虚擬機通訊的網路卡介面)
    key path: [/etc/cluster/fence_xvm.key]
    
  5. 檢查檔案 /etc/fence_virt.conf 內容:
    [root@fence ~]# vim /etc/fence_virt.conf
    backends {
            libvirt {
                    uri = "qemu:///system";
            }
    
    }
    
    listeners {
            multicast {
                    port = "1229";
                    family = "ipv4";
                    interface = "br0";
                    address = "225.0.0.12";
                    key_file = "/etc/cluster/fence_xvm.key";
            }
    
    }
    
    fence_virtd {
            module_path = "/usr/lib64/fence-virt";
            backend = "libvirt";
            listener = "multicast";
    }
    
    
  6. 啟動 fence-virtd 服務:
    [root@fence ~]# systemctl enable fence_virtd
    [root@fence ~]# systemctl start fence_virtd
    
  7. 開啟防火牆與SELinux設定:
    [root@fence ~]# firewall-cmd --permanent --add-port=1229/tcp
    [root@fence ~]#firewall-cmd --permanent --add-port=1229/udp
    [root@fence ~]#firewall-cmd --reload
    [root@fence ~]#setsebool -P fenced_can_network_connect on
    [root@fence ~]#setsebool -P fenced_can_ssh on
    
每個節點(VM node)安裝流程:
  1. 安裝 fence-virt 套件:
    [root@nodea ~]# yum -y install fence-virt fence-agents-all
    
  2. 開啟防火牆與SELinux設定:
    [root@nodea ~]# firewall-cmd --permanent --add-port=1229/tcp
    [root@nodea ~]# firewall-cmd --permanent --add-port=1229/tcp
    [root@nodea ~]# firewall-cmd --reload
    [root@nodea ~]# setsebool -P fenced_can_network_connect on
    [root@nodea ~]# setsebool -P fenced_can_ssh on
    
  3. 測試是否可以查看其它節點運作情況:(其它節點也需做完相同步驟):
    [root@nodea ~]# fence_xvm -o list
    [root@nodea ~]# fence_xvm -a 225.0.0.12 -k /etc/cluster/fence_xvm.key -H guest2 -o status
    
  4. 測試是否可以控制其它節點運作:
    [root@nodea ~]# fence_xvm -a 225.0.0.12 -k /etc/cluster/fence_xvm.key -H guest2 -o reboot
    
練習節點(VM node)的 fence device 資源管理:
  1. 建立可管理節點的 fence 資源:
    [root@nodea ~]# pcs stonith create fence_nodea fence_xvm \
    > port="guest1" \
    > pcmk_host_check="static-list" \
    > pcmk_host_list="nodea.example.com nodeb.example.com nodec.example.com noded.example.com"
    
  2. 測試運作情形:
    [root@nodea ~]# pcs stonith fence noded.example.com
    
  3. 更新設定內容:
    [root@nodea ~]# pcs stonith update fence_nodes \
    > pcmk_host_check="none" \
    > pcmk_host_list=""
    
  4. 測試運作情形:
    [root@nodea ~]# pcs stonith fence noded.example.com
    [root@nodea ~]# corosync-quorumtool -m
    

2017年3月4日 星期六

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(六)

學習目標:
  • Corosync 的記錄設定檔:/etc/corosync/corosync.conf
  • Pacemaker 的記錄設定檔:/etc/sysconfig/pacemaker
  • Cluster 不喜歡星期一,因為要用 Email 通知不用上班的節點!
  • 練習:
    • 查看記錄檔內容
    • 更改設定後,如何同歩與重新啟動!
    • 設定系統通知與報告!
操作流程:練習(一)
  1. 在 nodea 上,查看記錄檔內容:
    [root@nodea cluster]# less /var/log/pacemaker.log
    [root@nodea cluster]# less /var/log/messages
    [root@nodea ~]# journalctl -u pacemaker.service -u corosync.service
    
  2. 在 nodea 上,修改記錄檔內容:
    [root@nodea ~]# vim /etc/corosync/corosync.conf
    logging {
        to_syslog: yes
        to_logfile: yes
        logfile: /var/log/cluster.log
        debug: on
    }
    
  3. 在 nodea 上,同歩 cluster 內的所有節點:
    [root@nodea ~]# pcs cluster sync
    
  4. 在 nodea 上,更新 pacemaker 設定檔內容,並同歩 cluster 內的所有節點:
    [root@nodea ~]# vim /etc/sysconfig/pacemaker
    PCMK_debug=yes
    :
    :
    (存檔後,複製設定檔到其它節點上!)
    [root@nodea ~]# scp /etc/sysconfig/pacemaker nodeb:/etc/sysconfig
    [root@nodea ~]# scp /etc/sysconfig/pacemaker nodec:/etc/sysconfig
    [root@nodea ~]# scp /etc/sysconfig/pacemaker noded:/etc/sysconfig
    
  5. 在 nodea 上,更新 logrotate 設定檔,並且同歩 cluster 內的所有節點:
    [root@nodea ~]# cp /etc/logrotate.d/pacemaker /etc/logrotate.d/cluster
    [root@nodea ~]# sed -i 's/pacemaker/cluster/' /etc/logrotate.d/cluster 
    [root@nodea ~]# scp /etc/logrotate.d/cluster nodeb:/etc/logrotate.d/
    [root@nodea ~]# scp /etc/logrotate.d/cluster nodec:/etc/logrotate.d/
    [root@nodea ~]# scp /etc/logrotate.d/cluster noded:/etc/logrotate.d/
    
  6. 在 nodea 上,動新啟動 cluster 的運作:
    [root@nodea ~]# pcs cluster stop --all
    [root@nodea ~]# pcs cluster start --all
    
  7. 在 nodea 上,觀察所有活動記錄:
    [root@nodea ~]# tail -f /var/log/cluster.log
    
  8. 在 nodeb 上,移動資源測試所觀察到的活動記錄:
    [root@nodeb ~]# pcs resource move firsrweb
    
  9. 按照上述流程,回復原設定值!
操作流程:練習(二)
  1. 在 nodea 上,增加 Email 資源至 firstweb 群組:
    [root@nodea ~]# pcs resource create webmail MailTo \
    > email=test@example.com \
    > subject="Cluster Notification" \
    > --group firstweb
    
  2. 觀察所收下來的信件內容:
    [root@nodea ~]# mutt
    
  3. 寫一個小型的 scripts:
    [root@nodea ~]# vim /usr/local/bin/myagent.sh
    #!/bin/bash
    MAILTO=${CRM_notify_recipient:-root@localhost}
    mutt -s "Cluster event from node ${CRM_notify_node}" ${MAILTO} << EOF
    
    A cluster event was triggered by ${CRM_notify_rsc}
    on ${CRM_notify_node}. This event was triggered
    by a ${CRM_notify_task} event.
    
    --
    This mail has been generated automatically
    EOF
    
  4. 新增 ClusterMon 資源,並可带入上述部驟的 scripts 檔案:
    [root@nodea ~]# pcs resource create mailme ClusterMon \
    > extra_options="-e test@example.com \
    > -E /usr/local/bin/myagent.sh" \
    > --clone
    
  5. 觀察所收下來的信件內容:
    [root@nodea ~]# mutt
    
  6. 進行 Cluster 異動,並觀察所收下來的信件內容:
    [root@nodea ~]# pcs resource move firstweb
    [root@nodea ~]# firewall-cmd --remove-service=high-availability
    

2017年2月28日 星期二

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(三)

學習目標:
  • 在 clusterX 上,利用 quorum 工具管理所有節點的投票機制!
操作流程:
  1. 在 nodea 上,停止 cluster 功能:
    [root@nodea ~]# pcs cluster stop --all
    
  2. 在 nodea 上,修改 /etc/corosync/corosync.conf 設定:
    [root@nodea ~]# /etc/corosync/corosync.conf
    (修改內容如下:)
    quorum {
        provider: corosync_votequorum
        last_man_standing: 1
        wait_for_all: 1
    }
    
  3. 在 nodea 上,同歩其他節點上的 corosync.conf 檔案:
    [root@nodea ~]# pcs cluster sync
    
  4. 在 nodea 上,啟動所有節點:
    [root@nodea ~]# pcs cluster start --all
    
  5. 在 nodea 上,檢視投票機制運作即時情狀:
    [root@nodea ~]# watch -n1 corosync-quorumtool
    
  6. 在 nodec 上,關閉 nodec ,然後回到 nodea 檢視投票機制運作即時情狀:
    [root@nodec ~]#poweroff
    [root@nodea ~]# watch -n1 corosync-quorumtool
    
  7. 在 nodeb 上,再關閉 nodeb ,然後回到 nodea 檢視投票機制運作即時情狀:
    [root@nodeb ~]#poweroff
    [root@nodea ~]# watch -n1 corosync-quorumtool
    

2017年2月24日 星期五

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(五)

學習目標:
  • 在 clusterX 上,建立與管理所有資源!
練習流程(一):
  1. 在節點上,查詢可以代管的資源:
    [root@nodea ~]# pcs resource list
    [root@nodea ~]# pcs resource describe Filesystem
    
  2. 在 nodea 節點上,新增一個 NFS 分享目錄資源:
    [root@nodea /]# pcs resource create wwwfs Filesystem \
    > device=fence.example.com:/exports/www \
    > directory=/mnt \
    > fstype=nfs \
    > options=ro
    
  3. 驗證該資源:
    [root@nodea /]# pcs status
    [root@nodeb ~]# watch -n1 pcs status
    [root@nodea /]# firewall-cmd --remove-service=high-availability
    (資源轉移至其它節點了)
    
練習流程(二):
  1. 在各節點上,安裝 httpd 套件:
    [root@nodea ~]# yum install -y httpd
    [root@nodea ~]# setsebool -P httpd_use_nfs 1
    
  2. 在 nodea 節點上,新增一個資源群組,放置各種資源:
    [root@nodea ~]# pcs resource create firstwebip IPaddr2 \
    > ip=172.24.0.80 \
    > cidr_netmask=24 \
    > --group=firstweb
    
    [root@nodea ~]# pcs resource create firstwebfs Filesystem \
    > device=fence.example.com:/exports/www \
    > directory=/var/www/html \
    > fstype=nfs \
    > options=ro \
    > --group=firstweb
    
    [root@nodea ~]# pcs resource create firstwebserver apache --group=firstweb
    
  3. 在各節點上,開啟 httpd 防火牆設定:
    [root@nodea ~]# firewall-cmd --permanent --add-service=http
    [root@nodea ~]# firewall-cmd --reload
    
  4. 驗證該資源:
    [root@nodea /]# pcs status
    [root@fence ~]# yum install -y elinks 
    [root@fence ~]# elinks -dump http://172.24.0.80
    [root@nodea /]# firewall-cmd --remove-service=high-availability
    (資源轉移至其它節點了)
    
練習流程(三):
  1. 在 nodea 節點上,取消 firstweb 資源群組:
    [root@nodea ~]# pcs resource disable firstweb
    [root@nodea ~]# pcs status
    [root@nodea ~]# pcs constraint list
    
  2. 在 nodea 節點上,啟動 firstweb 資源群組:
    [root@nodea ~]# pcs resource enable firstweb
    [root@nodea ~]# pcs resource move firstweb nodeb,example.com
    [root@nodea ~]# pcs constraint list
    
  3. 在 nodea 節點上,禁止某些節點使用 firstweb 部份資源:
    [root@nodea ~]# pcs resource ban firstweb nodeb.example.com
    [root@nodea ~]# pcs resource ban firstweb nodec.example.com
    [root@nodea ~]# pcs resource status
    [root@nodea ~]# pcs constraint list
    [root@nodea ~]# pcs resource clear firstweb
    
練習流程(四):
  • 在各節點上,新增 fear 資源群組,提供 vsftpd 服務!
  1. 在各節點上,新增 vsftpd 服務:
    [root@nodea ~]# yum -y install vsftpd 
    [root@nodea ~]# setsebool -P ftpd_use_nfs 1
    [root@nodea ~]# firewall-cmd --permanent --add-service=ftp
    [root@nodea ~]# firewall-cmd --reload
    
  2. 在 nodea 節點上,新增 IP 位置給 vsftpd 服務:
    [root@nodea ~]# pcc resource create fearip IPaddr2 \
    > ip=172.24.0.81 \
    > cidr_netmask=24 \
    > --group fear  
    
  3. 在 nodea 節點上,新增 nfs 掛載目錄給 vsftpd 服務:
    [root@nodea ~]# pcc resource create fearfs Filesystem \
    > device=fence.example.com:/exports/ftp \
    > directory=/var/ftp/pub \
    > fstype=nfs \
    > options=ro \
    > --group fear  
    
  4. 在 nodea 節點上,設定 vsftpd 服務資源:
    [root@nodea ~]# pcc resource create fearserver systemd:vsftpd --group fear
    
  5. PS:就別問要如何測試了....

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(二)

學習目標:
  • 在 clusterX 上,管理所有節點!
操作流程:
  1. 在 noded 上,安裝與設定 cluster 相關套件:
    [root@noded ~]#firewall-cmd --permanent --add-service=high-availability
    #firewall-cmd --reload
    #yum install pcs fence-agents-all
    #systemctl enable pcsd
    #systemctl start pcsd
    #echo centos7 | passwd --stdin hacluster
    
    
  2. 在 nodea 上,將 noded 加入目前的 clusterX 清單內:
    [root@nodea ~]#pcs cluster auth -u hacluster -p centos7 noded.example.com
    #pcs cluster node add noded.example.com
    
  3. 在 noded 上,驗證其它節點的 hacluster 帳密:
    [root@noded ~]#pcs cluster auth -u hacluster -p centos7
    
  4. 在 noded 上,啟動 cluster 服務,並設定重開機後,也可以加入 clusterX 叢集:
    [root@noded ~]#pcs cluster enable
    #pcs cluster start
    #pcs status
    
  5. 在 nodea 上,設定 fencing 加入 noded ,並指定分享的資源名稱為 fence_noded :
    [root@nodea ~]#pcs stonith create fence_noded fence_rht \
    port="noded.example.com" \
    pcmk_host_list="noded.example.com" \
    ipaddr="fencing.example.com"
    #pcs stonith show
    
  6. 在 fencing 上,重新啟動fence_virtd 服務:
    [root@fencing ~]#systemctl restart fence_virtd
    
  7. 將 noded 重新啟動,查看是否運作正常:
    [root@noded ~]#reboot
    [root@nodea ~]#pcs status
    

2017年2月20日 星期一

在 CentOS7/RHEL7 上,學習架設 High-Availability 服務(一)

學習需知:
  • Clustor Software 需求:
    • corosync 套件:5405/UDP,5405/UDP
    • pcs 套件:有分 pcs 指令與 pcsd 服務套件!pcsd 使用 2224/TCP
    • pacemaker 套件:clustor 主要套件!使用 3121/TCP
    • dlm 套件:使用21064/TCP ,存取GFS2遠端檔案系統
安裝流程:
  1. 在 nodea, nodeb, nodec上,利用 yum 安裝 pcs 與 fence-agents-all 套件:
    [root@nodea ~]#yum -y install pcs fence-agents-all
    [root@nodeb ~]#yum -y install pcs fence-agents-all
    [root@nodec ~]#yum -y install pcs fence-agents-all
    
  2. 在 nodea, nodeb, nodec上,啟動 HA 防火牆設定:
    #[root@nodea ~]firewall-cmd --permanent --add-service=high-availability
    [root@nodea ~]#firewall-cmd --reload
    :
    :
    (其他各 node ,作法相同!)
    
  3. 在 nodea, nodeb, nodec上,啟動 pcsd 服務:
    [root@nodea ~]#systemctl start pcsd
    [root@nodea ~]#systemctl enable pcsd
    :
    (其他各 node ,作法相同!)
    
  4. 在 nodea, nodeb, nodec上,修改 hacluster 帳號的密碼:
    [root@nodea ~]# echo centos7 | passwd --stdin hacluster
    :
    (其他各 node ,作法相同!)
    
  5. 在 nodea 上對各節點,進行身份驗證:
    [root@nodea ~]# pcs cluster auth nodea.example.com \
    > nodeb.example.com \
    > nodec.example.com
    (按下 Enter 後,出現輸入帳密!)
    Username: hacluster
    Password:centos7 
    
    (若成功,會產生下列結果!)
    nodeb.example.com: Authorized
    nodea.example.com: Authorized
    nodec.example.com: Authorized
    
    
  6. 設定 nodea, nodeb, nodec 為 clusterX 基本節:
    [root@nodea ~]# pcs cluster setup --start --name clusterx \
    > nodea.example.com \
    > nodeb.example.com \
    > nodec.example.com
    
  7. 設定開機時,啟動 clusterx 上所有的 node:
    [root@nodea ~]# pcs cluster enable --all
    
  8. 查看 clusterx 上,cluster 運作情形:
    [root@nodea ~]# pcs status
    
  9. 在 nodea, nodeb, nodec clusterx 上,設定 fence 節點資料:
    [root@nodea ~]# pcs stonith create fence_nodea_rht \
    > fence_rht port="nodea.example.com" \
    > pcmk_host_list="nodea.example.com" \
    > ipaddr="fencing.example.com"
    :
    (其他各 node ,作法相同!)
    
  10. 在 fencing 上,重新啟動fence_virtd 服務:
    [root@fencing ~]#systemctl restart fence_virtd
    
  11. 查看 clusterx 上,fencing 運作情形:
    [root@nodea ~]# pcs stonith show
    
  12. 利用 fence 功能,可讓某一個 node ,重開機:
    [root@nodea ~]# pcs stonith fence nodeb.example.com
    
  • 使用 pcs status 時,發生 “WARNING: no stonith devices and stonith-enabled is not false” 時,可使用下列方式排除:
    [root@nodea ~]# crm_verify -L -V
    [root@nodea ~]#pcs property set stonith-enabled=false
    
  • 每個節點上,需要注意防火牆設定,以及 SELinux 設定:
    [root@fencing ~]#firewall-cmd --permanent --add-port=1229/tcp
    [root@fencing ~]#firewall-cmd --permanent --add-port=1229/udp
    [root@fencing ~]#firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -m pkttype --pkt-type multicast -j ACCEPT
    [root@fencing ~]#firewall-cmd --permanent --direct --add-rule ipv6 filter INPUT 0 -m pkttype --pkt-type multicast -j ACCEPT
    [root@fencing ~]#firewall-cmd --reload
    [root@fencing ~]#setsebool -P fenced_can_network_connect on
    [root@fencing ~]#setsebool -P fenced_can_ssh on
    

2016年11月21日 星期一

在 CentOS7/RHEL7 上,使用快照分層化(Snapshot layering)快速建立影像檔案!

設定提要:
  • Ceph Hammer 套件的架設,請參考這一篇
  • Ceph Block 的使用,請參考這一篇
  • 管理 RBD 快照的方式,請參考這一篇
快速設定流程:
  1. 在 ServerC 上建立一個 128MB 的 RDB 映像檔:(--image-format 2 是啟動分層功能的方式!)
    [root@serverc ~]#rbd create test-clone --image-format 2 --size 128
    
  2. 在 ServerB 上建立一個指標,指到上一步驟所建立的 RDB 映像檔:
    [root@serverb ~]# rbd --id rbd.serverb map test-clone
    [root@serverb ~]# rbd --id rbd.serverb showmapped
    id pool image      snap device    
    0  rbd  test-clone -    /dev/rbd0 
    
  3. 在 ServerB 上,針對 RDB 映像檔,建立檔案系統,並且掛載到 /mnt/clones 目錄下:
    [root@serverb ~]#mkfs.ext4 /dev/rbd0
    [root@serverb ~]#mkdir /mnt/clones
    [root@serverb ~]#mount /dev/rbd0 /mnt/clones
    
  4. 在 ServerB 上,新增一個 10MB 的檔案到 /mnt/clones 目錄下:
    [root@serverb ~]#dd if=/dev/zero of=/mnt/clones/file-1 bs=1M count=10
    
  5. 在 ServerC 上,新增一個新的 snapshot:
    [root@serverc ~]#rbd snap create --snap my-snapshot test-clone
    
  6. 在 ServerC 上,建立一個 my-snapshot 複本在 test-clone 內,名為 my-clone:
    [root@serverc ~]#rbd clone --image test-clone --snap my-snapshot --dest my-clone
    
  7. 在 ServerC 上,確認 my-clone 有完整被建立起來:
    [root@serverc ~]#rbd children --image test-clone --snap my-snapshot
    
  8. 在 ServerC 上,扁平化 my-clone 影像檔:
    [root@serverc ~]#rbd flatten --image my-clone
    
  9. 在 ServerB 上建立一個指標,指到新建立的 my-clone 映像檔:
    [root@serverb ~]#rbd --id rbd.serverb map my-clone
    [root@serverb ~]# rbd --id rbd.serverb showmapped
    
  10. 在 ServerB 上,缷載 /mnt/clones 目錄:
    [root@serverb ~]#umount /mnt/clones
    
  11. 在 ServerB 上,掛載新的 RBD 檔到 /mnt/clones 目錄:
    [root@serverb ~]#mount /dev/rbd1 /mnt/clones
    
  12. 在 ServerB 上,查詢 /mnt/clones 目錄,是否有 file-1 檔案:
    [root@serverb ~]#ls /mnt/clones
    

2016年11月17日 星期四

在 CentOS7/RHEL7 上,管理 RBD 快照檔案!

設定提要:
  • Ceph Hammer 套件的架設,請參考這一篇
  • Ceph Block 的使用,請參考這一篇
快速設定流程:
  1. 在 ServerC 上建立一個 128MB 的 RDB 映像檔:
    [root@serverc ~]# rbd create test-snapshot --size 128
    
  2. 在 ServerB 上建立一個指標,指到上一步驟所建立的 RDB 映像檔:
    [root@serverb ~]# rbd --id rbd.serverb map test-snapshot
    [root@serverb ~]# rbd --id rbd.serverb showmapped
    id pool image         snap device    
    0  rbd  test-snapshot -    /dev/rbd0 
    
    
  3. 在 ServerB 上,將 RDB 映像檔格式化成 ext4 檔案系統:
    [root@serverb ~]# mkfs.ext4 /dev/rbd0
    
  4. 在 ServerB 上,將 RDB 映像檔掛載起來:
    [root@serverb ~]# mkdir /mnt/snapshots
    [root@serverb ~]# mount /dev/rbd0 /mnt/snapshots
    
  5. 在 ServerB 上,利用 df 指令來查看檔案系統:
    [root@serverb ~]# df -h
    
  6. 利用 dd 指令,在 snapshots 目錄內,建一個 10MB 的檔案:
    [root@serverb ~]# dd if=/dev/zero of=/mnt/snapshots/file-1 bs=1M count=10
    
  7. 在 ServerC 上建立一個 RDB 快照檔案,指向 RDB 映像檔:
    [root@serverc ~]# rbd snap create --snap my-snapshot test-snapshot
    
  8. 在 ServerB 上,利用 dd 指令,在 snapshots 目錄內,建另一個 10MB 的檔案:
    [root@serverb ~]# dd if=/dev/zero of=/mnt/snapshots/file-2 bs=1M count=10
    [root@serverb ~]#ls /mnt/snapshots
    
  9. 在 ServerC 上建立另一個 RDB 快照檔案,指向 RDB 映像檔:
    [root@serverc ~]# rbd snap create --snap another-snap test-snapshot
    
  10. 在 ServerB 上,缷載 /mnt/snapshots 目錄:
    [root@serverb ~]#umount /mnt/snapshots
    
  11. 在 ServerC 上,列出所有建立的 RDB 快照檔案:
    [root@serverc ~]# rbd --id rbd.serverb snap ls test-snapshot
    
  12. 在 ServerC 上,返回到第一個 RDB 快照, my-snapshot:
    [root@serverc ~]# rbd snap rollback --snap my-snapshot test-snapshot
    
  13. 在 ServerB 上,將 RDB 映像檔掛載起來:
    [root@serverb ~]# mount /dev/rbd0 /mnt/snapshots
    [root@serverb ~]#ls /mnt/snapshots
    
  14. 在 ServerB 上,缷載 /mnt/snapshots 目錄:
    [root@serverb ~]#umount /mnt/snapshots
    
  15. 在 ServerC 上,返回到第二個 RDB 快照, another-snapshot:
    [root@serverc ~]# rbd snap rollback --snap another-snap test-snapshot
    
  16. 在 ServerB 上,將 RDB 映像檔掛載起來:
    [root@serverb ~]# mount /dev/rbd0 /mnt/snapshots
    [root@serverb ~]#ls /mnt/snapshots