云计算学习100天-第30天

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