1. 程式人生 > 其它 >網路檔案共享服務、企業級排程器lvs

網路檔案共享服務、企業級排程器lvs

一、實現基於MYSQL驗證的vsftpd虛擬使用者訪問

主機:兩臺,一臺為FTP伺服器,一臺為MySQL伺服器

1.配置MySQL服務,並建立相應庫與表,並建立授權使用者

[root@mysql ~]# yum install -y mariadb-server  #安裝資料庫服務

[root@mysql ~]# systemctl start mariadb

[root@mysql ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
......

MariaDB [(none)]> create database vsftpd;  #建立庫
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> use vsftpd;  

MariaDB [vsftpd]> CREATE TABLE users (  #建立使用者表,用於儲存使用者資訊
-> id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
-> name CHAR(50) BINARY NOT NULL,
-> password CHAR(48) BINARY NOT NULL);
Query OK, 0 rows affected (0.02 sec)

MariaDB [vsftpd]> insert into users (name,password) value('ftpuser1',password('centos'));  #新增FTP使用者
Query OK, 1 row affected (0.00 sec)

MariaDB [vsftpd]> insert into users (name,password) value('ftpuser2',password('linux'));  #新增FTP使用者
Query OK, 1 row affected (0.01 sec)

MariaDB [vsftpd]> grant select on vsftpd.* to vsftpd@'192.168.25.%' identified by 'centos';  #建立授權使用者
Query OK, 0 rows affected (0.00 sec)

2.在FTP伺服器上安裝FTP服務,並編譯安裝pam_mysql模組

[root@ftpserver ~]# yum install -y vsftpd #安裝FTP服務

[root@ftpserver ~]# ll pam_mysql-0.7RC1.tar.gz #準備pam_mysql安裝包

[root@ftpserver ~]# tar -xf pam_mysql-0.7RC1.tar.gz

[root@ftpserver ~]# cd pam_mysql-0.7RC1/

[root@ftpserver ~]# yum install -y gcc gcc-c++ pam-devel mariadb-devel #先安裝相關依賴包

[root@ftpserver pam_mysql-0.7RC1]# ./configure --with-pam-mods-dir=/lib64/security/ #編譯安裝pam_mysql模組

[root@ftpserver pam_mysql-0.7RC1]# make && make install

3.建立pam認證檔案

[root@ftpserver ~]# vim /etc/pam.d/vsftpd.mysql

auth required pam_mysql.so user=vsftpd passwd=centos host=192.168.25.31 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account required pam_mysql.so user=vsftpd passwd=centos host=192.168.25.31 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

4.建立FTP虛擬使用者與共享目錄,並修改 /etc/vsftpd/vsftpd.conf

[root@ftpserver ~]# useradd -d /data/ftproot -s /sbin/nologin vuser #建立虛擬使用者

[root@ftpserver ~]# chmod 555 /data/ftproot #設定FTP目錄許可權

[root@ftpserver ~]# mkdir /data/ftproot/upload #建立FTP上傳目錄

[root@ftpserver ~]# setfacl -m u:vuser:rwx /data/ftproot/upload #設定上傳目錄許可權

[root@ftpserver ~]# vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.mysql #修改此項

新增以下三項

guest_enable=YES

guest_username=vuser

user_config_dir=/etc/vsftpd/vusers.d/ #獨立使用者配置目錄

5.啟動FTP服務,用資料庫中的使用者測試

[root@ftpserver ftproot]# systemctl start vsftpd

二、通過NFS實現伺服器/www共享訪問

主機:兩臺,一臺為NFS伺服器,一臺為客戶端

1.配置NFS伺服器

[root@NFSserver ~]# mkdir /www #新建掛載目錄

[root@NFSserver ~]# vim /etc/exports
/www 192.168.25.0/24(rw,root_squash) #配置掛載目錄

[root@NFSserver ~]# systemctl start nfs-server #啟動NFS服務

[root@NFSserver ~]# exportfs -v #檢視本機的NFS共享
/www 192.168.25.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

[root@NFSserver ~]# touch /www/f1.txt  #建立一個檔案

2.客戶端掛載NFS目錄

[root@Client ~]# showmount -e 192.168.25.25 #檢視主機的共享資訊
Export list for 192.168.25.25:
/www 192.168.25.0/24

開始手動掛載

[root@Client ~]# mount -o rw,nosuid,fg,hard,intr 192.168.25.25:/www /data/

[root@Client ~]# cd /data

[root@Client data]# ls -l  #可以掛載中的檔案

如要實現開機掛載

則在 /etc/fstab 檔案中新增一行
192.168.25.25:/www /data nfs defaults 0 0

三、配置samba共享,實現/www目錄共享

主機:一臺伺服器端(192.168.25.25),一臺客戶端(192.168.25.35)

軟體:samba (伺服器端),cifs-utils (客戶端),光碟yum源

1.伺服器端安裝安裝samba包

[root@server ~]# yum install -y samba

2.建立samba使用者和組,並建立samba共享目錄

[root@server ~]# groupadd -r smbgroup #新建smbgroup組

[root@server ~]# useradd -s /sbin/nologin -G smbgroup smbuser1 #新建smbuser1使用者,並加入smbgroup組中

[root@server ~]# id smbuser1
uid=1001(smbuser1) gid=1001(smbuser1) groups=1001(smbuser1),981(smbgroup)

[root@server ~]# smbpasswd -a smbuser1 #新增samba使用者
New SMB password: #密碼 12345
Retype new SMB password:
Added user smbuser1.

[root@server ~]# useradd -s /sbin/nologin smbuser2

[root@server ~]# smbpasswd -a smbuser2
New SMB password: #密碼 54321
Retype new SMB password:
Added user smbuser2.

[root@server ~]# mkdir /www #新建共享目錄

[root@server ~]# chgrp smbgroup /www #修改目錄所屬組

[root@server ~]# chmod 2775 /www

[root@server ~]# ls -ld /www

3.修改samba配置檔案 /etc/samba/smb.conf

[root@server ~]# vim /etc/samba/smb.conf#在結尾處新增以下自定義設定

[smbshare]
path = /www
writeable = no
write list = @smbgroup
writeable = no時只有smbgroup組的使用者才有寫許可權

4.啟動samba服務

[root@server ~]# systemctl start smb nmb

5.客戶端安裝cifs-utils包,並掛載

[root@client ~]# yum install -y cifs-utils

[root@client ~]# mkdir /data/smbuser1 #建立掛載目錄

[root@client ~]# mkdir /data/smbuser2 #建立掛載目錄

四、使用rsync+inotify實現/www目錄實時同步

主機:一臺伺服器端(192.168.25.25),一臺客戶端(192.168.25.35)

1.伺服器端安裝inotify-tools軟體包(epel源)和 rsync包(光碟yum源)

[root@server ~]# yum install -y inotify-tools rsync

2.伺服器端生成驗證檔案

[root@server ~]# echo "rsyncuser:centos" > /etc/rsync.pass

[root@server ~]# chmod 600 /etc/rsync.pass

3.伺服器端準備要備份的目錄

[root@server ~]# mkdir /data

4.伺服器端修改rsync的配置檔案

[root@server ~]# vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 0
ignore errors
exclude = lost+found/
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
reverse lookup = no
hosts allow = 192.168.25.0/24

[backup]
path = /data/
comment = backup
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass

5.伺服器端啟動rsync服務

[root@server ~]# systemctl start rsyncd

6.客戶端配置密碼檔案

[root@client ~]# echo "12345" > /etc/rsync.pass

[root@client ~]# chmod 600 /etc/rsync.pass

7.客戶端測試同步資料rsync -avz --password-file=/etc/rsync.pass /data/ rsyncuser@rsync伺服器IP::/data

[root@client ~]# cd /data

[root@client data]# touch f1.txt #在客戶端目錄新建一個檔案

[root@client data]# ll

[root@server ~]# ll /data/ #此時伺服器端備份目錄還沒有檔案
total 0

[root@client data]# rsync -avz --password-file=/etc/rsync.pass /data/ [email protected]::backup #使用rsync進行同步
sending incremental file list
./
f1.txt

sent 104 bytes received 38 bytes 284.00 bytes/sec
total size is 0 speedup is 0.00

返回伺服器端檢視

[root@server ~]# ll /data/ #檔案已同步過來

四、LVS排程演算法總結

1.輪叫排程(Round Robin)(簡稱rr)

排程器通過“輪叫”排程演算法將外部請求按順序輪流分配到叢集中的真實伺服器上,它均等地對待每一臺伺服器,而不管伺服器上實際的連線數和系統負載。

2.加權輪叫(Weighted Round Robin)(簡稱wrr)

排程器通過“加權輪叫”排程演算法根據真實伺服器的不同處理能力來排程訪問請求。這樣可以保證處理能力強的伺服器能處理更多的訪問流量。排程器可以自動問詢真實伺服器的負載情況,並動態地調整其權值。

3.最少連結(Least Connections)(LC)

排程器通過“最少連線”排程演算法動態地將網路請求排程到已建立的連結數最少的伺服器上。如果集群系統的真實伺服器具有相近的系統性能,採用“最小連線”排程演算法可以較好地均衡負載。

4.加權最少連結(Weighted Least Connections)(WLC)

在集群系統中的伺服器效能差異較大的情況下,排程器採用“加權最少連結”排程演算法優化負載均衡效能,具有較高權值的伺服器將承受較大比例的活動連線負載。排程器可以自動問詢真實伺服器的負載情況,並動態地調整其權值。

5.基於區域性性的最少連結(Locality-Based Least Connections)(LBLC)

“基於區域性性的最少連結”排程演算法是針對目標IP地址的負載均衡,目前主要用於Cache集群系統。該演算法根據請求的目標IP地址找出該目標IP地址最近使用的伺服器,若該伺服器是可用的且沒有超載,將請求傳送到該伺服器;若伺服器不存在,或者該伺服器超載且有伺服器處於一半的工作負載,則用“最少連結” 的原則選出一個可用的伺服器,將請求傳送到該伺服器。

6.帶複製的基於區域性性最少連結(Locality-Based Least Connections with Replication)(LBLCR)

“帶複製的基於區域性性最少連結”排程演算法也是針對目標IP地址的負載均衡,目前主要用於Cache集群系統。它與LBLC演算法的不同之處是它要維護從一個目標 IP地址到一組伺服器的對映,而LBLC演算法維護從一個目標IP地址到一臺伺服器的對映。該演算法根據請求的目標IP地址找出該目標IP地址對應的伺服器組,按“最小連線”原則從伺服器組中選出一臺伺服器,若伺服器沒有超載,將請求傳送到該伺服器;若伺服器超載,則按“最小連線”原則從這個叢集中選出一臺伺服器,將該伺服器加入到伺服器組中,將請求傳送到該伺服器。同時,當該伺服器組有一段時間沒有被修改,將最忙的伺服器從伺服器組中刪除,以降低複製的程度。

7.目標地址雜湊(Destination Hashing)(DH)

“目標地址雜湊”排程演算法根據請求的目標IP地址,作為雜湊鍵(Hash Key)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求傳送到該伺服器,否則返回空。

8.源地址雜湊(Source Hashing)(SH)

“源地址雜湊”排程演算法根據請求的源IP地址,作為雜湊鍵(Hash Key)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求傳送到該伺服器,否則返回空。

9.最短的期望的延遲(Shortest Expected Delay Scheduling SED)(SED)

基於wlc演算法。這個必須舉例來說了
ABC三臺機器分別權重123 ,連線數也分別是123。那麼如果使用WLC演算法的話一個新請求進入時它可能會分給ABC中的任意一個。使用sed演算法後會進行這樣一個運算
A(1+1)/1
B(1+2)/2
C(1+3)/3
根據運算結果,把連線交給C 。

10.最少佇列排程(Never Queue Scheduling NQ)(NQ)

無需佇列。如果有臺 realserver的連線數=0就直接分配過去,不需要在進行sed運算

五、LVS的跨網路DR實現

主機:四臺,一臺VS伺服器,二臺RS伺服器,一臺客戶端伺服器

網路配置:VS伺服器 DIP:192.168.25.5(eth0),RS1伺服器RIP:192.168.25.15(eth0),RS2伺服器RIP:192.168.25.25(eth0),VIP:192.168.25.100(lo:1),客戶端伺服器CIP:192.168.25.35(eth1)

軟體包:keepalived,ipvsadm,httpd(光碟yum源)

1.在VS伺服器上配置

[root@VS ~]# yum install -y ipvsadm

[root@VS ~]# ifconfig eth0:1 192.168.25.100/32

[root@VS ~]# ipvsadm -A -t 192.168.25.100:80 -s wrr

[root@VS ~]# ipvsadm -a -t 192.168.25.100:80 -r 192.168.25.15 -g -w 1

[root@VS ~]# ipvsadm -a -t 192.168.25.100:80 -r 192.168.25.25 -g -w 1

[root@VS ~]# ipvsadm -Ln

2.在RS1伺服器上配置

[root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

[root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

[root@RS1 ~]# ifconfig lo:1 192.168.25.100/32

[root@RS1 ~]# yum install -y httpd

[root@RS1 ~]# echo 192.168.25.15 RS1 > /var/www/html/index.html

[root@RS1 ~]# systemctl start httpd

3.在RS2伺服器上配置

[root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

[root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

[root@RS2 ~]# ifconfig lo:1 192.168.25.100/32

[root@RS2 ~]# yum install -y httpd

[root@RS2 ~]# echo 192.168.25.25 RS2 > /var/www/html/index.html

[root@RS2 ~]# systemctl start httpd

4.在客戶端伺服器上測試

[root@client ~]# while true; do curl 192.168.25.100 ;sleep 1; done
192.168.25.15 RS1
192.168.25.25 RS2
192.168.25.15 RS1
192.168.25.25 RS2
192.168.25.15 RS1