云计算学习100天-第30天

发布于:2025-08-30 ⋅ 阅读:(19) ⋅ 点赞:(0)

LVS-DR模式的实现

主机名                      IP地址                           角色
pubserver       eth0:192.168.88.240        ansible主机
client              eth0->192.168.88.10           客户端   
lvs1                eth0 -> 192.168.88.5          lvs服务器    
web1             eth0->192.168.99.100         web服务器
web2             eth0->192.168.99.200         web服务器


ansible主机配置

# 调整主机清单文件,将webservers主机组内主机IP地址为88段
cd cluster/
vim inventory
[clients]
client ansible_ssh_host=192.168.88.10

[webservers]
web1 ansible_ssh_host=192.168.88.100
web2 ansible_ssh_host=192.168.88.200

[lbs]
lvs1 ansible_ssh_host=192.168.88.5

[all:vars]
ansible_ssh_user=root
ansible_ssh_pass=a

#测试
ansible all -m ping

# 配置各主机yum源
vim 05_config_yum.yml
---
- name: config yum
  hosts: all
  tasks:
    - name: rm dir          #删除目录
      file:
        path: /etc/yum.repos.d/
        state: absent

    - name: create dir      #创建目录
      file:
        path: /etc/yum.repos.d/
        state: directory
        mode: '0755'

    - name: copy repo       #发送repo文件
      copy:
        src: files/local88.repo
        dest: /etc/yum.repos.d/

ansible-playbook 05_config_yum.yml

#配置webservers主机内主机web服务
ansible-playbook 02_config_web.yml
curl http://192.168.88.100
Welcome to web1
curl http://192.168.88.200
Welcome to web2

#配置测试DR模式
# 配置虚拟IP地址(VIP)
vim 06_config_dr_vip.yml
---
- name: install soft        #安装network-scripts软件
  hosts: lbs,webservers
  tasks:
    - name: install network-scripts     #安装软件
      yum:
        name: network-scripts
        state: present

- name: config lvs vip      #配置lvs1主机eth0网卡虚拟接口IP地址
  hosts: lbs
  tasks:
    - name: config file                 #生成ifcfg-eth0:0配置文件
      copy:
        content: |
          TYPE=Ethernet
          DEVICE=eth0:0
          NAME=eth0:0
          IPADDR=192.168.88.15
          PREFIX=24
          BROADCAST=192.168.88.255
          ONBOOT=yes
        dest: /etc/sysconfig/network-scripts/ifcfg-eth0:0
      notify: active vip
  handlers:
    - name: active vip                  #激活eth0:0
      shell: ifup eth0:0

- name: config web vip      #配置webservers主机lo虚拟接口IP地址
  hosts: webservers
  tasks:
    - name: config file                 #生成ifcfg-lo:0配置文件
      copy:
        content: |
          DEVICE=lo:0
          NAME=lo:0
          IPADDR=192.168.88.15
          PREFIX=32
          NETWORK=192.168.88.15
          BROADCAST=192.168.88.15
          ONBOOT=yes
        dest: /etc/sysconfig/network-scripts/ifcfg-lo:0
      notify: active vip
  handlers:
    - name: active vip                  #激活lo:0
      shell: ifup lo:0

ansible-playbook 06_config_dr_vip.yml
ansible lbs,webservers -a "ip a s | grep 192.168"
lvs1 | CHANGED | rc=0 >>
    inet 192.168.88.5/24 brd 192.168.88.255 scope global noprefixroute eth0
    inet 192.168.88.15/24 brd 192.168.88.255 scope global secondary eth0:0
web2 | CHANGED | rc=0 >>
    inet 192.168.88.15/32 brd 192.168.88.15 scope global lo:0
    inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0
web1 | CHANGED | rc=0 >>
    inet 192.168.88.15/32 brd 192.168.88.15 scope global lo:0
    inet 192.168.88.100/24 brd 192.168.88.255 scope global noprefixroute eth0


# 配置web服务器内核参数,两种方法二选一即可
##参数解析
net.ipv4.conf.all.arp_ignore
    Linux 系统中的一个内核参数,用于控制是否忽略来自所有网络接口的 ARP(地址解析协议)请求
    0:表示不忽略来自所有网络接口的 ARP 请求,即对所有接口发来的 ARP 请求都会进行响应
    1:表示忽略来自所有网络接口的 ARP 请求,即不会对任何接口发来的 ARP 请求进行响应

