2017年8月26日 星期六

在 CentOS / RHEL 7 上安裝 GitBook !!

學習目標:
  • 安裝 GitBook 套件,以利出版自己的電子書!
操作流程:
  1. 安裝相關的套件:
    # yum install epel-release
    # yum update
    # yum install gcc openssl-devel gcc-c++ compat-gcc-44 compat-gcc-44-c++
    # reboot
    
  2. 由網路上,安裝遣缺的套件:
    # rpm -ivh https://kojipkgs.fedoraproject.org//packages/http-parser/2.7.1/3.el7/x86_64/http-parser-2.7.1-3.el7.x86_64.rpm
    
  3. 安裝 Node.js 套件:
    # yum -y install nodejs
    
  4. 測試 Node.js 與 npm 套件是否正常運作:
    # node -v
    #npm -v
    
  5. 安裝 gitbook 套件:
    # npm install -g gitbook-cli
    
  6. 安裝 Calibre 套件:
    # wget -nv -O- https://download.calibre-ebook.com/linux-installer.py\
     | python -c "import sys; main=lambda:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main()"
    
  7. 測試 gitbook 套件:
    # gitbook -V
    
  8. 開始利用 gitbook 開啟新電子書編輯內容:
    # mkdir /opt/test
    # cd /opt/test
    # gitbook init
    # gitbook build
    # gitbook pdf
    # gitbook serve 
    

2017年8月24日 星期四

在 CentOS / RHEL 7 上架設 ntopng 流量監控服務

學習目標:
  • 安裝 ntopng 套件,以利即時監控網路流量!
  • 配合 nProbe 套件,可收集 Cisco 的 NetFlow 資料!
操作流程:
  1. 安裝 ntopng 的 repository 套件:
    # cd /etc/yum.repos.d/
    # wget http://packages.ntop.org/centos-stable/ntop.repo -O ntop.repo
    
  2. 安裝 epel 的 repository 相闗套件:
    # wget http://packages.ntop.org/centos-stable/epel-7.repo -O epel.repo
    
  3. 安裝 ntopng 的套件:
    # yum erase zeromq3
    # yum clean all
    # yum update
    # yum install pfring n2disk nprobe ntopng ntopng-data cento
    # yum install pfring-drivers-zc-dkms
    
  4. 安裝 ntopng 的套件:
    # systemctl enable redis.service
    # systemctl start redis.service
    # systemctl enable ntopng.service
    # systemctl start ntopng.service
    
  5. 修改 ntopng 的設定檔:
    # echo "--community" >> /etc/ntopng/ntopng.conf
    
  6. 修改防火牆設定:
    # firewall-cmd --permanent --add-port=6379/tcp
    # firewall-cmd --permanent --add-port=3000/tcp
    # firewall-cmd --reload
    
  7. 利用瀏覽器登入系統:
    # firefox http://localhost:3000 &
    (登入帳密 admin/admin)
    
  • http://www.ovirt.org/download/
  • https://hostingwikipedia.com/setup-ntop-centos-7/
  • http://www.shunze.info/forum/thread.php?threadid=1881&boardid=3&sid=6a0352223f535ea7cdcad64847ee7e82
  • http://blog.ilc.edu.tw/blog/index.php?op=printView&articleId=687452&blogId=25793
  • http://figaro.neo-info.net/?p=1411
  • https://www.plixer.com/blog/netflow/how-to-configure-windows-nprobe-to-send-netflow/
  • http://jingyan.baidu.com/article/3a2f7c2e2ca70026afd6110d.html

在 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年8月18日 星期五

在 CentOS / RHEL 7 上架設 GitLab 服務(二)

學習目標:
  • 安裝 GitLab 套件,以利程式開發的版本控制!
  • 本次實作安裝的套件為 Community 版本!
  • 本次實作,按照 GitLab 官方流程安裝,所有的套件放置目錄位置,將與平常的 CentOS7/RHEL7 不同!
  • 相關目錄位置,將列表於文章後面!
操作流程:
  1. 安裝必要的相關套件:
    # yum install curl policycoreutils openssh-server openssh-clients -y
    # systemctl enable sshd
    # systemctl start sshd
    # yum install postfix
    # systemctl enable postfix
    # systemctl start postfix
    # firewall-cmd --permanent --add-service=http
    # systemctl reload firewalld
    
  2. 安裝必要的相關套件:
    # curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
    # yum install gitlab-ce -y
    
  3. 設定以及啟動 GitLab 服務:
    # gitlab-ctl reconfigure
    
  4. 利用 firefox ,登入 GitLab 服務:
    # fireflx http://127.0.0.1
    
  5. PS:第一次登入時,會被要求修改 root 密碼!修改密碼後,再以 root 帳號登入即可!
