2017年5月25日 星期四

在 CentOS 7 / RHEL 7上,安裝 SNMP 服務

學習目標:
  • 安裝 SNMP 服務,以利系統監控!
操作流程:
  1. 系統安裝相關套件:
    # yum install net-snmp net-snmp-utils
    
  2. 修改設定檔內容:
    # mv /etc/snmp/snmp.conf /etc/snmp/snmp.org
    # vim /etc/snmp/snmp.conf
    com2sec local            localhost       public
    com2sec localnet         192.168.0.0/16  public  (public建議修改為其他的帳號)
    
    group   MyRWGroup v1            local
    group   MyROGroup v1            localnet
    
    group   MyROSystem v1           local
    group   MyROSystem v2c          local
    group   MyROSystem usm          local
    
    group   MyROGroup v1            localnet
    group   MyROGroup v2c           localnet
    group   MyROGroup usm           localnet
    
    group   MyRWGroup v1            local
    group   MyRWGroup v2c           local
    group   MyRWGroup usm           local
    
    view    systemview    included   .1.3.6.1.2.1.1
    view    systemview    included   .1.3.6.1.2.1.25.1.1
    view    all    included   .1 80
    
    access  MyROGroup ""      any       noauth    prefix  all none none
    access  MyRWGroup ""      any       noauth    prefix  all all  all
    
    # 位置及裝置資訊
    sysName monitor_server1  (主機裝置名稱)
    syslocation Taiwan_Taipei_IDC   (所在位置資訊)
    syscontact lubida@hiname.net (聯絡人資訊)
    
  3. 處理一下 SELinux 的限制:
    # chcon --reference=snmpd.org snmpd.conf
    
  4. 開啟防火牆設定:
    # firewall-cmd --permanent --add-port=161/udp
    # firewall-cmd --reload
    
  5. 啟動 SNMP 服務:
    # systemctl start snmpd.service
    # systemctl enable snmpd.service
    # systemctl status snmpd.service
    
  6. 利用指令,查詢一下 snmp 是否有正常輸出資料:
    # netstat -auntp | grep snmp
    # snmpwalk -c public -v 2c 192.168.0.1 
    

參考文獻:
  • http://blog.jangmt.com/2015/09/centos-7-snmpd-centos-7-snmp-install.html
  • http://blog.ilc.edu.tw/blog/index.php?op=printView&articleId=650585&blogId=25793
  • https://www.svennd.be/how-to-install-snmp-service-on-centos-7-2/

2017年5月24日 星期三

在CentOS/RHEL7上,安裝 Netdata 監控程式

學習目標:
  • 安裝 netdata ,以利系統監控!
操作流程:
  1. 系統事先安裝相關套件:
    # yum install epel-release
    # yum install autoconf automake curl gcc git libmnl-devel libuuid-devel lm_sensors make MySQL-python nc pkgconfig python python-psycopg2 PyYAML zlib-devel
    
  2. 利用 git 取得 netdata 套件:
    # cd /opt
    # git clone https://github.com/firehol/netdata.git --depth=1
    
  3. 利用 netdata 套件中的安裝程式,進行軟體編譯與安裝:
    # cd netdata
    # ./netdata-installer.sh
    
  4. 安裝 netdata 套件過程中,可指定安裝目錄:
    按下Enter,就會按照上述設定,進行安裝工作!
  5. 開啟 Kernel 的 KSM 功能:
    # echo 1 >/sys/kernel/mm/ksm/run
    # echo 1000 >/sys/kernel/mm/ksm/sleep_millisecs
    
  6. 開啟防火牆設定:
    # firewall-cmd --permanent --add-port=19999/tcp
    # firewall-cmd --reload
    
  7. 打開瀏覽器,輸入IP位置以及 19999 port: http://127.0.0.1:19999
  8. 啟動與關閉 Netdata 服務:
    # systemctl start netdata
    # systemctl stop netdata
    