net.ipv4.conf.lo.arp_ignore
    Linux 系统中的一个内核参数,用于控制是否忽略本地回环接口(lo)上的 ARP(地址解析协议)请求
    0:表示不忽略本地回环接口上的 ARP 请求,即对本地回环接口上的 ARP 请求进行响应
    1:表示忽略本地回环接口上的 ARP 请求,即不对本地回环接口上的 ARP 请求进行响应

net.ipv4.conf.all.arp_announce
    Linux 内核参数之一,用于控制源 IP 地址在 ARP 请求中的发布方式
    0:系统使用物理接口上的 IP 地址作为 ARP 请求中的源 IP 地址。这是默认设置,适用于大多数情况。
    1: 系统使用主机上的所有 IP 地址中与目标 IP 地址在同一子网上的 IP 地址作为 ARP 请求中的源 IP 地址。这个选项适用于多地址绑定的服务器,确保 ARP 请求使用与目标 IP 在同一子网上的 IP 地址,以提高 ARP 的准确性和性能。
    2: 系统使用主机上配置的主 IP 地址作为 ARP 请求中的源 IP 地址。这个选项适用于某些特殊网络环境,例如负载均衡的集群中,确保 ARP 请求使用主 IP 地址,以避免 ARP 缓存中的旧条目导致流量被错误地发送到主机的其他地址

net.ipv4.conf.lo.arp_announce
    Linux 内核参数之一,用于控制本地回环接口(lo)上 ARP 请求中的源 IP 地址的发布方式
    0: 表示系统将使用物理接口上的 IP 地址作为 ARP 请求中的源 IP 地址。这是默认设置,适用于大多数情况。在本地回环接口上,通常情况下使用此设置,因为本地回环接口用于本地通信,不需要进行 ARP 请求。
    1: 表示系统将使用主机上的所有 IP 地址中与目标 IP 地址在同一子网上的 IP 地址作为 ARP 请求中的源 IP 地址。这个选项适用于多地址绑定的服务器,确保 ARP 请求使用与目标 IP 在同一子网上的 IP 地址,以提高 ARP 的准确性和性能
    2: 表示系统将使用主机上配置的主 IP 地址作为 ARP 请求中的源 IP 地址。这个选项适用于某些特殊网络环境,例如负载均衡的集群中,确保 ARP 请求使用主 IP 地址,以避免 ARP 缓存中的旧条目导致流量被错误地发送到主机的其他地址

#第一种方法
vim 07_config_dr_sysctl.yml
---
- name: config kernel args
  hosts: webservers
  tasks:
    - name: config arp_ignore   #配置忽略arp广播
      sysctl:
        name: "{{ item }}"
        value: "1"
        sysctl_set: true
        sysctl_file: /etc/sysctl.conf
      loop:
        - net.ipv4.conf.all.arp_ignore
        - net.ipv4.conf.lo.arp_ignore
      notify: flush args
    - name: config arp_announce #配置禁止arp宣告
      sysctl:
        name: "{{ item }}"
        value: "2"
        sysctl_set: true
        sysctl_file: /etc/sysctl.conf
      loop:
        - net.ipv4.conf.all.arp_announce
        - net.ipv4.conf.lo.arp_announce
      notify: flush args
  handlers:
    - name: flush args          #刷新sysctl.conf文件配置
      shell: "sysctl -p"

ansible-playbook 07_config_dr_sysctl.yml
#第二种方法
vim 07_config_dr_sysctl2.yml
---
- name: config kernel args
  hosts: webservers
  tasks:
    - name: modify kernel args
      blockinfile:
        path: /etc/sysctl.conf
        block: |
          net.ipv4.conf.all.arp_ignore=1
          net.ipv4.conf.lo.arp_ignore=1
          net.ipv4.conf.all.arp_announce=2
          net.ipv4.conf.lo.arp_announce=2
      notify: flush args
  handlers:
    - name: flush args
      shell: "sysctl -p"

ansible-playbook 07_config_dr_sysctl2.yml

ansible webservers -a "tail -6 /etc/sysctl.conf"

lvs1配置LVS-DR模式规则


ipvsadm -Ln

ipvsadm -A -t 192.168.88.15:80 -s wrr
ipvsadm -a -t 192.168.88.15:80 -r 192.168.88.100:80 -w 1 -g
ipvsadm -a -t 192.168.88.15:80 -r 192.168.88.200:80 -w 2 -g
ipvsadm -Ln  

客户端访问测试,必须使用LVS集群之外的主机作为客户端


for i in {1..6}
 do
 curl http://192.168.88.15
 done

Welcome to web2
Welcome to web2
Welcome to web1
Welcome to web2
Welcome to web2
Welcome to web1


网站公告

今日签到

点亮在社区的每一天
去签到