參考文獻:
  • https://about.gitlab.com/installation/#centos-7

2017年7月15日 星期六

在 CentOS / RHEL7 上架設 OpenHPC 系統

學習目標:
  • 利用 OpenHPC 套件,架設高效能電腦(HPC)!
  • OpenHPC 官方示範架構圖:

  • 共要準備六部主機:SMS 一部,Compute Node 四部,以及一部 Storage Server 提供 iSCSI 或是 NFS 儲存空間!各主機準備兩張網卡!
  • 練習用網路設定參數:compute network 172.16.1.0/24,storage network 10.1.1.0/24

操作流程:
  1. 將各主機安裝 CentOS 7.3 版本的 Linux 作業系統!
    • 需要安裝 EPEL 軟體庫套件!

  2. 預先設定 SMS 主機上相關系統參數:
    # vim /etc/hosts
    172.16.1.1 sms sms.example.com
    172.16.1.11 node1 node1.example.com
    172.16.1.12 node2 node2.example.com
    172.16.1.13 node3 node3.example.com
    172.16.1.14 node4 node4.example.com
    10.1.1.100 storage storage.example.com
    
    # hostnamectl set-hostname sms.example.com
    # setenforce 0
    # systemctl disable firewalld
    # systemctl stop firewalld
    
  3. 在 SMS 主機上,安裝 OpenHPC 上的軟體庫套件:
    # yum install http://build.openhpc.community/OpenHPC:/1.3/CentOS_7/x86_64/ohpc-release-1.3-1.el7.x86_64.rpm
    
  4. 可在 SMS 主機上,安裝 OpenHPC 套件的模版 Scripts,加快其他節點安裝:
    # yum -y install docs-ohpc
    (稍後再談...)
    
  5. 在 SMS 主機上,安裝 OpenHPC 準備需要使用的套件:
    # yum -y install ohpc-base ohpc-warewulf
    
  6. 為了時間同步,在 SMS 主機上須要啟動 ntpd 服務:
    # systemctl enable ntpd.service
    # echo "server time.google.com" >> /etc/ntp.conf
    # systemctl restart ntpd
    
  7. 在 SMS 主機上,安裝資源管理套件:
    # yum -y install pbspro-server-ohpc
    
  8. 在 SMS 主機上,安裝 InfiniBand 支援套件:
    # yum -y groupinstall "InfiniBand Support"
    # yum -y install infinipath-psm
    # systemctl start rdma
    
  9. 在 SMS 主機上,設定其他相關設定檔:
    #vim /etc/warewulf/provision.conf
    network device = enp0s8
    
    # vim /etc/xinetd.d/tftp
    disable = no
    
    # systemctl restart xinetd
    # systemctl enable mariadb
    # systemctl restart mariadb
    # systemctl enable httpd
    # systemctl restart httpd
    
  10. 在 SMS 主機上,建立初始基本系統影像檔(for compute node):
    # export CHROOT=/opt/ohpc/admin/images/centos7.3
    # wwmkchroot centos-7 $CHROOT
    
  11. 在 SMS 主機上,增加 OpenHPC 元件給 client 端使用:
    # yum -y --installroot=$CHROOT install ohpc-base-compute
    # cp -p /etc/resolv.conf $CHROOT/etc/resolv.conf
    # yum -y --installroot=$CHROOT install pbspro-execution-ohpc
    
    # vim $CHROOT/etc/pbs.conf
    PBS_SERVER=sms.example.com
    
    # chroot $CHROOT opt/pbs/libexec/pbs_habitat
    
    # vim $CHROOT/var/spool/pbs/mom_priv/config
    $clienthost sms
    
    # echo "\$usecp *:/home /home" >> $CHROOT/var/spool/pbs/mom_priv/config
    # chroot $CHROOT systemctl enable pbs
    
    # yum -y --installroot=$CHROOT groupinstall "InfiniBand Support"
    # yum -y --installroot=$CHROOT install infinipath-psm
    # chroot $CHROOT systemctl enable rdma
    
    # yum -y --installroot=$CHROOT install ntp
    
    # yum -y --installroot=$CHROOT install kernel
    
    # yum -y --installroot=$CHROOT install lmod-ohpc
    
  12. 在 SMS 主機上,客製化系統設定:
    # wwinit database
    # wwinit ssh_keys
    # cat ~/.ssh/cluster.pub >> $CHROOT/root/.ssh/authorized_keys
    
    # echo "172.16.1.1:/home /home nfs nfsvers=3,rsize=1024,wsize=1024,cto 0 0" >> $CHROOT/etc/fstab
    # echo "172.16.1.1:/opt/ohpc/pub /opt/ohpc/pub nfs nfsvers=3 0 0" >> $CHROOT/etc/fstab
    # echo "/home *(rw,no_subtree_check,fsid=10,no_root_squash)" >> /etc/exports
    # echo "/opt/ohpc/pub *(ro,no_subtree_check,fsid=11)" >> /etc/exports
    # exportfs -a
    # systemctl restart nfs-server
    # systemctl enable nfs-server
    
    # chroot $CHROOT systemctl enable ntpd
    # echo "server 172.16.1.1" >> $CHROOT/etc/ntp.conf
    
  13. 在 SMS 主機上,增加鎖定記憶體限制設定:
    # perl -pi -e 's/# End of file/\* soft memlock unlimited\n$&/s' /etc/security/limits.conf
    # perl -pi -e 's/# End of file/\* hard memlock unlimited\n$&/s' /etc/security/limits.conf
    
    # perl -pi -e 's/# End of file/\* soft memlock unlimited\n$&/s' $CHROOT/etc/security/limits.conf
    # perl -pi -e 's/# End of file/\* hard memlock unlimited\n$&/s' $CHROOT/etc/security/limits.conf
    
  14. 在 SMS 主機上,增加 BeeGFS 檔案系統:
    # wget -P /etc/yum.repos.d https://www.beegfs.io/release/beegfs_6/dists/beegfs-rhel7.repo
    # yum -y install kernel-devel gcc
    # yum -y install beegfs-client beegfs-helperd beegfs-utils
    
    # perl -pi -e "s/^buildArgs=-j8/buildArgs=-j8 BEEGFS_OPENTK_IBVERBS=1/" \
    /etc/beegfs/beegfs-client-autobuild.conf
    
    # /opt/beegfs/sbin/beegfs-setup-client -m sms.example.com
    # systemctl start beegfs-helperd
    # systemctl start beegfs-client (要安裝 kernel-devel 才會正常啟動!另外,也可能需要自行架設 BeeGFS 儲存節點)
    
    # wget -P $CHROOT/etc/yum.repos.d https://www.beegfs.io/release/beegfs_6/dists/beegfs-rhel7.repo
    # perl -pi -e "s/^buildEnabled=true/buildEnabled=false/" $CHROOT/etc/beegfs/beegfs-client-autobuild.conf
    # rm -f $CHROOT/var/lib/beegfs/client/force-auto-build
    # chroot $CHROOT systemctl enable beegfs-helperd beegfs-client
    # cp /etc/beegfs/beegfs-client.conf $CHROOT/etc/beegfs/beegfs-client.conf
    # echo "drivers += beegfs" >> /etc/warewulf/bootstrap.conf
    
