2017年3月31日 星期五

Ubuntu 系統下的 fail2ban postfix filter rule

  只要有安裝郵件服務器,就一定會有人想要借用,所以安裝一套稍微可避免借用的軟體是一定要的。

Linux 的 fail2ban 應該是大家很常用的一套,裡面己經內建很多 filter。
但有時還是會有不符合 filter 而無法防止有人一直嘗試,所以就要自己調整一下了。

以下是 postfix filter :

failregex = \[<HOST>\]: SASL (PLAIN|LOGIN) authentication failed
            lost connection after (AUTH|UNKNOWN|EHLO) from (.*)\[<HOST>\]
            reject: RCPT from (.*)\[<HOST>\]: 550 5.1.1
            reject: RCPT from (.*)\[<HOST>\]: 450 4.7.1
            reject: RCPT from (.*)\[<HOST>\]: 554 5.7.1
            reject: RCPT from (.*)\[<HOST>\]: 504 5.5.2 (.*) Helo command rejected: need fully-qualified hostname
            reject: RCPT from (.*)\[<HOST>\]:\d+: 550
            warning: Illegal address syntax from (.*)\[<HOST>\] in RCPT command
            HANGUP after (.*) from \[<HOST>\]:\d+ in tests after SMTP handshake

不一定符合大家用,但可以參考看看。

修改後利用:

fail2ban-regex /var/log/mail.log /etc/fail2ban/filter.d/postfix.conf

測試設定的 filter 是否生效。

2017年3月30日 星期四

CentOS 7 PowerDNS 安裝、設定


在 Linux 的平台上的 DNS 軟體 BIND 還是最多人使用,但有時想換個不同的 DNS 軟體嘗試看看 PowerDNS 是個不錯的選擇。安裝後,它利用瀏覽器來新增、刪除 DNS 的主機記錄。


一、PowerDNS 伺服器安裝設定
1.啟動 EPEL 套件:
yum install -y epel-release.noarch

2.安裝 mariadb,並設定開機啟動 mariadb
yum install -y mariadb-server mariadb

systemctl start mariadb.service
systemctl enable mariadb.service

3.設定 mariadb
mysql_secure_installation

4.安裝 PowerDNS 套件
yum install -y pdns pdns-backend-mysql

5.登入 mariadb Server,並建立一個db名稱為 powerdns
mysql -u root -p

建立 powerdns 資料庫:
MariaDB [(none)]> CREATE DATABASE powerdns CHARACTER SET utf8;

新增 db user: powerdns, password: pAssw0rd 並授予 powerdns 資料庫權限
MariaDB [(none)]> GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'pAssw0rd';
MariaDB [(none)]> GRANT ALL ON powerdns.* TO 'powerdns'@'powerdns' IDENTIFIED BY 'pAssw0rd';
MariaDB [(none)]> FLUSH PRIVILEGES;

6.新增 powerdns DB tables 及為提高PowerDNS 查詢資料庫的速度,可以為 TABLE 建立一些必要的索引

use powerdns;

