准备工作:
主机名 | 操作系统 | IP地址 | 担任角色 |
master | CentOS7 | 192.168.1.1 | LVS-主调度器 |
backup | 192.168.1.2 | LVS-备调度器 | |
web1 | 192.168.1.3 | Web 服务器1,GlusterFS 客户端 | |
web2 | 192.168.1.4 | Web 服务器2,GlusterFS 客户端 | |
node1 | 192.168.1.5 | 分布式文件系统节点1 | |
node2 | 192.168.1.6 | 分布式文件系统节点2 |
- 实验需要的软件包可以从这里进行下载:传送门(需解压)
- 提取码:
d4el
实验描述:
- 通过 LVS + Keepalived 实现 Web 服务的 负载均衡和高可用;
- 并且数据存储使用的是 GlusterFS 分布式文件存储,来实现 数据的冗余性;
- 最终,通过在两台 Web 服务器上 通过 Keepalived 提供的 VIP(192.168.1.188)来提供服务。
1.安装 LVS+Keepalived 服务
1)LVS 主调度器配置
192.168.1.1
[root@master ~]# yum -y install keepalived ipvsadm # 安装支持软件
[root@master ~]# systemctl enable keepalived # 配置开机自启
[root@master ~]# cat <<END > etc/keepalived/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
}
}
}
END
[root@master ~]# ipvsadm -C # 删除原有策略
[root@master ~]# modprobe ip_vs # 加载系统内核的服务模块
[root@master ~]# lsmod | grep ip_vs # 查看系统模块运行状态
[root@master ~]# echo "modprobe ip_vs" >> /etc/rc.local # 配置开机自运行
[root@master ~]# systemctl restart keepalived # 重启 Keepalived 服务
[root@master ~]# ip a # 查看漂移 IP 是否存在
2)LVS 备调度器配置
192.168.1.2
[root@backup ~]# yum -y install keepliaved ipvsadm # 安装支持软件
[root@backup ~]# systemctl enable keepalived # 配置开机自启
[root@backup ~]# cat <<END > etc/keepalived/keepalived.conf
global_defs {
router_id 2 # 要和主调度器的配置进行区分
}
vrrp_instance VI_1 {
state BACKUP # 备份
interface ens33
virtual_router_id 1
priority 99 # 优先级
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
}
}
}
END
[root@backup ~]# ipvsadm -C # 删除原有策略
[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 # 重启 Keepalived 服务
2.安装 Apache 服务
两台 Web 服务器配置相同:(也就是 192.168.1.3
192.168.1.4
主机)
[root@web1 ~]# yum -y install httpd # 安装 HTTP 服务
[root@web1 ~]# echo "<h1>This is web1</h1>" > /var/www/html/index.html # 配置自定义页面 (两台 HTTP 服务器要区分开)
[root@web1 ~]# systemctl start httpd # 开启 HTTP 服务
[root@web1 ~]# systemctl enable httpd # 配置开机自启
1)配置集群接口
[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
2)调整 /proc
内核参数,关闭 ARP 响应
[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 # 加载配置
3)添加到群集 IP 地址的本地路由记录
[root@web1 ~]# yum -y install net-tools
[root@web1 ~]# route add -host 192.168.1.188 dev lo:0
[root@web1 ~]# echo "/sbin/route add -host 192.168.1.188 dev lo:0" >> /etc/rc.local
4)客户机进行验证
5)LVS 服务器查看负载均衡情况
[root@master ~]# ipvsadm -ln
验证成功后,在两台 HTTP 服务器上将首页进行删除(为后续挂载 GlusterFS 做准备)
[root@web1 ~]# rm -rf /var/www/html/*
3.安装 GlusterFS 服务
- 分别为
node1
node2
各配置一块 20G 硬盘,分成两个分区,各 10G 容量。
1)磁盘分区(两台主机操作相同)
[root@node1 ~]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(parted) mkpart primary 1 50%
(parted) mkpart primary 2 100%
....
Is this still acceptable to you?
是/Yes/否/No? Yes
(parted) quit
[root@node1 ~]# lsblk | grep sdb
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 10G 0 part
└─sdb2 8:18 0 10G 0 part
2)格式化并挂载
node1
上操作:
[root@node1 ~]# mkfs.xfs /dev/sdb1 && mkfs.xfs /dev/sdb2
[root@node1 ~]# mkdir -p /brick1/sdb{1..2}
[root@node1 ~]# mount /dev/sdb1 /brick1/sdb1 && mount /dev/sdb2 /brick1/sdb2
[root@node1 ~]# cat <<END >> /etc/fstab # 配置开机自挂载
/dev/sdb1 /brick1/sdb1 xfs defaults 0 0
/dev/sdb2 /brick1/sdb2 xfs defaults 0 0
END
[root@node1 ~]# df -hT | grep brick1 # 查看是否挂载成功
node2
上操作:
[root@node2 ~]# mkfs.xfs /dev/sdb1 && mkfs.xfs /dev/sdb2
[root@node2 ~]# mkdir -p /brick2/sdb{1..2}
[root@node2 ~]# mount /dev/sdb1 /brick2/sdb1 && mount /dev/sdb2 /brick2/sdb2
[root@node2 ~]# cat <<END >> /etc/fstab # 配置开机自挂载
/dev/sdb1 /brick2/sdb1 xfs defaults 0 0
/dev/sdb2 /brick2/sdb2 xfs defaults 0 0
END
[root@node2 ~]# df -hT | grep brick2 # 查看是否挂载成功
3)配置 Hosts 文件
node1
node2
操作相同
[root@node1 ~]# cat <<END >> /etc/hosts
192.168.1.5 node1
192.168.1.6 node2
END
4)配置本地 yum
源,安装基础包
node1
node2
上操作相同
[root@node1 ~]# yum -y install attr psmisc # 安装基础包
[root@node1 ~]# rm -rf /etc/yum.repos.d/*
[root@node1 ~]# cd /mnt/
上传 gfsrepo 文件夹里的软件到此目录
[root@node1 mnt]# cat <<END > /etc/yum.repos.d/GLFS.repo
[GLFS]
name=GLFS
baseurl=file:///mnt
enabled=1
gpgcheck=0
END
[root@node1 mnt]# yum clean all
[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 # 配置开机自启
[root@node1 mnt]# netstat -anpt | grep glusterd # 查看端口是否开启
5)创建集群,并将主机加入集群
node1
node2
上任意一台主机上操作即可
[root@node1 ~]# gluster peer probe node1
[root@node1 ~]# gluster peer probe node2
[root@node1 ~]# gluster peer status # 查看节点状态
6)创建复制卷
创建第一个复制卷:
[root@node1 ~]# gluster volume create rep-web1 replica 2 node1:/brick1/sdb1 node2:/brick2/sdb1 force
[root@node1 ~]# gluster volume start rep-web1 # 开启复制卷
[root@node1 ~]# gluster volume info rep-web1 # 查看复制卷状态
创建第二个复制卷:
[root@node1 ~]# gluster volume create rep-web2 replica 2 node1:/brick1/sdb2 node2:/brick2/sdb2 force
[root@node1 ~]# gluster volume start rep-web2 # 开启复制卷
[root@node1 ~]# gluster volume info rep-web2 # 查看复制卷状态
4.配置 GlusterFS 客户端
1)Web1,Web2 主机上安装客户端软件:
[root@web1 ~]# echo "192.168.1.5 node1" >> /etc/hosts
[root@web1 ~]# echo "192.168.1.6 node1" >> /etc/hosts
[root@web1 ~]# yum -y install attr psmisc # 安装基础包
[root@web1 ~]# rm -rf /etc/yum.repos.d/*
[root@web1 ~]# cd /mnt/
上传 gfsrepo 文件夹里的软件到此目录
[root@web1 mnt]# cat <<END > /etc/yum.repos.d/GLFS.repo
[GLFS]
name=GLFS
baseurl=file:///mnt
enabled=1
gpgcheck=0
END
[root@web1 mnt]# yum clean all
[root@web1 mnt]# yum -y install glusterfs glusterfs-fuse
2)挂载 GlusterFS 文件系统
Web1 上操作:
[root@web1 ~]# mount.glusterfs node1:rep-web1 /var/www/html/
[root@web1 ~]# echo "<h1>This is web1</h1>" > /var/www/html/index.html
Web2 上操作:
[root@web2 ~]# mount.glusterfs node1:rep-web2 /var/www/html/
[root@web2 ~]# echo "<h1>This is web2</h1>" > /var/www/html/index.html
3)在 node1
node2
主机上分别访问挂载目录,查看是否有复制文件存在
5.验证
1)关闭主调度器,查看整个集群是否能够正常工作
2)关闭 Web1 节点,查看整个集群是否能够正常工作
3)关闭 node1 节点,查看整个集群是否能够正常工作