參考文獻
  • https://github.com/openhpc/ohpc/releases/download/v1.3.1.GA/Install_guide-CentOS7-Warewulf-PBSPro-1.3.1-x86_64.pdf
  • https://www.beegfs.io/wiki/BasicConfigurationFirstStartup

2017年6月14日 星期三

在 CentOS / RHEL 7 上架設 GitLab 服務(一)

學習目標:
  • 安裝 GitLab 套件,以利程式開發的版本控制!
操作流程:
  1. 安裝 GitLab 相關套件:
    # yum install curl openssh-server
    # systemctl enable sshd
    # systemctl start sshd
    # yum install postfix
    # systemctl enable postfix
    # systemctl start postfix
    # rpm -ivh https://packages.endpoint.com/rhel/7/os/x86_64/endpoint-repo-1.7-1.x86_64.rpm
    # yum install git
    # yum groupinstall "Development Tools"
    # yum install readline-devel zlib-devel libffi-devel libyaml-devel openssl-devel sqlite-devellibicu-devel
    # curl -sSL https://rvm.io/mpapis.asc | gpg --import -
    # curl -L get.rvm.io | bash -s stable
    # source /etc/profile.d/rvm.sh
    # rvm reload
    # rvm requirements run
    # rvm list known
    # rvm install 2.3.3
    # rvm use 2.3.3 --default
    # wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
    # yum install yarn
    # rpm --import https://mirror.go-repo.io/centos/RPM-GPG-KEY-GO-REPO
    # curl -s https://mirror.go-repo.io/centos/go-repo.repo | tee /etc/yum.repos.d/go-repo.repo
    # yum install golang
    # yum install nodejs
    # firewall-cmd --permanent --add-service=http
    # firewall-cmd --permanent --add-service=smtp
    # firewall-cmd --permanent --add-service=ssh
    # systemctl reload firewalld
    
  2. 新增 git 使用者:
    #useradd -s /sbin/nologin -c "GitLab" git
    
  3. 安裝資料庫,並且設定資料庫內容:
    # yum install postgresql postgresql-server postgresql-devel postgresql-contrib
    (其餘細節,請參考...)
    # su - postgres
    $psql
    postgres=# CREATE USER git CREATEDB;
    postgres=# ALTER USER git WITH PASSWORD 'git';
    postgres=# CREATE DATABASE gitlabhq_production OWNER git;
    postgres=# \c gitlabhq_production;
    gitlabhq_production=# CREATE EXTENSION IF NOT EXISTS pg_trgm;
    gitlabhq_production=#\q
    $ psql -U git -h 127.0.0.1 -d gitlabhq_production
    gitlabhq_production=> SELECT true AS enabled
    FROM pg_available_extensions
    WHERE name = 'pg_trgm'
    AND installed_version IS NOT NULL;
    
    PS:如果是自行安裝的 postgreSQL 套件,請記得製作超連結:ln -s /usr/pgsql-9.4/bin/p* /usr/local/bin
  4. 取得 GitLab 套件:
    # mkdir /opt/git
    # cd /opt/git
    # git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 9-2-stable gitlab
    # chown -R git /opt/git
    
  5. 編修相關設定檔:
    # cd /opt/git/gitlab
    # rvm install ruby-2.4.0
    # rvm use ruby-2.4.0 --default
    # cp config/gitlab.yml.example config/gitlab.yml
    # vim config/gitlab.yml
    (修改下列設定...)
    host: test.example.com
    email_enabled: false
    (存檔離開...)
    # cp config/secrets.yml.example config/secrets.yml
    # chmod 0600 config/secrets.yml
    # chown -R git log/
    # chown -R git tmp/
    # chmod -R u+rwX,go-w log/
    # chmod -R u+rwX tmp/
    # chmod -R u+rwX tmp/pids/
    # chmod -R u+rwX tmp/sockets/
    # sudo -u git -H mkdir public/uploads/
    # chmod 0700 public/uploads
    # chmod -R u+rwX builds/
    # chmod -R u+rwX shared/artifacts/
    # chmod -R ug+rwX shared/pages/
    # sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
    # nproc
    # vim config/unicorn.rb
    (修改相對應的路徑,以及下列參數...)
    worker_processes 4
    # sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb
    # sudo -u git -H git config --global core.autocrlf input
    # sudo -u git -H git config --global gc.auto 0
    # sudo -u git -H git config --global repack.writeBitmaps true
    # sudo -u git -H cp config/resque.yml.example config/resque.yml
    # vim config/resque.yml
    (修改 redis server 相關設定,請參考...)
    # chmod 777 /tmp/redis.socket
    #sudo -u git cp config/database.yml.postgresql config/database.yml
    #vim config/database.yml
    (修改連線帳密資料...)
    sudo -u git -H chmod o-rwx config/database.yml
    
  6. 整合 Ruby 的設定,並進行安裝:
    # su - git
    $ cd /opt/git/gitlab
    $ gem uninstall bundler
    $ gem install bundler:1.14.6
    $ bundle install -j4 --deployment --without development test mysql aws kerberos
    
  7. 安裝與檢查 git-shell 設定:
    $ bundle exec rake gitlab:shell:install REDIS_URL=unix:/tmp/redis.sock RAILS_ENV=production SKIP_STORAGE_VALIDATION=true
    
    or
    $ bundle exec rake gitlab:shell:install REDIS_URL=redis://127.0.0.1:6379 AUTH=xxxxxx RAILS_ENV=production SKIP_STORAGE_VALIDATION=true
    
    $ vim /opt/git/gitlab-shell/config.yml
    
  8. 安裝與檢查 gitlab-workhorse 設定:
    $ bundle exec rake "gitlab:workhorse:install[/opt/git/gitlab-workhorse]" RAILS_ENV=production
    
  9. 初始化資料庫設定:
    $ vim /opt/git/gitlab/vendor/bundle/ruby/2.3.0/gems/redis-3.3.3/lib/redis/client.rb
    (修改 redis 的連線 ip , db , 以及密碼!)
    $ bundle exec rake gitlab:setup RAILS_ENV=production GITLAB_ROOT_PASSWORD=git GITLAB_ROOT_EMAIL=root@localhost
    (記得回答 yes)
    
  10. 保存重要的密碼設定:
    $ cp config/secrets.yml /home/git/
    
  11. 部署重要的初始設定:
    # cp /opt/git/gitlab/lib/support/init.d/gitlab /etc/init.d/gitlab
    # vim /etc/init.d/gitlab
    (修改路徑目錄)
    # cp /opt/git/gitlab/lib/support/init.d/gitlab.default.example /etc/default/gitlab
    # vim /etc/default/gitlab
    (修改路徑目錄)
    # chkconfig --add gitlab
    # chkconfig --list gitlab
    
  12. 安裝 Gitaly:
    # su - git
    $ bundle exec rake "gitlab:gitaly:install[/opt/git/gitaly]" RAILS_ENV=production
    $ chmod 0700 /opt/git/gitlab/tmp/sockets/private
    $ chown git /opt/git/gitlab/tmp/sockets/private
    $ cd /opt/git/gitaly
    $ vim config.toml
    
  13. 設定轉檔功能:
    $ exit
    # cp /opt/git/gitlab/lib/support/logrotate/gitlab /etc/logrotate.d/gitlab
    # vim /etc/logrotate.d/gitlab
    (修改路徑目錄)
    
  14. 確認應用程式目前的狀態:
    # su - git
    $ bundle exec rake gitlab:env:info RAILS_ENV=production
    
  15. 其它設定:
    $ yarn install --production --pure-lockfile
    $ bundle exec rake gitlab:assets:compile RAILS_ENV=production NODE_ENV=production
    bundle exec rake gettext:compile RAILS_ENV=production
    
  16. 啟動 GitLab 服務:
    # service gitlab start
    
  17. 使用 Nginx 服務:
    # yum install -y nginx
    # cp /opt/git/gitlab/lib/support/nginx/gitlab /etc/nginx/conf.d/gitlab.conf
    # vim /etc/nginx/conf.d/gitlab.conf
    (修改至符合的項目...)
    

    參考文獻:
  • https://about.gitlab.com/installation/
  • https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md
  • https://docs.gitlab.com/ce/install/installation.html
  • https://www.theshell.guru/install-ruby-2-4-centos-7-3/
  • https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/installation.md