CREATE TABLE users (
id INTEGER NOT NULL AUTO_INCREMENT,
username VARCHAR(64) NOT NULL,
`password` VARCHAR(128) NOT NULL,
fullname VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
description TEXT NOT NULL,
perm_templ TINYINT NOT NULL,
active TINYINT NOT NULL,
use_ldap TINYINT NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

START TRANSACTION;
INSERT INTO users ( id, username, `password`, fullname, email, description, perm_templ, active, use_ldap )
VALUES ( 1, 'admin', '', 'Administrator', 'admin@example.net', 'Administrator with full rights.', 1, 1, 0 );
COMMIT;

CREATE TABLE perm_items (
id INTEGER NOT NULL AUTO_INCREMENT,
name VARCHAR(64) NOT NULL,
descr TEXT NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

START TRANSACTION;
INSERT INTO perm_items ( id, name, descr ) VALUES ( 41, 'zone_master_add', 'User is allowed to add new master zones.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 42, 'zone_slave_add', 'User is allowed to add new slave zones.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 43, 'zone_content_view_own', 'User is allowed to see the content and meta data of zones he owns.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 44, 'zone_content_edit_own', 'User is allowed to edit the content of zones he owns.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 45, 'zone_meta_edit_own', 'User is allowed to edit the meta data of zones he owns.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 46, 'zone_content_view_others', 'User is allowed to see the content and meta data of zones he does not own.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 47, 'zone_content_edit_others', 'User is allowed to edit the content of zones he does not own.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 48, 'zone_meta_edit_others', 'User is allowed to edit the meta data of zones he does not own.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 49, 'search', 'User is allowed to perform searches.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 50, 'supermaster_view', 'User is allowed to view supermasters.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 51, 'supermaster_add', 'User is allowed to add new supermasters.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 52, 'supermaster_edit', 'User is allowed to edit supermasters.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 53, 'user_is_ueberuser', 'User has full access. God-like. Redeemer.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 54, 'user_view_others', 'User is allowed to see other users and their details.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 55, 'user_add_new', 'User is allowed to add new users.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 56, 'user_edit_own', 'User is allowed to edit their own details.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 57, 'user_edit_others', 'User is allowed to edit other users.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 58, 'user_passwd_edit_others', 'User is allowed to edit the password of other users.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 59, 'user_edit_templ_perm', 'User is allowed to change the permission template that is assigned to a user.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 60, 'templ_perm_add', 'User is allowed to add new permission templates.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 61, 'templ_perm_edit', 'User is allowed to edit existing permission templates.' );
COMMIT;

CREATE TABLE perm_templ (
id INTEGER NOT NULL AUTO_INCREMENT,
name VARCHAR(128) NOT NULL,
descr TEXT NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

START TRANSACTION;
INSERT INTO perm_templ ( id, name, descr )
VALUES ( 1, 'Administrator', 'Administrator template with full rights.' );
COMMIT;

CREATE TABLE perm_templ_items (
id INTEGER NOT NULL AUTO_INCREMENT,
templ_id INTEGER NOT NULL,
perm_id INTEGER NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

START TRANSACTION;
INSERT INTO perm_templ_items ( id, templ_id, perm_id )
VALUES ( 1, 1, 53 );
COMMIT;

CREATE TABLE zones (
id INTEGER NOT NULL AUTO_INCREMENT,
domain_id INTEGER NOT NULL,
owner INTEGER NOT NULL,
`comment` TEXT,
zone_templ_id INTEGER NOT NULL,
PRIMARY KEY (id),
KEY owner (owner)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE zone_templ (
id INTEGER NOT NULL AUTO_INCREMENT,
name VARCHAR(128) NOT NULL,
descr TEXT NOT NULL,
owner INTEGER NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE zone_templ_records (
id INTEGER NOT NULL AUTO_INCREMENT,
zone_templ_id INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
`type` VARCHAR(6) NOT NULL,
content VARCHAR(255) NOT NULL,
ttl INTEGER NOT NULL,
prio INTEGER NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE records_zone_templ (
domain_id INTEGER NOT NULL,
record_id INTEGER NOT NULL,
zone_templ_id INTEGER NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE migrations (
version VARCHAR(255) NOT NULL,
apply_time INTEGER NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE domains (
id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
PRIMARY KEY (id)
) Engine=InnoDB;

CREATE UNIQUE INDEX name_index ON domains (name);

這裡的 records table 網路上有很多文章介紹時,都少了一個 disabled 欄位。造成查詢本機的 DNS 設定時無法解析本機的 DNS 記錄。

CREATE TABLE records (
id INT AUTO_INCREMENT,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(64000) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
disabled TINYINT(1) DEFAULT 0,
ordername VARCHAR(255) BINARY DEFAULT NULL,
auth TINYINT(1) DEFAULT 1,
PRIMARY KEY (id)
) Engine=InnoDB;

CREATE INDEX nametype_index ON records (name,type);
CREATE INDEX domain_id ON records (domain_id);
CREATE INDEX recordorder ON records (domain_id, ordername);

CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB;

CREATE TABLE comments (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) NOT NULL,
comment VARCHAR(64000) NOT NULL,
PRIMARY KEY (id)
) Engine=InnoDB;

CREATE INDEX comments_domain_id_idx ON comments (domain_id);
CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);

CREATE TABLE domainmetadata (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(32),
content TEXT,
PRIMARY KEY (id)
) Engine=InnoDB;

CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);

CREATE TABLE cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
content TEXT,
PRIMARY KEY(id)
) Engine=InnoDB;

CREATE INDEX domainidindex ON cryptokeys (domain_id);

CREATE TABLE tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id)
) Engine=InnoDB;

CREATE UNIQUE INDEX namealgoindex ON tsigkeys (name, algorithm);

MariaDB [powerdns]> quit;

7.配置 powerdns.conf 設定檔,在底部新增下列參數
修改 launch=bind ---> launch=gmysql
並增加:
gmysql-host=localhost
gmysql-user=powerdns
gmysql-password=pAssw0rd
gmysql-dbname=powerdns
#query-logging=yes
allow-recursion=127.0.0.1, 172.16.10.0/24, 192.168.0.0/16      #設定允許遞迥查詢內部網段
recursor=8.8.8.8      #設定處理遞迥查詢的 DNS 伺服器

8.啟動 powerdns,並設定開機啟動
systemctl start pdns.service
systemctl enable pdns.service


二、PowerDNS WEB管理套件安裝設定
9.安裝 PowerDNS admin 所需的相依套件
yum install -y httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext

10.安裝 PowerDNS admin 所需的 php pear 指令套件
yum install -y php-pear-DB php-pear-MDB2-Driver-mysql

11.啟動 apache,並設定開機啟動
systemctl start httpd.service
systemctl enable httpd.service

12.下載 PowerDNS admin source 安裝程式
cd /var/www/html

13.解壓縮下載的 PowerDNS source檔
tar -xvf poweradmin-2.1.7.tgz
ln -sf poweradmin-2.1.7 poweradmin
chown -R apache:apache /var/www/html/poweradmin/

14.利用瀏覽器開始設定 PowerDNS,網址列輸入
http://192.168.60.47/poweradmin/install

15.PowerDNS 設定 step1,選擇使用的語系(設定畫面沒有繁中可選)

16.PowerDNS 設定 step 2,宣告會清除剛才新增的 PowerDNS 資料庫內所有資料,但不會刪除 tables
直接按 --> go to step 3

17.PowerDNS 設定 step 3,輸入 db username、password、db name

18.PowerDNS 設定 step 4,新增一個使用者帳號,用於 Poweradmin 資料同步

19.PowerDNS 設定 step 5,新增使用者

這裡要使用 SSH 連線工具登入 PowerDNS 主機上的 mariadb:
mysql -u root -p

新增同步、更新、刪除 DNS 資料的帳號:
MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE ON powerdns.* TO 'powermain'@'localhost' IDENTIFIED BY 'pAssw0rd';

完成後,按 --> go to step 6

20.PowerDNS 設定 step 6,使用 SSH 連線工具登入 PowerDNS 主機,手動在 PowerDNS 新增一個 config.inc.php,
cd /var/www/html/powerdns/inc
mv config-me.inc.php config.inc.php
vi config.inc.php

依下列的訊息,修改 config.inc.php 檔案:
內容:
$db_host                = 'localhost';
$db_port                = '';
$db_user                = 'powermain';
$db_pass                = 'pAssw0rd';
$db_name                = 'powerdns';
$db_type                = 'mysql';
$db_layer               = 'PDO';

$session_key            = '40b8z0lJd}VntE_aiDlt27_dsnzK+AoyTth{_$*Yder@sd';

$iface_lang             = 'en_EN';

$dns_hostmaster         = 'powerdns.ddns.net';
$dns_ns1                = 'ns1.powerdns.ddns.net';
$dns_ns2                = 'ns2.powerdns.ddns.net ';

完成後按 go to step 7 就可以關閉設定畫面。

21.啟用 dynamic DNS 更新權限
cd /var/www/html/poweradmin
cp install/htaccess.dist .htaccess

22.修改 httpd.conf,開啟 mod_rewrite
vi /etc/httpd/conf.modules.d/00-base.conf
確認 Apache 有載入 mod_rewrite 模組:
LoadModule rewrite_module modules/mod_rewrite.so

23.刪除 install 目錄
rm -rf /var/www/html/poweradmin/install/

24.登入 PowerDNS 管理介面
http://192.168.60.47/poweradmin

登入 PowerDNS 管理網頁,username 欄位輸入 admin
密碼就是前面 step 3 設定的密碼。


三、建立正解區域
25.新增 master zone




26.新增 master zone 後,選擇 <List zones>


繼續新增 DNS record

27.若要刪除一個 ZONE 或者 是一筆 DNS 記錄,只要按 垃圾筒圖示,即可將之刪除


四、建立反解區域
28.一樣選擇 <Add master zone>

29.新增一台反解記錄

30.建立正解主機記錄時,順便新增反解記錄

、建立 slave DNS
依照 master DNS 安裝的套件安裝後,修改 master、slave DNS 主機的 pdns.conf 設定檔

額外修改 pdns.conf 設定檔
master DNS:
pdns.conf --> master=yes

slave DNS:
pdns.conf --> slave=yes
再新增一個slave zone,就會自動從 master DNS 同步


PowerAdmin 管理頁面修改 zone type 類型:

六、測試設定
測試 PowerDNS 設定
[root@powerdns ~]# ss -ntupl

[root@powerdns ~]# dig @127.0.0.1 powerdns.ddns.net ns

[root@powerdns ~]# dig @localhost ns hinet.net









2017年3月24日 星期五

MikroTik RouterOS block attack

以下的 Policy 是引用網路上網友的設定,微調符合自己的需求。
Policy 順序依 comment 欄位的說明。

/ip firewall filter
add chain=forward action=drop protocol=tcp src-address-list=login_blacklist dst-port=80 comment="drop login forcers 1"
add chain=input action=drop protocol=tcp src-address-list=login_blacklist dst-port=22 comment="drop login forcers 1"

add chain=forward action=jump jump-target=login_check connection-state=new protocol=tcp src-address-list=!Local_LAN dst-port=80 comment="drop login forcers 2"
add chain=input action=jump jump-target=login_check connection-state=new protocol=tcp src-address-list=!Local_LAN dst-port=22 comment="drop login forcers 2"

add chain=login_check action=add-src-to-address-list connection-state=new protocol=tcp src-address-list=login_stage3 address-list=login_blacklist address-list-timeout=1d dst-port=80,22 comment="drop login forcers 3"

add chain=login_check action=add-src-to-address-list connection-state=new protocol=tcp src-address-list=login_stage2 address-list=login_stage3 address-list-timeout=1m dst-port=80,22 comment="drop login forcers 4"

add chain=login_check action=add-src-to-address-list connection-state=new protocol=tcp src-address-list=login_stage1 address-list=login_stage2 address-list-timeout=1m dst-port=80,22 comment="drop login forcers 5"

add chain=login_check action=add-src-to-address-list connection-state=new protocol=tcp address-list=login_stage1 address-list-timeout=1m dst-port=80,22 comment="drop login forcers 6"

它的作法是限制來源 IP 在短時間建立多條連線。



2017年3月22日 星期三

CISCO kron 排程自動備份+TFTP Server

CISCO 設備新增備份排程:

mis_c2960#configure config
mis_c2960(config)#kron policy-list Backup_config      #設定排程任務名稱
mis_c2960(config-kron-policy)#cli write      #以免備份不完全,先將 running-config 的設定寫入一次
mis_c2960(config-kron-policy)#cli show run | redirect tftp://192.168.1.1/c2960.cfg     #設定要執行的指令及TFTP Server 位址、檔名
mis_c2960(config-kron-policy)#exit

設定排程執行時間:
mis_c2960(config)#kron occurrence Backup_config at 23:00 Sun recurring      #每個星期日執行
mis_c2960(config-kron-occurrence)#policy-list Backup_config      #啟動排程
mis_c2960(config-kron-occurrence)#end

寫入剛才設定:
mis_c2960#write

查詢排程工作:
mis_c2960(config-kron-occurrence)#show kron schedule

如果要移除備份排程:
mis_c2960#configure config
mis_c2960(config)#no kron policy-list Backup_config
mis_c2960(config)#no kron occurrence Backup_config at 23:00 Sun recurring




TFTP Server:


Windows TFTP 軟體:


Windows 排程工作,在 CISCO 備份前搬移之前的 config 檔案,並刪除過期的 config 檔案:
moveConfig.bat
內容:
SET src_folder=C:\TFTP_Data
SET dst_folder=C:\TFTP_Data\backup
SET time=%date:~0,4%%date:~5,2%%date:~8,2%
SET delday=30

for /f %%a IN ('dir "%src_folder%\*.cfg" /b') do move %src_folder%\%%a %dst_folder%\%time%-%%a

forfiles -p %dst_folder% -s -m *.cfg /D -%delday% /C "cmd /c del @PATH" > nul 2>&1






Linux TFTP server 套件:

yum install -y tftp tftp-server xinetd


修改 /etc/xinetd/tftp 設定及TFTP 資料目錄:
service tftp
{
        socket_type             = dgram
        protocol                  = udp
        wait                         = yes
        user                         = root
        server                      = /usr/sbin/in.tftpd
        server_args             = -s /tftpboot -c #-c 允許上傳檔案
        disable                    = no  #enable Service
        per_source              = 11
        cps                          = 100 2
        flags                       = IPv4
}

建立 TFTP 檔案目錄:
mkdir -p /tftpboot/backup
chmod o+w /tftpboot

systemctl enable xinetd
systemctl start xinetd

因為CISCO的 kron 建立備份時,無法自動命名,所以在 Linux 上建立一個搬移備份檔的script:
vi moveConfig.sh
內容:
#!/bin/bash

Date=$(date +"%Y%m%d")
#config檔備份目錄
FileDir=/tftpboot
#舊config檔搬移目錄
BackupDir=/tftpboot/backup
#過期的檔案
DelFile=30

for file in `ls $FileDir`;
do
    if [ -f ${FileDir}/${file} ]; then
       mv ${FileDir}/${file} ${BackupDir}/${Date}-${file} && echo "${Date} Backup success." >> ${BackupDir}/backup.log
    fi
done

#刪除超過設定天數的檔案
find $BackupDir -type f -daystart -mtime +$DelFile -exec rm -rf {} \; > /dev/null 2>&1

設定 moveConfig.sh 檔案執行權限:
chmod +x moveConfig.sh

在 CISCO 設備備份 config 前,執行搬移舊 config 檔案排程:
50 22 * * * /bin/sh /root/moveConfig.sh > /dev/null 2>&1




2017年3月21日 星期二

Windows 遠端桌面工具連線出現<認證無效>

之前 Windows 的遠端桌面連線工具使用上沒有什麼問題,,

某一天它開始出現<認證無效>這個訊息了!!!

請出 Google 尋找原因及解決方法:
原因:
連線無法用Credential Security Support Provider (CredSSP) 進行驗證

不知為什麼會無法使用,反正某一天就突然發生了。

解決方法 1:
連線時關閉使用 CredSSP 進行認證; 將遠端桌面要連線的主機另存新檔(RDP檔)
在該 RDP 檔上按右鍵,選開啟檔案,利用<記事本>編輯檔案,
在第一行新增:
enablecredsspsupport:i:0

存檔後關閉。
之後連線時就會直接連到遠端電腦的登入畫面,再輸入帳號、密碼(每次都要輸入..............)。


解決方法 2:
使用 Terminals 工具,比每次出現 <認證無效>再輸入密碼省事。
不同的工具總是要熟悉一下,安裝的過程就依步驟輸入完成後,開啟軟體新增連線主機。
  
調整連線後的視窗大小:

連線後再把左側的 Favorites 小視窗收起就是全視窗畫面。








2017年3月17日 星期五

CentOS7 架設 RHCS (High-Availability Server)

環境架構:
c7-clustera    192.168.60.156
c7-clusterb    192.168.60.157
fencing          192.168.60.159
iSCSI            192.168.60.160

軟體說明:
corosync 套件:5405/UDP,5405/UDP
pcs 套件:有分 pcs 指令與 pcsd 服務套件!pcsd 使用 2224/TCP
pacemaker 套件:cluster 主要套件!使用 3121/TCP
dlm 套件:使用21064/TCP ,存取GFS2遠端檔案系統
fence-agents-all 套件:與 fence 主機連線


Cluster node 主機 SSH 設定:
利用 ssh 管理及設定:
c7-clustera 上產生 ssh key:
ssh-keygen -t dsa -f ~/.ssh/id_dsa -N ""

複製 id_dsa.pub 為 authorized_keys
cp ~/.ssh/id_dsa.pub ~/.ssh/authorized_keys

複製 .ssh 資料夾到其他節點:
scp -r ~/.ssh c7-clusterb:

確認可以用 ssh 直接連線,不需輸入密碼:
ssh c7-clusterb -- 'uname -n'

設定 Cluster node 主機:
每台節點 安裝相關套件:
yum install -y pcs corosync pacemaker psmisc
yum install policycoreutils-python    #如果 SELinux 沒有關閉,在後續設定 DRBD 軟體權限時會用到
補充:
psmisc 是協助管理 /proc 目錄程序
policycoreutils-python 是 semanage 指令輔助工具

在 /etc/hosts 加入各個節點的對應:
192.168.60.156 c7-clustera
192.168.60.157 c7-clusterb
192.168.60.159 fencing

每台節點 關閉SELinux、防火牆設定:
setenforce 0
systemctl disable firewalld.service
systemctl stop firewalld.service
iptables --flush

每台節點 啟動 pcsd 服務:
systemctl start pcsd.service pacemaker.service
systemctl enable pcsd.service pacemaker.service

每台節點 變更 hacluster 密碼:
echo redhat1 | passwd --stdin hacluster
ssh c7-clusterb -- 'echo redhat1 | passwd --stdin hacluster'

在任一台節點,進行身份驗證:
pcs cluster auth c7-clustera c7-clusterb

在任一台節點,建立 c7-clustera,c7-clusterb cluster 群(cluster 名稱: c7-cluster):
pcs cluster setup --start --name c7-cluster c7-clustera c7-clusterb

在任一台節點,啟動 c7-cluster 所有節點:
pcs cluster start --all

每台節點 確認 Corosync 版本:
corosync-cfgtool -s
corosync-cmapctl | grep members
pcs status corosync

確認 Pacemaker 是否執行中:
ps axf

pcs status --full

檢查錯誤訊息:
journalctl | grep -i 'error'
除了沒有配置STONITH相關的訊息外,正確設定時不會有錯誤訊息。

進行下一步時再檢查一次設定是否OK:
crm_verify -L -V    #會出現 STONITH 的 error,是因為啟用 Pacemaker 中的 STONITH ,但尚未設定。這裡暫時先關閉它。

在配置 STONITH 前,Cluster 無法啟動 Resource,這裡先關閉 STONITH,後面的步驟再設定啟用它:
pcs property set stonith-enabled=false
crm_verify -L -V

測試環境是兩台主機,目前在Cluster 裡没有監控的 policy 主機時,設定值設為 ignore
pcs property set no-quorum-policy=ignore

為兩台主機設定一個 (VIP) Resource 設定:
pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.60.170 cidr_netmask=32 op monitor interval=30s      #設定一個 cluster IP 192.168.60.170

補充:
查詢可用的資源參數:
pcs resource standards
pcs resource providers
pcs resource agents ocf:heartbeat

檢查設定 Cluster IP Resource 後的狀態:
pcs status

測試在發生問題時,是否會切換主機:
pcs cluster standby c7-clustera    #恢復指令 pcs cluster unstandby c7-clustera
或者
pcs cluster stop c7-clustera

到另一節點觀察 Cluster 狀況:
pcs status

設定 resource-stickiness (讓維護主機的服務暫時保留在手動移轉到其他節點的主機上),防止 Resource 在 Recovery 後移動:
[root@c7-clustera ~]# pcs resource defaults resource-stickiness=100
[root@c7-clustera ~]# pcs resource defaults
resource-stickiness: 100

補充:
取消 resource-stickiness 設定:
pcs resource defaults resource-stickiness=0
或者建立Resource有指定meta resource-stickiness時,則可用:
pcs resource meta ClusterIP resource-stickiness=0

安裝 Apache Server:
yum install -y httpd
重要:
安裝後不要 enable httpd 服務。主要在透過 Cluster 軟體管理服務不應該由系統管理。
但是,在將它增加到 Cluster 之前,手動啟動服務,驗證它是否有效,然後再次停止它。
否則新增的 WebSite 監控 Resource 將無法啟動。

防火牆如未關閉需開啟允許 http 服務:
firewall-cmd --permanent --add-service=http
flrewall-cmd --reload

每台節點 建立一個測試的網頁:
cat <<-END >/var/www/html/index.html
 <html>
 <body>My Test Site - $(hostname)</body>
 </html>
END

每台節點 建立一個監控 Apache 運作狀況的設定檔:
cat <<-END >/etc/httpd/conf.d/status.conf
 <Location /server-status>
    SetHandler server-status
    Require local
 </Location>
END

重啟 Apache 服務:
systemctl restart httpd.service
測試連線:
wget -O - http://localhost/server-status
或者
curl http://localhost/server-status

systemctl stop httpd.service      #測試上面的監控設定後,必須將 http 服務停止

配置監控 Apache Web Site 的 Cluster Resource:
pcs resource create WebSite ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status" op monitor interval=1min
pcs status


調整 Resource 啟動、停止、監控的時間(預設:20秒):
[root@c7-clustera ~]# pcs resource op defaults timeout=240s
[root@c7-clustera ~]# pcs resource op defaults
timeout: 240s

確認 Resource 執行在某一台主機上:
WebSite 運作於 Cluster 架構上,必須綁定一個連線 IP,在這裡設定 WebSite 綁定在 ClusterIP (VIP:192.168.60.170) 
(WebSite、ClusterIP 是之前建立的 Resource 名稱)
pcs constraint colocation add WebSite with ClusterIP INFINITY
pcs constraint
pcs constraint colocation

綁定 IP 後,利用瀏覽器連線,己經可以看到剛才建立的測試網頁:

補充:
如 Constraint 設定錯誤,移除不需要的綁定:
pcs constraint colocation remove <source_resource> <target_resource>
pcs constraint colocation remove WebSite ClusterIP

確保 Resource 按順序啟動和停止:
pcs constraint order ClusterIP then WebSite    #ClusterIP 的 resource 恢復時,觸發 WebSite 的 resource 也恢復運作

pcs constraint

設定 WebSite 預設啟動的節點(假設某一台的硬體資源較好,可以設定優先啟用服務在該台主機):
pcs constraint location WebSite prefers c7-clustera=50
pcs constraint

查看節點的順序權值分數:
crm_simulate -sL

強制手動移轉 WebSite Resource 到 c7-clusterb:
pcs constraint location WebSite prefers c7-clusterb=INFINITY
pcs constraint
pcs status

當完成維護時,可以刪除剛才手動移轉到 c7-clusterb 的 resource 綁定,首先取得綁定的 ID:
pcs constraint --full

例如刪掉 c7-clusterb:
pcs constraint remove location-WebSite-c7-clusterb-INFINITY
可以看到 Resource 還是停留在 c7-clusterb,是因為在前面的步驟有設定 pcs resource defaults resource-stickiness=100 讓服務停留在移轉後的主機上。
補充: 取消 resource-stickiness 設定 pcs resource defaults resource-stickiness=0 或者前面建立Resource有指定meta resource-stickiness時 則可用 pcs resource meta ClusterIP resource-stickiness=0


抄寫資料庫使用 DRDB
二台節點主機上匯入 GPG-KEY:

二台節點主機 安裝 DRDB 套件:
yum install -y kmod-drbd84 drbd84-utils

備註(我是用 CentOS 7.3。這個 bug 在 7.1 之後不知解決了沒?  我還是先下載修正程式了,因為文章作者有說明這個修正程式在軟體更新時會被取代。):
CentOS 7.1 附帶的 drbd84-utils 版本在 Pacemaker 中有一個錯誤。
在修訂之前,可從下列位址下載受影響的 script:
curl -o /usr/lib/ocf/resource.d/linbit/drbd 'http://git.linbit.com/gitweb.cgi?p=drbd-utils.git;a=blob_plain;f=scripts/drbd.ocf;h=cf6b966341377a993d1bf5f585a5b9fe72eaa5f2;hb=c11ba026bbbbc647b8112543df142f2185cb4b4b'

SELinux 設定 DRBD 權限(未關閉 SELinux):
semanage permissive -a drbd_t

防火牆未關閉須設定:
c7-clustera:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.60.156" port port="7789" protocol="tcp" accept'
firewall-cmd --reload

c7-clusterb:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.60.157" port port="7789" protocol="tcp" accept'
firewall-cmd --reload

台節點主機 建一個 LVM 磁區來測試:
新增一個空的磁碟做 LVM:
fdisk -l
fdisk /dev/sdb

每台節點主機 建 LV 空間來測試使用:
pvcreate /dev/sdb1
vgcreate testvg /dev/sdb1
lvcreate --name drbd-demo --size 1G testvg

配置 DRBD 資料庫:
cat <<END >/etc/drbd.d/wwwdata.res
resource wwwdata {
 protocol C;
 meta-disk internal;
 device /dev/drbd1;
 syncer {
  verify-alg sha1;
 }
 net {
  allow-two-primaries;
 }
 on c7-clustera {
  disk   /dev/testvg/drbd-demo;
  address  192.168.60.156:7789;
 }
 on c7-clusterb {
  disk   /dev/testvg/drbd-demo;
  address  192.168.60.157:7789;
 }
}
END
備註:
allow-two-primaries;    #可以兩台主機同時掛載

初始化台節點主機上的 DRBD 資料庫:
drbdadm create-md wwwdata

modprobe drbd
drbdadm up wwwdata

設定其中一台節點主機為 primary:
drbdadm primary --force wwwdata

如果立即檢查狀態,會看到正在同步的狀態:
cat /proc/drbd

確認二台節點主機 上的 DRBD 狀態:
cat /proc/drbd


格式化 Primary DRBD 磁區(Secondary 不需要):
mkfs.xfs /dev/drbd1

掛載資料夾:
mount /dev/drbd1 /mnt

建一個測試網頁:
cat <<-END >/mnt/index.html
 <html>
  <body>My Test Site - DRBD</body>
 </html>
END

建立測試網頁後,缷載 /mnt:
umount /dev/drbd1

設定 DRBD Cluster 配置:
pcs cluster cib drbd_cfg

建立 Resource 並建立一個 Clone 資源,以允許資源同時在兩台 DRBD 運作:
pcs -f drbd_cfg resource create WebData ocf:linbit:drbd drbd_resource=wwwdata op monitor interval=60s
pcs -f drbd_cfg resource master WebDataClone WebData master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

檢查 WebDtat Resource 狀況:
pcs -f drbd_cfg resource show


提交更新 drbd_cfg 配置的設定:
pcs cluster cib-push drbd_cfg

觀察設定:
pcs status

載入 DRBD 模組(在 CentOS 7 系統安裝 DRBD 似乎不會自動載入 DRBD 模組):
echo drbd > /etc/modules-load.d/drbd.conf

DRBD Split-Brain 處理:
Split-Brain 發生原因是兩台 DRBD 斷開了連接,都以 Primary 身份來運行。當再連接後發現對方也是 primary 狀態,就會立刻自行又開連接。
手動恢復前,確認要保留哪一台的資料後,到另一台 DRBD 主機上執行下列指令:
pcs resource disable WebFS
pcs resource disable WebSite
drbdadm secondary wwwdata    #將該台 DRBD 設定為 Secondary
drbdadm disconnect wwwdata
drbdadm -- --discard-my-data connect wwwdata
確認是否正常連線,若依然是 StandAlone 則需手動執行下列指令連線:

drbdadm connect wwwdata

設定 Cluster 的 Filesystem,並設定 WebFS 必須在 Apache 啟動時先啟動:
已經有一個工作的DRBD設備,現在需要建一個掛載它的檔案系統:
pcs cluster cib fs_cfg
pcs -f fs_cfg resource create WebFS Filesystem device="/dev/drbd1" directory="/var/www/html" fstype="xfs"    #將運作中的 /dev/drbd1 掛載到 /var/www/html
pcs -f fs_cfg constraint colocation add WebFS with WebDataClone INFINITY with-rsc-role=Master
pcs -f fs_cfg constraint order promote WebDataClone then start WebFS

告訴 Cluster,Apache需要與檔案系統在相同的機器上運行,並且它必須在Apache可以啟動之前處於活動狀態:
pcs -f fs_cfg constraint colocation add WebSite with WebFS INFINITY
pcs -f fs_cfg constraint order WebFS then WebSite

檢查更新後的配置:
pcs -f fs_cfg constraint

pcs -f fs_cfg resource show

確認提交設定 fs_cfg 配置的設定:
pcs cluster cib-push fs_cfg
pcs status

測試 Cluster Failover 移轉:
pcs cluster standby c7-clusterb
或者
pcs cluster stop c7-clusterb

觀察移轉狀況:
pcs status

恢復 c7-clustera standby 狀態:
pcs cluster unstandby c7-clustera
pcs status --full


設定 Fence Server (STONITH: Shoot The Other Node In The Head,  aka. fencing)
保護數據,避免非預期同一 Cluster 主機同時重覆訪問同一資料庫而造成損壞。

設定 Fence Server 管理所有節點:
補充:
fence_xvm 需要 cpu 支持 kvm
檢查 CPU 是否支援KVM:
egrep -c '(vmx|svm)' /proc/cpuinfo
如果輸出是 0,以下 Fence Server 的部份就不用做了

以下的步驟設定是成功了,但運作上還是有問題。可能真的是 CPU 不支援 KVM 或漏了哪個步驟吧?
留待日後再測試。

網路環境
主機名稱
ip 位址
fincing
eth0: 192.168.60.159/24 (和 virbr0 設定為 brige)
virbr0: 192.168.122.1/24
c7-clustera
192.168.60.156/24
c7-clusterb
192.168.60.157/24
fence_xvm_vip
192.168.60.180/24

Fence server 網路卡介面 ifcfg-eth0 設定修改為:
內容:
DEVICE=eth0
ONBOOT=yes
DOMAIN=tw.company
SEARCH=tw.company
#NM_CONTROLLED=no
HWADDR=00:0c:29:d8:82:17
BRIDGE=virbr0

新增網路卡介面 ifcfg-virbr0 設定修改為:
內容:
DEVICE="virbr0"
TYPE=BRIDGE
ONBOOT=yes
BOOTPROTO=static
IPADDR="192.168.60.159"
NETMASK="255.255.255.0"
GATEWAY="192.168.60.254"
DNS1="192.168.60.253"

網路 brige 功能需要開啟 multicast querier:
暫時開啟:
echo 1 > /sys/class/net/virbr0/bridge/multicast_querier
固定開啟:
touch /etc/sysconfig/network-scripts/vnet_querier_enable
chmod 755 /etc/sysconfig/network-scripts/vnet_querier_enable
vi /etc/sysconfig/network-scripts/vnet_querier_enable
內容:
#!/bin/sh
if [[ $INTERFACE == virbr* ]]; then
    /bin/echo 1 > /sys/devices/virtual/net/$INTERFACE/bridge/multicast_querier
fi

建立 udev 規則檔案:
vi /etc/udev/rules.d/61-virbr-querier.rules
內容:
ACTION=="add", SUBSYSTEM=="net", RUN+="/etc/sysconfig/network-scripts/vnet_querier_enable"

檢查是否有載入 KVM 模組:
lsmod | grep 'kvm'


Fence server 安裝相關套件:
yum install -y fence-virt fence-virtd fence-virtd-libvirt fence-virtd-multicast fence-virtd-serial virt-manager

安裝套件後,查看 節點狀態:
virsh list

Fence Server 上產生 fence_xvm.key 金鑰:
mkdir -p /etc/cluster
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=1k count=4

在 c7-clustera,c7-clusterb 建立 /etc/cluster
ssh c7-clustera -- 'mkdir -p /etc/cluster'
ssh c7-clusterb -- 'mkdir -p /etc/cluster'

複製 fence_xvm.key 到 c7-clustera,c7-clusterb 主機內的 /etc/cluster
scp /etc/cluster/fence_xvm.key c7-clustera:/etc/cluster
scp /etc/cluster/fence_xvm.key c7-clusterb:/etc/cluster

配置fence_virtd,fence_virt.conf 設定檔:
fence_virtd -c

產生的 fence 設定檔位置:
/etc/fence_virt.conf

啟動 fence Service:
systemctl start fence_virtd.service
systemctl enable fence_virtd.service

防火牆設定(fence 主機與各節點都要開啟):
確認是否有安裝 firewalld:
rpm -q firewalld
如何有:
firewall-cmd --permanent --add-port=1229/tcp
firewall-cmd --permanent --add-port=1229/udp
firewall-cmd --reload

顯示連線狀況:
virsh list

在 c7-clustera,c7-clusterb 節點設定 fence_xvm stonith resource:
安裝 fence-virt:
yum install -y fence-agents-all fence-virt

在 c7-clustera,c7-clusterb,fencing 主機上驗證設定:
fence_xvm -o list      #正確配置時,會顯示所有節點狀態

若出現下列訊息,表示前面的網路 brige 設定有問題:
# fence_xvm -o list
Timed out waiting for response
Operation failed

確認 c7-clustera,c7-clusterb 的 stonith-enabled 為 true 的狀態:
pcs property show stonith-enabled

如果為 false 狀態,使用下列指令啟用 stonith-enabled:
pcs property set stonith-enabled=true

在 c7-clustera 建立一個 fencd_xvm_fc 的 resource,並加入 fencd_xvm_group 群組:
pcs stonith create fence_xvm_fc fence_xvm key_file=/etc/cluster/fence_xvm.key --group fence_xvm_group

查看設定:
pcs stonith

在 c7-clustera 建立一個 fencd_xvm_vip 的 IPaddr2 resource,並加入 fencd_xvm_group 群組:
pcs resource create fence_xvm_vip IPaddr2 ip=192.168.60.180 cidr_netmask=24 --group fence_xvm_group

查看設定狀態:
pcs status

重啟 c7-clustera:
stonith_admin --reboot c7-clustera      #正確配置時,c7-clustera 應已經重新開機
pcs status

補充:
新增、移除 Cluster 主機:
新增:
在 c7-clustera 上將主機加入現有的 cluster:
pcs cluster auth -u hacluster -p hacluster c7-clusterc
pcs cluster node add c7-clusterc

c7-clusterc 驗證其他節點 hacluster 密碼:
pcs cluster auth -u hacluster -p redhat1

c7-clusterc 上設定重啟後可啟動 cluster sevice:
pcs cluster enable
pcs cluster start
pcs status

在 c7-clustera 上設定 fencing 加入 c7-clusterc:
pcs stonith create fence_c7-clusterc fence_xvm pcmk_host_list="c7-clusterc" multicast_address="255.0.0.12" key_file="/etc/cluster/fence_xvm.key"
或者
pcs stonith create fence_c7-clusterc fence_virt port="c7-clusterc" pcmk_host_list="c7-clusterc" ipaddr="fencing"

檢查 cluster 狀態:
pcs stonith show

fence server 重啟 fence_virtd 服務:
systemctl restart fence_virtd.service

重啟 c7-clusterc 確認服務正常運作:
reboot
pcs status

移除:
pcs cluster node remove c7-clusterc
移除 Cluster 主機後,有些 Resource 需要重設定。



採用 iSCSI 磁碟安裝 GFS2 Cluster 檔案系統:
使用 SELinux 時會有額外的檔案屬性,使用 GFS2 檔案系统時好關閉 SELinux,否則會降低其效能。

iSCSI 伺服器:
我的例子有新增一台提供 iSCSI 服務的伺服器,讓兩台 cluster 主機掛載同一共享資料夾:。
參考之前的步驟:

也可以不要用 iSCSI Server。
利用 cluster 主機剩餘的硬碟空間(或 VMWare 新增一個空磁碟)。

GFS2 Cluster 節點設定:
設定 no-quorum-policy :
pcs property set no-quorum-policy=freeze

安裝 GFS2 相關套件:
GFS2 (Global File System) 全球檔案系統
DLM(Distributed Lock Manager)鎖定管理程式

yum install -y gfs2-utils lvm2-cluster dlm

c7-clustera、c7-clusterb 上啟用 Cluster DLM:
lvmconf --enable-cluster
ssh c7-clusterb -- 'lvmconf --enable-cluster'

c7-clustera、c7-clusterb 確認 locking_type = 3:
grep 'locking_type' /etc/lvm/lvm.conf | grep -v '#'
結果為:
locking_type = 3

建立一個名稱為 gfs2_dlm 的 controld resource 並且 clone:
pcs resource create gfs2_dlm systemd:dlm op monitor interval=30s clone interleave=true ordered=true

建立一個名稱為 gfs2_clvmd 的 clvm resource 並且 clone:
pcs resource create gfs2_clvmd clvm op monitor interval=30s clone interleave=true ordered=true

觀察設定狀況:
pcs status

置 DLM CLVMD cluster resource 屬性:
pcs constraint order start gfs2_dlm-clone then gfs2_clvmd-clone

pcs constraint colocation add gfs2_clvmd-clone with gfs2_dlm-clone
pcs constraint colocation

c7-clustera、c7-clusterb 修改 /etc/lvm/lvm.conf:
[root@c7-clustera ~]# egrep 'volume_list' /etc/lvm/lvm.conf | grep -v '#'
    volume_list = [ "gfs2_vg", "testvg" ]    #gfs2_vg 是等下要建的 VG, testvg 是前面 DRBD 所建立的 VG

在 c7-clustera 上建立一個 LVM 或其他格式的磁區給 GFS2 使用:
說明:
1.這裡是利用 iSCSI 方式使用同一個共享的磁區。

建置 LVM 磁區:
參考之前做的步驟:

我在建立 LV 磁區時有可能會遇到一個錯誤,原因是節點間不會同步 PV、VG 資訊,可能是 lvm.conf 的檔案未修改
網路上還有其他原因,有的是說要用 clvmd -R 讓 PV、VG 同步資訊,也有要用 multipath -r 讓不同主機資料同步。



格式化 GFS2 磁區:
mkfs.gfs2 -p lock_dlm -t c7-cluster:gfs2fs -j 2 /dev/gfs2_vg/gfs2_lv

確認兩台節點所掛載的 iSCSI 磁區 UUID 是相同的:
blkid | grep '/dev/sdc1'

建立一個 GFS2 掛載目錄:
mkdir /gfs2_data
ssh c7-clusterb -- 'mkdir /gfs2_data'

建立一個 gfs2_res 的 Filesystem Resource:
pcs resource create gfs2_res Filesystem device="/dev/gfs2_vg/gfs2_lv" directory="/gfs2_data/" fstype="gfs2" options="noatime,nodiratime" op monitor interval=10s clone interleave=true

設定 GFS2 DLM resource 的啟動、停止順序:
pcs constraint order start gfs2_clvmd-clone then gfs2_res-clone

驗證 GFS2 掛載 iSCSI 目錄:


DRBD 重新配置為GFS2 檔案系統:
pcs resource disable WebFS
如果 WebSite 的運作在 c7-clusterb,而在 c7-clustera 執行下列指令:
[root@c7-clustera ~]# mkfs.gfs2 -p lock_dlm -j 2 -t c7-cluster:WebSite /dev/drbd1
則會出現下列錯誤訊息:
/dev/drbd1: Read-only file system

[root@c7-clusterb ~]# mount /dev/drbd1 /mnt
[root@c7-clusterb ~]# cat <<-END >/mnt/index.html
<html>
<body>My Test Site - GFS2</body>
</html>
END
[root@c7-clusterb ~]# umount /dev/drbd1
[root@c7-clusterb ~]# drbdadm verify wwwdata
[root@c7-clusterb ~]# pcs resource show WebFS

[root@c7-clusterb ~]# pcs resource update WebFS fstype=gfs2
[root@c7-clusterb ~]# pcs resource show WebFS

[root@c7-clusterb ~]# pcs constraint colocation add WebFS with gfs2_dlm-clone INFINITY
[root@c7-clusterb ~]# pcs constraint order gfs2_dlm-clone then WebFS
[root@c7-clusterb ~]# pcs resource enable WebFS
測試:


Clone Resource 配置:
因為無法同時訪問兩個 Cluster IP address,所以沒有必要讓這兩個 IP Active。所以設定一個 Clone IP address 綁定到 ClusterIP(VIP) Resource:
配置 loadbalance resource:
[root@c7-clustera ~]# pcs cluster cib loadbalance_cfg
[root@c7-clustera ~]# pcs -f loadbalance_cfg resource clone ClusterIP clone-max=2 clone-node-max=2 globally-unique=true
[root@c7-clustera ~]# pcs -f loadbalance_cfg constraint


現在設定resource如何決定哪些請求由哪些主機處理。這裡指定clusterip_hash參數。sourceip 的取值表示著進入的來源IP地址將被 hash
[root@c7-clustera ~]# pcs -f loadbalance_cfg resource update ClusterIP clusterip_hash=sourceip

提交確認 loadbalance_cfg 配置:
[root@c7-clustera ~]# pcs cluster cib-push loadbalance_cfg
[root@c7-clustera ~]# pcs status

查看兩台主機的網路介面會發現各綁定了 VIP address : 192.168.60.170


Clone Filesystem 和 Apache Resource:
現在有一個 Cluster Filesystem,可以將請求 Loadbalance 要求綁定到一個共享的 VIP address,配置 Cluster 讓兩個節點都掛載檔案系統並回應Web請求。
[root@c7-clustera ~]# pcs cluster cib active_cfg
[root@c7-clustera ~]# pcs -f active_cfg resource clone WebFS
[root@c7-clustera ~]# pcs -f active_cfg resource clone WebSite
[root@c7-clustera ~]# pcs -f active_cfg constraint

通知Cluster允許將二台主機提升為DRBD Primary:
[root@c7-clustera ~]# pcs -f active_cfg resource update WebDataClone master-max=2

提交確認 Clone resource active_cfg 配置:
[root@c7-clustera ~]# pcs cluster cib-push active_cfg
[root@c7-clustera ~]# pcs resource enable WebFS
[root@c7-clustera ~]# pcs resource






Nutanix平台虛擬機(UBUNTU),利用Veeam備份移轉至VMware平台,安裝套件、系統更新出現錯誤

 mount: /var/lib/grub/esp: special device /dev/disk/by-id/scsi-SNUTANIX_VDISK_NFS_4_0_7672_2d41cbaa_025e_4fac_849c_9e620eff5bff-part1 does n...