綜合專案:lvs+keepalived+glusterfs群集

!#願許浪盡天涯發表於2020-11-07


準備工作:

主機名作業系統IP地址擔任角色
masterCentOS7192.168.1.1lvs主排程器
backupCentOS7192.168.1.2lvs副排程器
web1CentOS7192.168.1.3web伺服器1,glusterfs客戶端
web2CentOS7192.168.1.4web伺服器2,glusterfs客戶端
node1Centos7192.168.1.5分散式檔案系統節點1
node2Centos7192.168.1.6分散式檔案系統節點2

glusterfs軟體包從下面連結下載:
https://pan.baidu.com/s/19P8ReLY4fdVnrfYfVD9mnA
提取碼:7unm
實驗描述:

  • 搭建 lvs–DR web 群集負載均衡排程系統,利用 keepalived 技術實現排程器的雙機熱備
  • 資料儲存採用分散式檔案系統群集 glusterfs
  • web群集提供服務的群集IP為192.168.1.188

一、部署lvs+keepalived伺服器

1.lvs主排程器配置

192.168.1.1

[root@localhost ~]# hostnamectl set-hostname master    #配置主機名
[root@localhost ~]# bash
[root@master ~]# mount /dev/cdrom /media/cdrom         #掛載光碟
mount: /dev/sr0 防寫,將以只讀方式掛載
[root@master ~]# yum -y install keepalived ipvsadm    
[root@master ~]# systemctl enable keepalived		   #設定開機自啟
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.    
[root@master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@master ~]# vim /etc/keepaplived/keepalived.conf 
global_defs {
   router_id 1
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 1
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.188
    }
}
virtual_server 192.168.1.188 80 {
        delay_loop 15
        lb_algo rr
        lb_kind DR
        protocol TCP

real_server 192.168.1.3 80 {
        weight 1
        TCP_CHECK {
                connect_port 80
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 4
                }
        }
                real_server 192.168.1.4 80 {
        weight 1
        TCP_CHECK {
                connect_port 80
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 4
                }
        }
}
[root@master ~]# ipvsadm -C
[root@master ~]# modprobe ip_vs
[root@master ~]# lsmod | grep ip_vs
ip_vs                 145497  0 
nf_conntrack          139224  1 ip_vs
libcrc32c              12644  3 xfs,ip_vs,nf_conntrack
[root@master ~]# echo "modprobe ip_vs" >> /etc/rc.local
[root@master ~]# systemctl restart keepalived  
[root@master ~]# ip a        #檢視漂移IP是否存在

在這裡插入圖片描述

2.lvs副排程器配置

192.168.1.2

[root@localhost ~]# hostnamectl set-hostname backup    #配置主機名
[root@localhost ~]# bash
[root@backup ~]# mount /dev/cdrom /media/cdrom		   #掛載光碟
mount: /dev/sr0 防寫,將以只讀方式掛載
[root@backup ~]# yum -y install keepliaved ipvsadm
[root@backup ~]# systemctl enable keepalived			#設定開機自啟
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.     
[root@backup ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak     
[root@backup ~]# vim /etc/keepalived/keepalived.conf
lvs副排程器和主排程器配置配置一致,但要做以下修改:
  router_id 1  改為  router_id 2
  state MASTER  改為  state BACKUP
  priority 100  改為  priority 99
[root@backup ~]# modprobe ip_vs
[root@backup ~]# lsmod | grep ip_vs
[root@backup ~]# echo "modprobe ip_vs" >> /etc/rc.local
[root@backup ~]# systemctl restart keepalived

為了驗證lvs+keepalived叢集是否正常執行,部署httpd的本地網站目錄進行驗證

二、部署節點伺服器

1.安裝Apache服務

192.168.1.3:

[root@localhost ~]# hostnamectl set-hostname web1
[root@localhost ~]# bash
[root@web1 ~]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 防寫,將以只讀方式掛載
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# echo "<h1>This is web1</h1>" > /var/www/html/index.html
[root@web1 ~]# systemctl enable httpd
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# curl 192.168.1.3       #訪問本機測試
<h1>This is web1</h1>

192.168.1.4:

[root@localhost ~]# hostnamectl set-hostname web2
[root@localhost ~]# bash
[root@web2 ~]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 防寫,將以只讀方式掛載
[root@web2 ~]# yum -y install httpd
[root@web2 ~]# echo "<h1>This is web2</h1>" > /var/www/html/index.html
[root@web2 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.  
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# curl 192.168.1.4         #訪問本機測試
<h1>This is web2</h1>

2.配置群集介面

web1,web2配置一致

[root@web1 ~]# cat <<END >> /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVEICE=lo:0
ONBOOT=yes
IPADDR=192.168.1.188
NETMASK=255.255.255.255
END
[root@web1 ~]# systemctl restart network
[root@web1 ~]# ifconfig lo:0

在這裡插入圖片描述

3.調整/proc核心引數,關閉ARP響應

web1,web2配置一致:

[root@web1 ~]# cat <<END >> /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
END
[root@web1 ~]# sysctl -p     #讓其生效

在這裡插入圖片描述

4.新增到群集IP地址的本地路由記錄

[root@web1 ~]# echo "/sbin/route add -host 192.168.1.188 dev lo:0" >> /etc/rc.local     
[root@web1 ~]# route add -host 192.168.1.188 dev lo:0

在這裡插入圖片描述

5.客戶機進行驗證

1)客戶機瀏覽器訪問:http://192.168.1.188

192.168.1.188是剛才設定的漂移IP
在這裡插入圖片描述
在這裡插入圖片描述

2)lvs伺服器 檢視負載均衡情況