2017年6月7日 星期三

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

學習目標:
  • 安裝 LibreNMS 套件,以利監控系統狀況!
操作流程:
  1. 安裝 DataBase 相關套件:
    # yum install mariadb-server mariadb
    # systemctl start mariadb
    # firewall-cmd --permanent --add-service=mysql
    # firewall-cmd --reload
    # mysql_secure_installation
    
  2. 建立 DataBase 內容:
    # mysql -uroot -p
    MariaDB [(none)]> CREATE DATABASE librenms CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    MariaDB [(none)]> CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'password';
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
    MariaDB [(none)]> FLUSH PRIVILEGES;
    MariaDB [(none)]> exit;
    
  3. 設定 DataBase 相關參數內容:
    # vim /etc/my.cnf.d/server.cnf
    (只新增必要的..)
    [mysqld]
    innodb_file_per_table=1
    sql-mode=""
    :
    
  4. 設定 DataBase 啟動:
    # systemctl enable mariadb  
    # systemctl restart mariadb
    
  5. 安裝與設定 Apache 與相關套件:
    # yum install epel-release
    # rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    # rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
    
    # yum install php70w php70w-cli php70w-gd php70w-mysql php70w-snmp php70w-pear php70w-curl php70w-common httpd net-snmp mariadb ImageMagick jwhois nmap mtr rrdtool MySQL-python net-snmp-utils cronie php70w-mcrypt fping git
    
    # pear install Net_IPv4-1.3.4
    # pear install Net_IPv6-1.2.2b2
    
  6. 編修 php.ini 時區設定值:
    #vim /etc/php.ini
    date.timezone = "Asia/Taipei"
    
  7. 在系統上新增 LibreNMS 的專屬使用者:
    # useradd librenms -d /opt/librenms -M -r
    # usermod -a -G librenms apache
    
  8. 下載 LibreNMS 套件:
    # cd /opt
    # git clone https://github.com/librenms/librenms.git librenms
    
  9. 設定 Web 站台相關設定:
    #cd /opt/librenms
    #mkdir rrd logs
    #chmod 775 rrd
    # vim /etc/httpd/conf.d/librenms.conf
    <VirtualHost *:80>
      DocumentRoot /opt/librenms/html/
      ServerName  librenms.example.com
      CustomLog /opt/librenms/logs/access_log combined
      ErrorLog /opt/librenms/logs/error_log
      AllowEncodedSlashes NoDecode
      <Directory "/opt/librenms/html/">
        Require all granted
        AllowOverride All
        Options FollowSymLinks MultiViews
      </Directory>
    </VirtualHost>
  10. 更動 SELinux 設定:
    # yum install policycoreutils-python
    # semanage fcontext -a -t httpd_sys_content_t '/opt/librenms/logs(/.*)?'
    # semanage fcontext -a -t httpd_sys_rw_content_t '/opt/librenms/logs(/.*)?'
    # restorecon -RFvv /opt/librenms/logs/
    # setsebool -P httpd_can_sendmail=1
    # setsebool -P httpd_can_network_connect=1
    
  11. 防火牆設定:
    # firewall-cmd --zone=public --add-service=http
    # firewall-cmd --permanent --zone=public --add-service=http
    
  12. 啟動 Apache:
    # systemctl enable httpd
    # systemctl restart httpd
    
  13. 利用 firefox 打開網頁:
    (網址:http://librenms.example.com)
    PS:少裝一些套件時,網頁提醒你要 run ./scripts/composer_wrapper.php install --no-dev 時,請切回文字介面執行提示的指令!

    按下圖中的 Next Stage
  14. 輸入資料庫帳密:

    需要稍等一些時間,讓程式自動建立資料庫內相關表格!

    若無任何錯誤,即可新增使用者!
  15. 使用者新增之後,即可產生設定檔:

  16. 接下來的 config.php 檔案內容,可以手動建立:
    放置目錄 /opt/librenms/

    手動新增檔案後,即可按下 finish !
  17. 接下來即可登入系統:
  18. 登入畫面:

  19. 手動修正 config.php 內容:
    #vim /opt/librenms/config.php
    (加入下列設定...)
    $config['fping'] = "/sbin/fping";
    
  20. 修改 SNMP 設定參數:
    #cp /opt/librenms/snmpd.conf.example /etc/snmp/snmpd.conf
    #vim /etc/snmp/snmpd.conf
    (把 RANDOMSTRINGGOESHERE 改成你想要的名稱...)
    com2sec readonly  default    public # 原來是 RANDOMSTRINGGOESHERE
    syslocation Taipei, Taiwan # 原來是 Rack, Room, Building, City, Country [GPSX,Y]
    syscontact root@localhost # 原來是 Your Name 
    
  21. LibreNMS 官方很貼心的準備了一支 Shell Scripts 程式,用來偵作業系統平台,可裝可不裝:
    #curl -o /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro
    #chmod +x /usr/bin/distro
    #systemctl restart snmpd
    #systemctl enable snmpd
    
  22. LibreNMS 官方也很貼心的準備了一個工作排程Shell Scripts 程式:
    #cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms
    
  23. LibreNMS 官方也很貼心的準備了一個轉檔的Shell Scripts 程式,用來轉出 logs 目錄下的記錄檔:
    #cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms
    
  24. 最後一些小動作:
    #chown -R librenms:librenms /opt/librenms
    #systemctl enable httpd mariadb
    #cd /opt/librenms
    #./validate.php
    
  25. 完成後,記得登入,將 localhost 作為你預設的第一個監控的主機!

    參考文獻:
  • http://docs.librenms.org/Installation/Installation-CentOS-7-Apache/#db-server
  • http://jasontools.blogspot.tw/2017/06/librenms-networkmanager-good.html
  • https://docs.librenms.org/Installation/Installation-CentOS-7-Nginx/

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
    

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
    

2017年1月25日 星期三

在 CentOS7/RHEL7 上,安裝 POWA 監控 PostgreSQL Server !!

設定目標:
  • 利用 POWA 套件,監控 PostgreSQL Server!
    • 請參考這一篇的設定,架設好 PostgreSQL Server!
PostgreSQL Server 受監控端設定流程:
  1. 利用 yum 安裝 POWA 以及相關需要的套件:
    #yum -y install powa_95 pg_qualstats95 pg_stat_kcache95 hypopg_95
    
  2. 修改 postgresql.conf 檔案:
    #su - postgres
    $vim /var/lib/pgsql/9.5/data/postgresql.conf
    (修改下列參數:)
    shared_preload_libraries = 'pg_stat_statements,powa,pg_stat_kcache,pg_qualstats'
    :
    :
    (存檔後,離開!)
    $ exit
    
  3. 重新啟動 PostgreSQL Server:
    #systemctl restart postgresql-9.5
    
  4. 切換至 postgres 使用者:
    #su - postgres
    
  5. 建立 powa 資料庫:
    $ psql postgres -c "CREATE DATABASE powa"
    
  6. 登入到 powa 資料庫,建立該有的延伸功能:
    $ psql
    postgres=# \connect powa
    You are now connected to database "powa" as user "postgres".
    powa=#CREATE EXTENSION pg_stat_statements;
    CREATE EXTENSION
    powa=# CREATE EXTENSION btree_gist;
    CREATE EXTENSION
    powa=# CREATE EXTENSION powa;
    CREATE EXTENSION
    powa=# CREATE EXTENSION pg_qualstats;
    CREATE EXTENSION
    powa=# CREATE EXTENSION pg_stat_kcache;
    CREATE EXTENSION
    powa=# CREATE EXTENSION hypopg;
    CREATE EXTENSION
    powa=# \q
    
    若是使用 PostgreSQL Cluster 功能,則必須加裝 hypopg 延伸套件!
  7. 授予 powa 使用者,以管理者身份使用 powa 資料庫:
    $ psql -c "CREATE ROLE powa SUPERUSER LOGIN PASSWORD 'powa'"
    

PostgreSQL Server 主控端設定流程:
  1. (略過步驟...)
  2. 利用 yum 安裝 Powa-Web 以及相關需要的套件:
    #yum -y install powa_95-web
    
  3. 修改 Powa-Web 設定檔,加入受監控端 PostgreSQL Server 相關資料:
    #vim /etc/powa-web.conf
    servers={
      'main': {
        'host': '127.0.0.1',
        'port': '5432',
        'username': 'powa',
        'password': 'yourpassword',
        'database': 'powa',
        'query': {'client_encoding': 'utf8'}
      },
      'allinone': {
        'host': '192.168.1.1',
        'port': '5432',
        'database': 'powa',
        'query': {'client_encoding': 'utf8'}
      }
      (可繼續追加設定於此.....)
    }
    cookie_secret="SECRET_STRING"
    
  4. 重新啟動 Web 服務:
    #systemctl restart httpd
    

參考文獻:
  • http://powa.readthedocs.io/en/latest/quickstart.html#install-powa-archivist-on-the-postgresql-instance-on-rhel-centos

2017年1月9日 星期一

在 CentOS7/RHEL7上,為 Nginx 加上 Perl CGI 模組

設定提要:
  • Nginx Web Server 以及 php 套件安裝,請參考這一篇
快速設定流程:
  1. 安裝 EPEL 套件:
    #yum install epel-release
    #yum upgrade epel-release
    
  2. 利用 YUM ,安裝 fcgiwrap 以及 spawn-fcgi:
    #yum install fcgiwrap spawn-fcgi
    
  3. 設定系統參數,方便 spawn-fcgi 運用:
    #vim /etc/sysconfig/spawn-fcgi
    FCGI_SOCKET=/var/run/fcgiwrap.socket
    FCGI_PROGRAM=/usr/sbin/fcgiwrap
    FCGI_USER=nginx
    FCGI_GROUP=nginx
    FCGI_EXTRA_OPTIONS="-M 0700"
    OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"
    
  4. 啟動 spawn-fcgi 服務:
    #systemctl enable spawn-fcgi
    #systemctl start spawn-fcgi
    
  5. 修改 Nginx 設定檔內容:
    #
    server {
    (中間其他設定omit)
    location /monitorix/ {
            alias /var/lib/monitorix/www/;
            index index.html;
        }
        location /monitorix-cgi/ {
            gzip off;
            alias /var/lib/monitorix/www/cgi/;
            fastcgi_pass unix:/var/run/fcgiwrap.socket;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        }
    (中間其他設定omit)
    }
    
  6. 重新啟動 nginx 服務:
    #systemctl restart nginx
    
  7. 寫一測試檔案:
    #vim /var/share/nginx/html/test.cgi
    #!/usr/bin/perl -w
    print "Content-type: text/html\n\n";    
    print "<html><head><title>Hello World!! </title></head>\n";
    print "<body><h1>Hello world</h1>
    </body></html>\n";
    
  8. 設定權限:
    #chmod 0755 /var/share/nginx/html/test.cgi
    #chown nginx.nginx /var/share/nginx/html/test.cgi
    
  9. 利用 firefox 測試!(http://localhost/test.cgi)

參考文獻:
  • https://www.howtoforge.com/serving-cgi-scripts-with-nginx-on-centos-6.0-p2

2017年1月8日 星期日

在 CentOS7/RHEL7 上,安裝 Monitorix 監控系統

設定提要:
  • Apache Web 以及 php 套件安裝,請參考這一篇
  • Mariadb (或是MySQL) Server 安裝,請參考這一篇
快速設定流程:
  1. 安裝 EPEL 套件:
    #yum install epel-release
    #yum upgrade epel-release
    
  2. 利用 YUM ,安裝 monitorix:
    #yum install monitorix
    
  3. 啟動 monitorix:
    #systemctl start monitorix
    
  4. 利用 firefox ,打開 http://localhost:8080 網頁即可!

  5. 監控多部主機:
  6. 在每一個被監控主機上,安裝 moitorix 套件:
    #yum install epel-release
    #yum upgrade epel-release
    #yum install monitorix
    #systemctl start monitorix
    
  7. 在監控主機上,設定 multihost 項目參數:
    #vim /etc/monitorix/monitorix.conf
    <multihost>
            enabled = y
            footer_url = y
            graphs_per_row = 2
            remotehost_list = Server1, Server2
            <remotehost_desc>
                 0 = http://www.example.com,/monitorix,/monitorix-cgi
                 1 = http://192.168.0.100:8080,/,/
            </remotehost_desc>
    
            groups = n
            remotegroup_list = My Group
            <remotegroup_desc>
                  0 = Server1, Server2
            </remotegroup_desc>
    </multihost>
    
  8. 在監控主機上,重新啟動 monitorix:
    #systemctl restart monitorix
    

參考文獻:
  • http://www.monitorix.org/doc-redhat.html

2017年1月5日 星期四

在 CentOS7/RHEL7上,架設 Care2X 站台!

設定提要:
  • Apache Web 以及 php 套件安裝,請參考這一篇
  • Mariadb (或是MySQL) Server 安裝,請參考這一篇
快速設定流程:
  1. 在網頁目錄下,下載 Care2X 軟體:
    #cd /var/www/html
    #mkdir care2x
    #git clone https://github.com/care2x/care2x
    
  2. 修正權限設定:
    #chown -R apache.apache care2x
    #chmod o=--- -R care2x/
    
  3. 利用瀏覽器,進行設定:
    #firefox http://localhost/care2x
    
    出現下圖畫面:

  4. 出現系統設定相關參數頁面:

  5. 為符合設定,所以先在 MariaDB 內,新增資料庫與使用者:
    #mysql -u root -p
    MariaDB [(none)]> CREATE DATABASE care2x;
    MariaDB [(none)]> CREATE USER 'care2x'@'localhost' IDENTIFIED BY 'FuckingYourMotherPassword';
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON care2x.* TO 'care2x'@'localhost';
    MariaDB [(none)]> exit;
    

  6. 填入資料後,可以按「continue...」(記得要按 「Save」):

  7. 出現檢查表,請設法將所有項目變成綠色勾:
  8. 為符合設定,加裝 php 延伸套件:
    #yum install php-imap calendar php-adodb
    #mkdir cache
    #chmod 777 cache
    #chown apache.apache cache
    
    修改完後,檢查表請按「Restart Installation」,進行重新填入資料的動作...
  9. 修正後,檢查表應全部為綠色勾:

  10. 同意 License :

  11. 資料庫內的資料表產生中:

  12. 選定ICD(流行疾病分類)資料表格式,本站選用 ICD10 EN:

  13. 資料表新增中:

  14. 再選一次資料表,本站選擇OPS31 ES:

  15. 資料表新增中:

  16. (接下來,又要選呀?好吧,就每一項都選........):

  17. PS:按完,才知道自已有病....只要按「Done」就好啦~~~~
  18. 按 Done,結束:

  19. 安裝完成的畫面:

  20. 完成後的網站畫面:

  • https://github.com/care2x/care2x