群集——keepalived+LVS-DR+GFS+zabbix

Posted 大虾好吃吗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了群集——keepalived+LVS-DR+GFS+zabbix相关的知识,希望对你有一定的参考价值。

目录

🍋拓扑图

🍋案例实施

🍒1、环境配置

🍒1.1、配置IP地址

🍒1.2、GFS添加磁盘

🍈2、Keepalived

🍈2.1、配置主调度器

🍈2.2、配置备份调度器

🍓3、LVS-DR

🍓3.1、负载均衡

🍓3.1.1、关闭icmp重定向

🍓3.1.2、配置负载分配策略

🍓3.2、配置主调度器

🍓3.3、配置备份调度器

🍌4、GFS

🍌4.1、web端

🍌4.1.1、web配置VIP

🍌4.1.2、关闭部分arp应答

🍌4.1.3、配置httpd

🍌4.2、配置GFS端

🍌4.2.1、创建复制卷

🍌4.2.2、web挂载复制卷

🍌4.2.3、测试

🍎5、zabbix

🍎5.1、安装

🍎5.1.1、创建zabbix源

🍎5.1.2、安装MariaDB

🍎5.1.3、安装Zabbix

🍎5.1.4、配置zabbix

🍎5.2 、zabbix界面优化

🍎5.3、监控LVS

🍎5.3.1、web界面配置

🍎5.4、监控web

🍎5.4.1、web界面配置


🍤:事实证明大虾还是好吃的。

拓扑图

案例实施

1、环境配置

        环境要求:如图所示配置IP地址,所有主机桥接到vmnet1,并关闭防火墙和Selinux。GFS两台服务器分别添加两块20G的磁盘,客户端使用宿主机。

1.1、配置IP地址

        关于IP的配置这里以web1为例,只有web1和web2添加两块网卡,相对比其他服务器的配置只是多一块需要配置的网卡,其他服务器正常配置IP即可。