參考文獻:
  • https://github.com/firehol/netdata/wiki/Installation
  • http://blog.itist.tw/2017/05/real-time-performance-monitoring-with-netdata-on-raspberry-pi.html
  • https://www.digitalocean.com/community/tutorials/how-to-set-up-real-time-performance-monitoring-with-netdata-on-ubuntu-16-04

2017年5月10日 星期三

在 CentOS / RHEL 7 上,架設多個 Redis 服務 !!

學習目標:
  • 利用不同的 port ,啟動多個 Redis 服務!
  • 架設 Redis Server ,請參考這一篇
操作流程:
  1. 複製主要設定檔:
    # cp -a /etc/redis.conf /etc/redis6479.conf
    
  2. 編修設定檔 /etc/redis6479.conf:
    # vim /etc/redis6479.conf
    (修改下列項目...)
    port 6479
    tcp-backlog 611
    pidfile /var/run/redis_6479.pid
    logfile /var/log/redis/redis_6479.log
    
  3. 修正設定檔 /etc/redis6479.conf 權限:
    # chown redis /etc/redis6479.conf
    
  4. 切換到系統服務目錄,修改設定檔:
    # cd /usr/lib/systemd/system/
    # cp -a redis.service redis6479.service
    # vim redis6479.service
    (修改下列項目...)
    ExecStart=/usr/bin/redis-server /etc/redis6479.conf --daemonize no
    ExecStop=/usr/libexec/redis-shutdown redis6479
    
  5. 切換到系統服務目錄的設定目錄,新增設定目錄:
    #cd /etc/systemd/system/
    # cp -a redis.service.d/ redis6479.service.d/
    
  6. 新增記錄檔:
    #touch /var/log/redis/redis_6479.log
    # chown redis.redis /var/log/redis/redis_6479.log
    
  7. SELinux 的設定與修正:
    #chcon --reference=/etc/redis.conf /etc/redis6479.conf
    #chcon --reference=/usr/lib/systemd/system/redis.service /usr/lib/systemd/system/redis6479.service
    #chcon -R --reference=/etc/systemd/system/redis.service.d/ /etc/systemd/system/redis6479.service.d/
    #chcon --reference=/var/log/redis/redis.log /var/log/redis/redis_6479.log
    #semanage port -a -t redis_port_t -p tcp 6479
    #semanage port -l | grep redis
    
  8. 防火牆設定:
    #firewall-cmd --permanent --add-port=6479/tcp
    #firewall-cmd --reload
    
  9. 啟動服務:
    #systemctl enable redis6479.service
    # systemctl start redis6479.service
    # systemctl status redis6479.service -l
    
  10. 測試服務:
    # redis-cli -p 6479 -a 123456
    127.0.0.1:6479> exit
    

參考文獻:
  • https://www.cnyunwei.cc/archives/996
  • https://read01.com/eE2GGK.html
  • http://wangxin123.com/2016/09/18/Redis%E5%A4%9A%E5%AE%9E%E4%BE%8B%E5%8F%8A%E4%B8%BB%E4%BB%8E%E6%90%AD%E5%BB%BA/

2017年5月4日 星期四

在 CentOS7/RHEL7 上,遠端操作 X Window 程式!

學習目標:
  • 利用 ssh 指令登入遠端主機後,使用遠端主機的 X window 程式!
操作流程:練習(一)
  1. 連線至遠端主機:
    $ ssh -X student@remotehost.ip
    
  2. 修改遠端主機的 sshd 設定:
     $sudo vim /etc/ssh/sshd_config
    (...其他略過...)
    X11Forwarding yes
    
  3. 修改遠端主機的 ssh 設定:
     $sudo vim /etc/ssh/ssh_config
    (...其他略過...)
    Host *
        ForwardX11 yes
    
  4. 重新啟動遠端主機 sshd 服務:
     $sudo systemctl restsart sshd
    
  5. 如果出現「X11 connection rejected because of wrong authentication.」,可在遠端主機上,利用下列指令:
     $sudo xauth merge /home/student/.Xauthority
    
  6. 執行遠端主機 X window 程式:
     $sudo virt-manager &
    

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