Keepalived+LVS--实现IPVS的高可用+高性能的双主双业务架构详细配置流程及解析

前情提要:通过本篇博客,你可以学会keepalived+LVS实现高可用+高性能的web&mariadb双主双业务集群架构的详细架构原理,keepalived的基本初始化配置,还有该双主双业务架构的各个主机的详细环境配置以及keepalived的详细配置,最终可以实现IPVS的高可用+高性能的web&mariadb集群

一、实验环境配置

1.1 架构图

注意:IP地址请以主机环境清单为准。

1.2 主机环境清单

  • KA1
    • IP:172.25.254.50/24,NAT网卡,VIP:172.25.254.100/24,172.25.254.200/24
  • KA2
    • IP:172.25.254.60/24,NAT网卡,VIP:172.25.254.100/24,172.25.254.200/24
  • RS1
    • IP:172.25.254.10/24,NAT网卡
  • RS2
    • IP:172.25.254.20/24,NAT网卡

1.3 主机环境配置

1、配置RS1和RS2主机的IP地址

RS1如下

RS2如下

2、配置KA1和KA2主机的IP地址

KA1如下

KA2如下

以上IP地址请自行配置

3、配置KA1和KA2主机的本地解析

操作如下

bash 复制代码
[root@KA1 ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.50     KA1
172.25.254.60     KA2
172.25.254.10     RS1
172.25.254.20     RS2
[root@KA1 ~]# scp /etc/hosts 172.25.254.60:/etc/hosts 
hosts                                                                                      100%  244   488.6KB/s   00:00 

以上完成了KA1和KA2主机的本地解析配置

4、配置KA1和KA2的时间同步

KA1如下

KA1修改**/etc/chrony.conf** 配置文件第26行白名单并取消第29行注释,核心作用是:在网络中所有外部时间源都失效时,防止 Chrony 服务完全停止,并允许本地服务器继续为网络内的其他客户端提供时间同步服务

修改完成后重启chronyd并且设定开机自启动

bash 复制代码
[root@KA1 ~]# systemctl restart chronyd
[root@KA1 ~]# systemctl enable --now chronyd

KA2如下

修改**/etc/chrony.conf**修改时间服务器为KA1主机

然后重启并设定开机自启即可

bash 复制代码
[root@KA2 ~]# systemctl restart chronyd
[root@KA2 ~]# systemctl enable --now chronyd

最后检测KA2是否可以和KA1进行时间同步

可见时间同步成功,配置正确

至此实验主机环境配置结束

二、Keepalived初始化配置

首先分别在KA1和KA2上安装Keepalived并且设定开机自启动

bash 复制代码
# KA1
[root@KA1 ~]# dnf install keepalived.x86_64 -y
[root@KA1 ~]# systemctl enable --now keepalived

# KA2
[root@KA2 ~]# dnf install keepalived.x86_64 -y
[root@KA2 ~]# systemctl enable --now keepalived

2.1 日志分离

默认情况下。keepalived的日志会被保存在/var/log/messages文件中,这个文件中除了含有keepalived的日志外,还有其他服务的日志信息,这样不利于对于keepalived的日志进行查看

在KA1和KA2主机上均做如下配置,此处以KA1为例

bash 复制代码
[root@KA1 ~]# vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 6"
[root@KA1 ~]# systemctl restart keepalived.service

[root@KA1 ~]# vim /etc/rsyslog.conf
local6.*                                                /var/log/keepalived.log
[root@KA1 ~]# systemctl restart rsyslog.service


#测试
[root@KA1 log]# systemctl restart keepalived

[root@KA1 log]# ls /var/log/keepalived.log
keepalived.log

至此成功实现keepalived的日志分离

2.2 子配置文件

在主配置文件中如果写入过多的配置不利于对于主配置文件的阅读

以KA1为例

在keepalived的主配置/etc/keepalived/keepalived.conf文件加入以下内容,然后创建子配置文件目录

bash 复制代码
[root@KA1 ~]# mkdir /etc/keepalived/conf.d

以上完成了子配置文件目录的创建,后续配置keepalived时将配置文件放在该目录下即可

三、LVS相关环境配置

1、配置RS1和RS2回环网卡,以RS1为例

bash 复制代码
[root@RS1 system-connections]# cp eth0.nmconnection lo.nmconnection -p
[root@RS1 system-connections]# vim lo.nmconnection 

[connection]
id=lo
type=loopback
interface-name=lo


[ipv4]
method=manual
address1=127.0.0.1/8
address2=172.25.254.100/32
address3=172.25.254.200/32

[root@RS1 system-connections]# nmcli connection reload
[root@RS1 system-connections]# nmcli connection up lo 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/5)
[root@RS1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 172.25.254.100/32 scope global lo
       valid_lft forever preferred_lft forever
    inet 172.25.254.200/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:41:fa:79 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname ens160
    inet 172.25.254.10/24 brd 172.25.254.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::2360:d7ac:9af2:bb39/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

2、禁止arp响应,以RS1为例

bash 复制代码
[root@RS1 ~]# vim /etc/sysctl.conf

net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.lo.arp_ignore=1

[root@RS1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1

3、KA1和KA2安装LVS

bash 复制代码
[root@KA1 ~]# dnf install ipvsadm -y

四、业务配置

本次实验中我们使用该架构同时提供web服务和数据库服务,首先我们需要在RS1和RS2中部署服务

3.1 部署web服务和数据库服务

3.1.1 RS1和RS2http服务配置

RS1和RS2均安装apache

bash 复制代码
[root@RS1 ~]# dnf install httpd -y

RS1配置测试网页

bash 复制代码
[root@RS1 ~]# echo 172.25.254.10-RS1 > /var/www/html/index.html
[root@RS1 ~]# curl 172.25.254.10
172.25.254.10-RS1

RS2配置测试网页

bash 复制代码
[root@RS2 ~]# echo 172.25.254.20-RS2 > /var/www/html/index.html
[root@RS2 ~]# curl 172.25.254.20
172.25.254.20-RS2

注意:实际生产环境中需要两台服务主机提供相同服务,此处仅为了后续测试而使用不同的html页面内容

3.1.2 RS1和RS2mariadb服务配置

RS1与RS2均安装mariadb-server并启动

bash 复制代码
[root@RS1 ~]# dnf install mariadb-server -y
[root@RS1 ~]# systemctl enable --now mariadb

RS1与RS2均创建角色

bash 复制代码
MariaDB [(none)]> create user 'dragon'@'%' identified by '123';
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> grant all on *.* to 'dragon'@'%';
Query OK, 0 rows affected (0.002 sec)

注意:该数据库配置实际上是分开的两个服务,RS1和RS2并没有实现数据库数据共享,若需要配置成同一个数据库服务,请看博主置顶博文https://blog.csdn.net/2301_79481320/article/details/155075834?fromshare=blogdetail&sharetype=blogdetail&sharerId=155075834&sharerefer=PC&sharesource=2301_79481320&sharefrom=from_link

3.2 配置keepalived虚拟路由

修改KA1主配置文件如下

bash 复制代码
[root@KA1 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
	doubledragon@163.com
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id KA1
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 1
   vrrp_gna_interval 1
   vrrp_mcast_group4 224.0.0.44
}

include /etc/keepalived/conf.d/*.conf

vrrp_instance WEB_VIP {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:0
    }
}

修改KA2主配置文件如下

bash 复制代码
[root@KA2 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
	doubledragon@163.com
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id KA2
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 1
   vrrp_gna_interval 1
   vrrp_mcast_group4 224.0.0.44
}

include /etc/keepalived/conf.d/*.conf

vrrp_instance WEB_VIP {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:0
    }
}

3.3 修改keepalived子配置文件

KA1如下

bash 复制代码
[root@KA1 ~]# vim /etc/keepalived/conf.d/web.conf

virtual_server 172.25.254.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol TCP

    real_server 172.25.254.10 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 1
            retry 3
            delay_before_retry 1
      }
    }

    real_server 172.25.254.20 80 {
        weight 1
        TCP_CHECK {
          connect_timeout 5
          retry 3
          delay_before_retry 3
          connect_port 80
      }
    }
}

[root@KA1 ~]# vim /etc/keepalived/conf.d/datebase.conf
virtual_server 172.25.254.200 3306 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol TCP

    real_server 172.25.254.10 3306 {
        weight 1
        TCP_CHECK {
          connect_timeout 5
          retry 3
          delay_before_retry 3
          connect_port 3306
      }
    }

    real_server 172.25.254.20 3306 {
        weight 1
        TCP_CHECK {
          connect_timeout 5
          retry 3
          delay_before_retry 3
          connect_port 3306
      }
    }
}

KA2如下

bash 复制代码
[root@KA2 ~]# vim /etc/keepalived/conf.d/web.conf 


    real_server 172.25.254.10 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 1
            retry 3
            delay_before_retry 1
      }
    }

    real_server 172.25.254.20 80 {
        weight 1
        TCP_CHECK {
          connect_timeout 5
          retry 3
          delay_before_retry 3
          connect_port 80
      }
    }
}


[root@KA2 ~]# vim /etc/keepalived/conf.d/datebase.conf
virtual_server 172.25.254.200 3306 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol TCP

    real_server 172.25.254.10 3306 {
        weight 1
        TCP_CHECK {
          connect_timeout 5
          retry 3
          delay_before_retry 3
          connect_port 3306
      }
    }

    real_server 172.25.254.20 3306 {
        weight 1
        TCP_CHECK {
          connect_timeout 5
          retry 3
          delay_before_retry 3
          connect_port 3306
      }
    }
}

3.4 重启服务并测试

重启KA1和KA2服务

bash 复制代码
[root@KA1 ~]# systemctl restart keepalived.service

查看KA1和KA2的VIP

可见VIP没有问题

进行web访问测试

可见web访问测试没有问题

进行数据库访问测试

可见没有问题

VIP漂移测试

停止KA1的keepalived

可见VIP成功漂移到KA2,没有问题

至此该实验完成

相关推荐
吕司2 小时前
Linux——System V 共享内存
linux·运维·服务器
予枫的编程笔记2 小时前
【Kafka基础篇】Kafka高可用核心:ISR机制与ACK策略详解,吃透可靠性与吞吐量权衡
java·kafka·消息队列·高可用·分布式系统·isr机制·ack策略
芥子沫2 小时前
Windows 命令行和 Linux 差在哪里?
linux·命令行
IvanCodes2 小时前
七、Linux Shell 与脚本基础
linux·云计算
_OP_CHEN2 小时前
【Linux系统编程】(三十七)信号捕捉全链路拆解|从内核态切换到 sigaction 实战
linux·运维·操作系统·进程·c/c++·信号·信号捕捉
S-码农2 小时前
Linux 进程间通信 —— 匿名管道和命名管道
linux
71ber2 小时前
RHCSE 实战笔记:Keepalived 企业级高可用集群深度解析
linux·服务器·keepalived
一个人旅程~2 小时前
everything的快速搜索怎么达成?
linux·windows·电脑
市安2 小时前
Swarm集群管理
运维·nginx·集群·镜像·swarm