[root@web1 ~]# systemctl stop firewalld
[root@web1 ~]# systemctl disable firewalld
[root@web1 ~]# setenforce 0
[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# vim ifcfg-ens33 
......省略部分内容
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.3
NETMASK=255.255.255.0
[root@web1 network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@web1 network-scripts]# vim ifcfg-ens36
......省略部分内容
BOOTPROTO=static
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=200.0.0.3
NETMASK=255.255.255.0
[root@web1 network-scripts]# systemctl restart network

1.2、GFS添加磁盘

        关于磁盘可以开机前添加,会自动识别磁盘。若开机后添加可以执行以下命令识别磁盘。

echo "- - -" >> /sys/class/scsi_host/host0/scan
echo "- - -" >> /sys/class/scsi_host/host1/scan
echo "- - -" >> /sys/class/scsi_host/host2/scan 

        到目前的配置,web1和web2可以ping通全网,而公网和私网则不能相互ping通。GFS1和GFS2每台服务器上都有一块sdb磁盘。

2、Keepalived

        搭建Keepalived实现Lvs的双机热备。本次使用yum方式安装keepalived和ipvsadm管理工具。LVS1和LVS2都需要那种,这里以LVS1为例。

[root@lvs1 ~]# yum -y install keepalived ipvsadm
[root@lvs1 ~]# systemctl enable keepalived

2.1、配置主调度器

[root@lvs1 ~]# cd /etc/keepalived/
[root@lvs1 keepalived]# cp keepalived.conf keepalived.conf.back
[root@lvs1 keepalived]# vim keepalived.conf
! Configuration File for keepalived
​
global_defs 
 ......省略部分内容
   router_id LVS1           //主调度器名称

   
vrrp_instance VI_1 
    state MASTER            //主调度器的热备状态
    interface ens33         //修改接口网卡
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication 
        auth_type PASS
        auth_pass 1111
    
    virtual_ipaddress 
        200.0.0.100         //配置漂移地址
    
   
[root@lvs1 keepalived]# systemctl start keepalived
[root@lvs1 keepalived]# ip addr show dev ens33          //查看漂移地址
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:16:da:97 brd ff:ff:ff:ff:ff:ff
    inet 200.0.0.1/24 brd 200.0.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 200.0.0.100/32 scope global ens33              //此时漂移地址在主调度器上
       valid_lft forever preferred_lft forever
    inet6 fe80::c3cf:e745:3647:394a/64 scope link 
       valid_lft forever preferred_lft forever

2.2、配置备份调度器

[root@lvs2 ~]# cd /etc/keepalived/
[root@lvs2 keepalived]# cp keepalived.conf keepalived.conf.bak
[root@lvs2 keepalived]# vim keepalived.conf
! Configuration File for keepalived
​
global_defs 
......省略部分内容
   router_id LVS2               //备份调度器名称
  
​
vrrp_instance VI_1 
    state BACKUP                //备份调度器的热备状态
    interface ens33             //修改接口网卡
    virtual_router_id 51
    priority 99                 //修改优先级别
    advert_int 1
    authentication 
        auth_type PASS
        auth_pass 1111
    
    virtual_ipaddress 
        200.0.0.100             //配置漂移地址
    
  
[root@lvs2 keepalived]# systemctl start keepalived
[root@lvs2 keepalived]# ip addr show dev ens33              //查看漂移地址
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:55:f7:8d brd ff:ff:ff:ff:ff:ff
    inet 200.0.0.2/24 brd 200.0.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::15ae:efbc:5794:874b/64 scope link 
       valid_lft forever preferred_lft forever

        备份服务器仍处于备份状态,因此备份服务器不会为ens33接口添加VIP地址。当主服务器失效时,VIP地址才会过来,达到了双机热备的功能。

3、LVS-DR

3.1、负载均衡

        两台LVS都需要配置选项3.1中的内容(关闭ICMP重定向,配置策略)。

3.1.1、关闭icmp重定向

[root@lvs1 ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@lvs1 ~]# sysctl -p

3.1.2、配置负载分配策略

[root@lvs1 ~]# ipvsadm -C               //清除原有策略
[root@lvs1 ~]# ipvsadm -A -t 200.0.0.100:80 -s rr
[root@lvs1 ~]# ipvsadm -a -t 200.0.0.100:80 -r 200.0.0.3 -g -w 1
[root@lvs1 ~]# ipvsadm -a -t 200.0.0.100:80 -r 200.0.0.4 -g -w 1
[root@lvs1 ~]# ipvsadm-save             //保存策略
-A -t lvs1:http -s rr
-a -t lvs1:http -r 200.0.0.3:http -g -w 1
-a -t lvs1:http -r 200.0.0.4:http -g -w 1
[root@lvs1 ~]# systemctl enable ipvsadm

3.2、配置主调度器

        通过配置文件添加两台web节点。

[root@lvs1 ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1             //在vrrp配置模块下面添加节点
......省略部分内容
    virtual_ipaddress 
        200.0.0.100
    

......省略部分内容
virtual_server 200.0.0.100 80              //以下内容需要修改添加节点信息
    delay_loop 15
    lb_algo rr 
    lb_kind DR 
    protocol TCP
    
    real_server 200.0.0.3 80 
        weight 1
        TCP_CHECK 
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
           
    
    real_server 200.0.0.4 80 
        weight 1
        TCP_CHECK 
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        
    

[root@lvs1 ~]# systemctl restart keepalived

3.3、配置备份调度器

        相同的方法配置完主调度器后,接着配置备份调度器。

[root@lvs2 ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1                         //在vrrp配置模块下面添加节点
......省略部分内容
    virtual_ipaddress 
        200.0.0.100
    

......省略部分内容
virtual_server 200.0.0.100 80              //以下内容需要修改添加节点信息
    delay_loop 15
    lb_algo rr 
    lb_kind DR 
    protocol TCP
    
    real_server 200.0.0.3 80 
        weight 1
        TCP_CHECK 
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
           
    
    real_server 200.0.0.4 80 
        weight 1
        TCP_CHECK 
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        
    

[root@lvs2 ~]# systemctl restart keepalived

4、GFS

4.1、web端

        GFS的配置如下表所示,两台服务器实现复制卷,复制卷的名称为share。

        在两个web服务器将share复制卷挂载到web服务器的/var/www/html下。

IP主机名挂载盘挂载目录
192.168.1.1gfs1/dev/sdb(20G)/b3
192.168.1.2gfs2/dev/sdb(20G)/b3

4.1.1、web配置VIP

        每个web服务器上都需要配置漂移地址(VIP)。

[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@web1 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=200.0.0.100
NETMASK=255.255.255.255
ONBOOT=yes
[root@web1 network-scripts]# ifup lo:0
[root@web1 network-scripts]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 200.0.0.100  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)
​
[root@web1 network-scripts]# vim /etc/rc.local
......省略部分内容
/sbin/route add -host 200.0.0.100 dev lo:0          //添加一条路由
[root@web1 network-scripts]# route add -host 200.0.0.100 dev lo:0

4.1.2、关闭部分arp应答

[root@web1 ~]# vim /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
[root@web1 ~]# sysctl -p

4.1.3、配置httpd

[root@web1 ~]# yum -y install httpd
[root@web1 ~]# echo "111" > /var/www/html/index.html 
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# systemctl enable httpd

4.2、配置GFS端

        两台GFS服务器都需要配置,以下gfs1和gfs2配置相同,我以gfs1为例,gfs2相反配置即可。

[root@gfs1 ~]# vim /etc/hosts                   //GFS本地节点解析
192.168.1.1 node1
192.168.1.2 node2
[root@gfs1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
[root@gfs1 ~]# systemctl start glusterd
[root@gfs1 ~]# systemctl enable glusterd
[root@gfs1 ~]# gluster peer probe node1         //本身在gfs1上操作,所以node1也可以不执行
peer probe: success. Probe on localhost not needed
[root@gfs1 ~]# gluster peer probe node2
peer probe: success.
[root@gfs1 ~]# gluster peer status              //查看GFS群集状态
Number of Peers: 1
​
Hostname: node2
Uuid: 16bc8386-0168-4c21-8ed3-e762f1bd8c77
State: Peer in Cluster (Connected)

4.2.1、创建复制卷

        使用fdisk命令创建一个20G的磁盘空间为sdb1并格式化。两台GFS服务器创建成复制卷,卷名为share。

[root@gfs1 ~]# fdisk /dev/sdb
n→p→回车→回车→回车→w保存退出
[root@gfs1 ~]# mkfs.xfs /dev/sdb1
[root@gfs1 ~]# gluster volume create share replica 2 node1:/b1 node2:/b1 force
volume create: share: success: please start the volume to access data
[root@gfs1 ~]# gluster volume start share
volume start: share: success

4.2.2、web挂载复制卷

web1配置如下:

[root@web1 ~]# yum -y install glusterfs glusterfs-fuse
[root@web1 ~]# vim /etc/hosts
192.168.1.1 node1
192.168.1.2 node2
[root@web1 ~]# mount -t glusterfs node1:share /var/www/html/
[root@web1 ~]# df -h
文件系统             容量  已用  可用 已用% 挂载点
/dev/mapper/cl-root   17G  3.8G   14G   23% /
devtmpfs             473M     0  473M    0% /dev
tmpfs                489M  144K  489M    1% /dev/shm
tmpfs                489M  7.1M  482M    2% /run
tmpfs                489M     0  489M    0% /sys/fs/cgroup
/dev/sda1           1014M  173M  842M   18% /boot
tmpfs                 98M   12K   98M    1% /run/user/0
/dev/sr0              53M   53M     0  100% /media
node1:share           17G  3.8G   14G   23% /var/www/html

web2配置如下:

[root@web2 ~]# yum -y install glusterfs glusterfs-fuse
[root@web2 ~]# vim /etc/hosts
192.168.1.1 node1
192.168.1.2 node2
[root@web2 ~]# mount -t glusterfs node1:share /var/www/html/
[root@web2 ~]# df -hT
文件系统            类型            容量  已用  可用 已用% 挂载点
/dev/mapper/cl-root xfs              17G  3.9G   14G   23% /
devtmpfs            devtmpfs        473M     0  473M    0% /dev
tmpfs               tmpfs           489M  144K  489M    1% /dev/shm
tmpfs               tmpfs           489M  7.1M  482M    2% /run
tmpfs               tmpfs           489M     0  489M    0% /sys/fs/cgroup
/dev/sda1           xfs            1014M  173M  842M   18% /boot
tmpfs               tmpfs            98M   12K   98M    1% /run/user/0
/dev/sr0            iso9660          53M   53M     0  100% /media
node1:share         fuse.glusterfs   17G  3.8G   14G   23% /var/www/html

        到目前为止,复制卷就已经创建完了。下一步需要测试了,在挂载盘中创建文件,查看网页内容。

4.2.3、测试

        在上面挂了盘以后,之前的内容就已经消失了,所以还得从新创建一个新的网页内容。在web1上创建一个内容,内容会同步到web2上,客户端查看的内容就会是后面创建的内容。

[root@web1 ~]# echo "666" > /var/www/html/index.html
......web2查看网页内容
[root@web2 ~]# cat /var/www/html/index.html 
666 

5、zabbix

        无监控不运维,最后搭建Zabbix服务器分别监控LVS服务器和web服务器的性能。

5.1、安装

5.1.1、创建zabbix源

        挂盘后将文件复制到创建的目录中,yum仓库目录指向zabbix。

[root@zabbix ~]# mkdir /zabbix
[root@zabbix ~]# cp /media/* /zabbix
[root@zabbix ~]# cd /zabbix
[root@zabbix zabbix]# createrepo .
[root@zabbix ~]# rm -rf /etc/yum.repos.d/*
[root@zabbix ~]# vim /etc/yum.repos.d/a.repo
[a]
name=a
baseurl=file:///zabbix
gpgcheck=0

5.1.2、安装MariaDB

[root@zabbix ~]# yum -y install mariadb-server mariadb
[root@zabbix ~]# systemctl start mariadb
[root@zabbix ~]# systemctl enable mariadb
[root@zabbix ~]# mysqladmin -u root password "123"

5.1.3、安装Zabbix

[root@zabbix ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent
[root@zabbix ~]# mysql -u root -p
Enter password:             //输入密码
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by "456";
Query OK, 0 rows affected (0.00 sec)

5.1.4、配置zabbix

[root@zabbix ~]# zcat /usr/share/doc/zabbix-server-mysql-3.4.1/create.sql.gz | mysql -uzabbix -p zabbix 
Enter password: 
[root@zabbix ~]# cp /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.bak
[root@zabbix ~]# vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBPassword=456
[root@zabbix ~]# cp /etc/zabbix/zabbix_agentd.conf /etc/zabbix/.zabbix_agent.conf.bak
[root@zabbix ~]# vim /etc/zabbix/zabbix_agentd.conf 
Server=200.0.0.10                       //客户端被动等待指定服务器来查询数据
ServerActive=200.0.0.10                 //客户端主动提交数据到指定的服务器
Hostname=Zabbix server                  //主机名称
[root@zabbix ~]# systemctl start zabbix-server
[root@zabbix ~]# systemctl enable zabbix-server
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/system/zabbix-server.service.
[root@zabbix ~]# systemctl start zabbix-agent
[root@zabbix ~]# systemctl enable zabbix-agent
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
[root@zabbix ~]# systemctl start httpd
[root@zabbix ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@zabbix ~]# vim /etc/httpd/conf.d/zabbix.conf
        php_value date.timezone Asia/Shanghai
[root@zabbix ~]# systemctl restart httpd

5.2 、zabbix界面优化

        浏览器输入http://200.0.0.10/zabbix,用户名默认为Admin密码为zabbix,登录即可见到默认页面。为了页面的美观可以修改中文字体,修改乱码等。

5.3、监控LVS

        被监控端安装软件,配置基本相同,这里先只监控LVS主服务器了。

[root@lvs1 ~]# mount /dev/cdrom /media
mount: /dev/sr0 写保护,将以只读方式挂载
[root@lvs1 ~]#  rpm -ivh /media/zabbix-agent-3.2.6-1.el7.x86_64.rpm 
警告:/media/zabbix-agent-3.2.6-1.el7.x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID a14fe591: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:zabbix-agent-3.2.6-1.el7         ################################# [100%]

        被监控端修改配置文件

[root@lvs1 ~]# vim /etc/zabbix/zabbix_agentd.conf
Hostname=LVS-01
ServerActive=200.0.0.1
Server=200.0.0.1
[root@lvs1 ~]# systemctl start zabbix-agent
[root@lvs1 ~]# systemctl enable zabbix-agent
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
[root@lvs1 ~]# netstat -anpt | grep agent
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      3764/zabbix_agentd  
tcp6       0      0 :::10050                :::*                    LISTEN      3764/zabbix_agentd  

5.3.1、web界面配置

        新建主机,监控LVS。查看”检测中“→“图形”选择监控的内容就可以看到监控的选项了,还可以自定义添加监控内容。

查看验证

5.4、监控web

        被监控端安装软件,配置基本相同,这里只监控web2了。

[root@web2 ~]# rpm -ivh /media/zabbix-agent-3.2.6-1.el7.x86_64.rpm 
警告:/media/zabbix-agent-3.2.6-1.el7.x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID a14fe591: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:zabbix-agent-3.2.6-1.el7         ################################# [100%]
[root@web2 ~]# vim /etc/zabbix/zabbix_agentd.conf
Hostname=web2
ServerActive=200.0.0.4
Server=200.0.0.4
[root@web2 ~]# systemctl start zabbix-agent
[root@web2 ~]# systemctl enable zabbix-agent
[root@web2 ~]# netstat -antp | grep agent
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      49560/zabbix_agentd 
tcp6       0      0 :::10050                :::*                    LISTEN      49560/zabbix_agentd 

5.4.1、web界面配置

        新建主机,监控web。查看”检测中“→“图形”选择监控的内容就可以看到监控的选项了,还可以自定义添加监控内容。

LVS-DR与 Keepalived群集

keepalived概述

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

keepalived工作原理

1、keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

2、虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

3、keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

实验环境

调度服务器DR1(主): 192.168.100.66 centos7-1
调度服务器DR2(备): 192.168.100.77 centos7-2

节点服务器web1: 192.168.100.88 centos7-3
节点服务器web2: 192.168.100.99 centos7-4

漂移地址vip: 192.168.100.100

客户端client: 192.168.100.200 windows7

配置centos7-1

yum install ipvsadm keepalived -y

修改网卡模式为仅主机并固定IP:192.168.100.66

[root@dr1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO=static

IPADDR=192.168.100.66
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

[root@dr1 ~]# service network restart
Restarting network (via systemctl): [ 确定 ]

[root@dr1 ~]# vim /etc/sysctl.conf
#添加路由转发功能
net.ipv4.ip_forward=1
#proc响应关闭重定向功能
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects=0

#生效路由转发功能
[root@dr1 ~]# sysctl -p

构建虚拟网卡

[root@dr1 ~]# cd /etc/sysconfig/network-scripts/

[root@dr1 network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0

[root@dr1 network-scripts]# vim ifcfg-ens33:0
#删除原有内容
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.100
NETWASK=255.255.255.0

#启用虚拟网卡
[root@dr1 network-scripts]# ifup ens33:0

添加服务启动脚本

[root@dr1 ~]# cd /etc/init.d/

[root@dr1 init.d]# vim dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.100
RIP1=192.168.100.88
RIP2=192.168.100.99
case "$1" in
start)
/sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
/sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
/sbin/route add -host $VIP dev ens33:0
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
echo "ipvsadm starting------------------[ok]"
;;
stop)
/sbin/ipvsadm -C
systemctl stop ipvsadm
ifconfig ens33:0 down
route del $VIP
echo "ipvsamd stoped--------------------[ok]"
;;
status)
if [ ! -e ar/lock/subsys/ipvsadm ];then
echo "ipvsadm stoped--------------------"
exit 1
else
echo "ipvsamd Runing-------------[ok]"
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0

#授予脚本执行权限
[root@dr1 init.d]# chmod +x dr.sh

#启动脚本
[root@dr1 init.d]# service dr.sh start

#查看ipvsadm 状态
[root@dr1 init.d]# systemctl status ipvsadm #查看服务开启状态

#关闭防火墙与安全功能
[root@dr1 init.d]# systemctl stop firewalld.service
[root@dr1 init.d]# setenforce 0

配置centos7-2

安装ipvsdam、keepalived软件包

[root@dr2 ~]# yum install ipvsdam keepalived -y

修改网卡模式为仅主机并固定IP:192.168.100.77

[root@dr2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO=static

IPADDR=192.168.100.77
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

[root@dr2 ~]# service network restart
Restarting network (via systemctl): [ 确定 ]

[root@dr2 ~]# vim /etc/sysctl.conf
#添加路由转发功能
net.ipv4.ip_forward=1
#proc响应关闭重定向功能
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects=0

#生效路由转发功能
[root@dr1 ~]# sysctl -p

构建虚拟网卡

[root@dr1 ~]# cd /etc/sysconfig/network-scripts/

[root@dr1 network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0

[root@dr1 network-scripts]# vim ifcfg-ens33:0
#删除原有内容
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.100
NETWASK=255.255.255.0

#启用虚拟网卡
[root@dr2 ~]# ifup ens33:0

添加服务启动脚本

[root@dr2 ~]# cd /etc/init.d/

[root@dr2 ~]# vim dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.100
RIP1=192.168.100.88
RIP2=192.168.100.99
case "$1" in
start)
/sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
/sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
/sbin/route add -host $VIP dev ens33:0
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
echo "ipvsadm starting------------------[ok]"
;;
stop)
/sbin/ipvsadm -C
systemctl stop ipvsadm
ifconfig ens33:0 down
route del $VIP
echo "ipvsamd stoped--------------------[ok]"
;;
stop)
/sbin/ipvsadm -C
systemctl stop ipvsadm
ifconfig ens33:0 down
route del $VIP
echo "ipvsamd stoped--------------------[ok]"
;;
status)
if [ ! -e ar/lock/subsys/ipvsadm ];then
echo "ipvsadm stoped--------------------"
exit 1
else
echo "ipvsamd Runing-------------[ok]"
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0

[root@dr2 ~]# chmod +x dr.sh

[root@dr2 ~]# service dr.sh start

[root@dr2 ~]# systemctl status ipvsadm #查看服务开启状态

[root@dr2 ~]# systemctl stop firewalld.service
[root@dr2 ~]# setenforce 0

配置centos7-3

安装httpd软件包

[root@web-1 ~]# yum install httpd -y

修改网卡模式:仅主机并固定IP:192.168.100.88

[root@web-1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO=static

IPADDR=192.168.100.88
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

[root@web-1 ~]# service network restart #重启网卡
[root@web-1 ~]# systemctl stop firewalld.service #关闭防火墙
[root@web-1 ~]# setenforce 0

[root@web-1 ~]# systemctl start httpd.service #启动网站服务

创建网站首页

[root@web-1 ~]# cd /var/www/html/
[root@web-1 ~]# echo "this is accp web" > index.html**

创建虚拟网卡

[root@web-1 ~]# cd /etc/sysconfig/network-scripts/
[root@web-1 ~]# cp ifcfg-lo ifcfg-lo:0
[root@web-1 ~]# vim ifcfg-lo:0

#删除原来所有信息,添加以下内容:
DEVICE=Lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.0
ONBOOT=yes

编写服务启动脚本

[root@web-1 ~]# cd /etc/init.d/
[root@web-1 ~]# vim web.sh #控制服务启动脚本

#!/bin/bash
VIP=192.168.100.100
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
sysctl -p > /dev/null 2>&1
echo "RealServer Start OK "
;;
stop)
ifconfig lo:0 down
route del $VIP /dev/null 2>&1
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0

[root@web-1 ~]# chmod +x web.sh

[root@web-1 ~]# service web.sh start

[root@web-1 ~]# ifup lo:0

在web2节点服务器上查看IP,可以看到虚拟IP就说明没问题:ifconfig

firefox "http://127.0.0.1/" & #直接访问网站

[root@web-1 ~]# service web.sh stop

[root@web-1 ~]# service web.sh start #建议重启服务

配置centos7-4

安装httpd软件包

[root@web-2 ~]# yum install httpd -y

调整网卡模式为仅主机并固定IP:192.168.100.99

[root@web-2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO=static

IPADDR=192.168.100.99
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

[root@web-2 ~]# service network restart #重启网卡
[root@web-2 ~]# systemctl stop firewalld.service #关闭防火墙
[root@web-2 ~]# setenforce 0

[root@web-2 ~]# systemctl start httpd.service
[root@web-2 ~]# systemctl status httpd.service

[root@web-2 ~]# cd /var/www/html/
[root@web-2 ~]# echo "this is benet web" > index.html

[root@web-2 ~]# cd /etc/sysconfig/network-scripts/
[root@web-2 ~]# cp ifcfg-lo ifcfg-lo:0

[root@web-2 ~]# vim ifcfg-lo:0

DEVICE=Lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.0
ONBOOT=yes

[root@web-2 ~]# cd /etc/init.d/
[root@web-2 ~]# vim web.sh #控制服务启动脚本

#!/bin/bash
VIP=192.168.100.100
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
sysctl -p > /dev/null 2>&1
echo "RealServer Start OK "
;;
stop)
ifconfig lo:0 down
route del $VIP /dev/null 2>&1
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0

[root@web-2 ~]# chmod +x web.sh

[root@web-2 ~]# service web.sh start

#开启虚拟网卡
[root@web-2 ~]# ifup lo:0

firefox "http://127.0.0.1/" & #直接访问网站

#关闭并重启服务
[root@web-2 ~]# service web.sh stop
[root@web-2 ~]# service web.sh start

使用Win7客户端测试

C:Usersczt>ping 192.168.100.100

正在 Ping 192.168.100.100具有 32 字节的数据:
来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64

192.168.100.100 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms

技术图片

keepalived部署

[root@dr1 ~]# cd /etc/keepalived/

[root@dr1 ~]# vim keepalived.conf

global_defs {
notification_email {br/>acassen@firewall.loc
failover@firewall.loc
br/>sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1 #指向本地
smtp_connect_timeout 30
router_id LVS_01 #指定名称,备份服务器不同名称,另一台为02
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}

vrrp_instance VI_1 {
state MASTER #备份服务器将MASTER换为BACKUP
interface eth0
virtual_router_id 10 #组号相同
priority 100 #优先级,备小于主
advert_int 1
authentication {
auth_type PASS
auth_pass abc123 #验证密码
}
virtual_ipaddress {
192.168.100.100 #虚拟IP
}
}

virtual_server 192.168.100.100 80 { #虚拟IP及端口号
delay_loop 6
lb_algo rr
lb_kind DR #改为DR
persistence_timeout 50
protocol TCP

real_server 192.168.100.88 80 {              #节点服务器1
    weight 1
    TCP_CHECK {
        connect_port 80
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
    }
}

real_server 192.168.100.99 80 {              #节点服务器2
    weight 1
    TCP_CHECK {                     #修改为TCP_CHECK
        connect_port 80              #添加端口
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
    }
}

}

#启动keepalived服务
[root@dr1 ~]# systemctl start keepalived.service

使用客户端测试
模拟down掉一台调度服务器,在win7上尝试互联服务器,如果在win7上还能ping通,就说明另一台调度服务器已经接替并开始工作

C:Usersczt>ping 192.168.100.100

正在 Ping 192.168.100.66 具有 32 字节的数据:
来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.100.100 的回复: 字节=32 时间<1ms TTL=64

192.168.100.100 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms

以上是关于群集——keepalived+LVS-DR+GFS+zabbix的主要内容,如果未能解决你的问题,请参考以下文章

LVS-DR+keepalived高可用群集

构建LVS-DR+keepalived 高可用群集

LVS-DR与 Keepalived群集

Web服务器群集——LVS-DR+Keepalived高可用集群

LVS-DR与Keepalived高可用群集

LVS负载均衡群集DR模式+Keepalived部署!