[root@master ~]# ipvsadm -ln  

在這裡插入圖片描述
驗證成功後,web1,web2 分別刪除首頁,為後續掛載glusterfs做準備

[root@web1 ~]# rm -rf /var/www/html/*
[root@web1 ~]# ll /var/www/html/
總用量 0

在這裡插入圖片描述

三、部署glusterfs伺服器

分別為node1,node2各新增一塊20G硬碟,分成兩個分割槽,各10G容量

1.磁碟分割槽

[root@localhost ~]# fdisk /dev/sdb
-------
命令(輸入 m 獲取幫助):n     #建立分割槽
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):p         #建立主分割槽
分割槽號 (1-4,預設 1)        #回車
起始 扇區 (2048-41943039,預設為 2048)    #回車
將使用預設值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-41943039,預設為 41943039)+10G   #容量設定為10G
分割槽 1 已設定為 Linux 型別,大小設為 10 GiB
-------
命令(輸入 m 獲取幫助):n      #建立分割槽
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p       #建立主分割槽
分割槽號 (2-4,預設 2)		#回車
起始 扇區 (20973568-41943039,預設為 20973568)   #回車
將使用預設值 20973568
Last 扇區, +扇區 or +size{K,M,G} (20973568-41943039,預設為 41943039)+10G  #容量設定為10G
分割槽 2 已設定為 Linux 型別,大小設為 10 GiB
命令(輸入 m 獲取幫助):wq      #儲存退出

2.格式化並掛載

[root@localhost ~]# mkfs.xfs /dev/sdb1       #格式化sdb1
[root@localhost ~]# mkfs.xfs /dev/sdb2		 #格式化sdb2
[root@localhost ~]# mkdir -p /brick1/sdb{1..2}      #建立兩個掛載點
[root@localhost ~]# mount /dev/sdb1 /brick1/sdb1    #掛載sdb1分割槽
[root@localhost ~]# mount /dev/sdb2 /brick1/sdb2    #掛載sdb2分割槽
[root@localhost ~]# cat <<END >> /etc/fstab         #設定開機自掛載
/dev/sdb1 /brick1/sdb1 xfs defaults 0 0
/dev/sdb2 /brick1/sdb2 xfs defaults 0 0
END
[root@localhost ~]# df -hT         #檢視是否掛載成功

3.配置hosts檔案

[root@localhost ~]# cat <<END >> /etc/hosts   
192.168.1.5 node1
192.168.1.6 node2
END
[root@localhost ~]# hostnamectl set-hostname node1    #設定主機名
[root@localhost ~]# bash

在這裡插入圖片描述

4.配置yum本地源,安裝環境包

node1,node2操作步驟一致:

