准备工作:
- 实验需要的软件包可以从这里进行下载:传送门(需解压)
- 提取码: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 节点,查看整个集群是否能够正常工作