[root@node1 ~]# cd /mnt/
上傳gfsrepo資料夾裡的軟體到此目錄
[root@node1 mnt]# mount /dev/cdrom /media/cdrom    #掛載光碟
mount: /dev/sr0 防寫,將以只讀方式掛載
[root@node1 mnt]# yum -y install attr psmisc       #安裝依賴包
[root@node1 mnt]# vi /etc/yum.repos.d/GLFS.repo
[GLFS]
name=GLFS
baseurl=file:///mnt
enable=1
gpgcheck=0
[root@node1 mnt]# yum clean all       #清空yum快取
[root@node1 mnt]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma   
[root@node1 mnt]# systemctl start glusterd      #開啟gluster
[root@node1 mnt]# systemctl enable glusterd		#設定開機自啟
Created symlink from /etc/systemd/system/multi-user.target.wants/glusterd.service to /usr/lib/systemd/system/glusterd.service.
[root@node1 mnt]# netstat -anpt | grep glusterd    #檢視埠是否開啟
tcp        0      0 0.0.0.0:24007           0.0.0.0:*               LISTEN      16040/glusterd  

5.建立群集,並新增節點

node1,node2上任意一臺上操作即可

[root@node1 ~]# gluster peer probe node1
peer probe: success. Probe on localhost not needed
[root@node1 ~]# gluster peer probe node2
peer probe: success. 
[root@node1 ~]# gluster peer status     #檢視節點狀態
Number of Peers: 1

Hostname: node2
Uuid: 42e9950f-e49d-44f2-80c9-502a31bf6b8b
State: Peer in Cluster (Connected)

在這裡插入圖片描述

6.建立複製卷

[root@node1 ~]# gluster volume create rep-web1 replica 2 node1:/brick1/sdb1 node2:/brick2/sdb1 force    
volume create: rep-web1: success: please start the volume to access data
[root@node1 ~]# gluster volume start rep-web1       #開啟複製卷
volume start: rep-web1: success
[root@node1 ~]# gluster volume info rep-web1		#檢視複製卷狀態

Volume Name: rep-web1
Type: Replicate
Volume ID: 8e9ad069-cd65-4db8-8be8-2a5d8bafecce
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node1:/brick1/sdb1
Brick2: node2:/brick2/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume create rep-web2 replica 2 node1:/brick1/sdb2 node2:/brick2/sdb2 force      
volume create: rep-web2: success: please start the volume to access data
[root@node1 ~]# gluster volume start rep-web2    #開啟複製卷
volume start: rep-web2: success 
[root@node1 ~]# gluster volume info rep-web2     #檢視府志卷狀態

Volume Name: rep-web2
Type: Replicate
Volume ID: 2732d944-415b-4625-b192-7274201474ed
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node1:/brick1/sdb2
Brick2: node2:/brick2/sdb2
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

在這裡插入圖片描述
在這裡插入圖片描述

四、web叢集即glusterfs客戶端配置

1.web1,web2安裝客戶端軟體

[root@web1 ~]# yum -y install attr psmisc     #安裝依賴包
[root@web1 ~]# cd /mnt/   
上傳gfsrepo資料夾裡的軟體到此目錄
[root@web1 mnt]# vi /etc/yum.repos.d/GLFS.repo
[GLFS]
name=GLFS
baseurl=file:///mnt
enable=1
gpgcheck=0  
[root@web1 mnt]# yum clean all     #清空yum快取
[root@web1 mnt]# yum -y install glusterfs glusterfs-fuse  

2.修改hosts檔案

[root@web1 mnt]# cat <<END >> /etc/hosts
192.168.1.5 node1
192.168.1.6 node2
END

3.驗證:ping -c 2 node1 測試

在這裡插入圖片描述

4.掛載glusterfs檔案系統

1)web1上操作

[root@web1 ~]# mount.glusterfs node1:rep-web1 /var/www/html/  
[root@web1 ~]# echo "<h1>This is we1</h1>" > /var/www/html/index.html

2)web2上操作

[root@web2 ~]# mount.glusterfs node1:rep-web2 /var/www/html/
[root@web2 ~]# echo "<h1>This is web2</h1>" > /var/www/html/index.html

驗證:在node1,node2分別訪問掛載目錄,檢視是否有複製檔案存在

在這裡插入圖片描述

五、專案驗證

驗證1:關閉主排程器,檢視整個叢集是否能夠正常工作

在這裡插入圖片描述
在這裡插入圖片描述

驗證2:關閉web叢集節點1,檢視整個叢集是否能夠正常工作

在這裡插入圖片描述

驗證3:關閉儲存節點1,檢視整個叢集是否能夠正常工作

在這裡插入圖片描述

相關文章