配置LVS NAT模式

集群是我在工作中遇到最多的问题,今天分享一下我对于集群的感触

里面包含LVS负载均衡集群NAT模式如何配置从头到尾的配置

集群的定义

将很多机器组织到一起,作为一个整体对外提供服务

集群在扩展性、性能方面都可以做到很灵活

任务调度是集群的核心技术

集群分类
  • 负载均衡集群:Load Balance(LB)客户端负载在计算机集群中尽可能的平均分摊
  • 高可用集群:High Availability(HA)避免单点故障,当一个系统发生故障,可以快速迁移
  • 高性能计算:High Performance Computing(HPC)
集群的目的

提高性能

降低成本

提高可扩展性

增强可靠性

负载均衡集群(LVS)

lvs是Linux Virtual Server,是实现负载均衡集群

lvs是一个虚拟服务器集群系统

将真实服务器集群虚拟成一台服务器,对外提供服务,同时在真实的服务器中实现均衡负载

当一定量的服务器作为一个整体对外提供服务,并且分摊压力,称这些服务器为负载均衡集群

LVS是一个优秀的负载均衡方案,理论上能够无限水平扩展,使服务器能够应对海量数据的冲击。

LVS优点是:

高可用,高性能,低成本,服务器应用集群

LVS集群的组成

前端:负载均衡层,由一台或多台负载调度器构成   LB

中端:服务器群组层,由一组实际运行应用服务的服务器构成  SA

后端:数据共享存储层,提供共享存储空间的共享区域   SS

LVS术语
  • DS (调度器):LVS服务器
  • RS(真实服务器Real Server:提供服务的服务器)
  • VS:(虚拟服务器)
  • VIP:虚拟地址,提供给用户访问的地址
  • DIP:指定地址,LVS服务器上与真实服务器通信的地址
  • RIP:真实地址,真实服务器的地址
  • CIP:客户端的IP

LVS调度算法

LVS调度算法是LVS对于请求的分发方式

DS(调度器)在向RS(真实服务器)分发请求,实现负载均衡时有10种左右的算法,常用的有4种

轮洵(rr) 加权轮询(wrr)

  最少连接(lc){当连接数相同时采用加权轮询算法} 加权最少连接(wlc)

LVS的工作模式:
  • NAT:网络地址转换模式
  • DR:路由模式
  • TUN:隧道模式

ipvsadm

ipvsadm命令是LVS在应用层的管理命令

可以通过这个命令去进行管理LVS的配置

他是一个工具也是一条命令,用于管理LVS的策略规划

-A: 添加虚拟服务器

-E: 编辑虚拟服务器

-D: 删除虚拟服务器

-t: 添加tcp服务器

-u: 添加udp服务器

-s: 指定负载调度算法。

-a: 添加虚拟服务器后,向虚拟服务器中加入真实服务器

-r: 指定真实服务器

-w: 为节点服务器设置权重

-m: 指定工作模式为NAT

-g: 指定工作模式为DR

举例:

1,创建虚拟服务器

ipvsadm -A -t 192.168.88.5:80 -s rr

命令  添加虚拟服务器  添加TCP服务器   调度器IP   指定调度算法   轮询

2,向虚拟服务器中添加RIP(真实服务器IP)

 ipvsadm -a -t 192.168.88.5:80 -r 192.168.99.100 -w 1 -m

命令  添加虚拟服务器后向里面添加真实服务器   调度器IP   指定真实服务器   真实服务器IP

为节点服务器设置权重 指定工作模式为NAT

3,删除lvs虚拟服务器配置

ipvsadm -D -t 192.168.88.5:80

命令  删除虚拟服务器  添加TCP服务器  调度器IP

NAT地址转换模式

调度器将用户的报文请求的VIP(虚拟IP地址)改写成选定的RS(提供服务的真实主机)

同时报文的目标端口也会修改成选定的RS端口,最后报文请求发送到选定的RS中

RS在得到数据后,RS返回数据给到用户时,需要再次经过调度器将报文的原地址和源端口改成VIP和相应端口

而后将数据发送给客户,完成整个负载均衡

在NAT方式下,用户的请求和响应报文都必须经过DS重写

当用户越来越多时,调度器的处理能力被称为瓶颈

在使用NAT时确保lvs1的ip转发功能已经打开。该功能需要改变内核参数

1,查看ip转发功能的内核参数

sysctl -a    # 查看所有的内核参数
sysctl -a | grep ip_forward  # 查看ip_foward参数
net.ipv4.ip_forward = 1   # 1表示打开转发,0表示关闭转发

2,设置打开ip_forward功能   etc/sysctl.conf,默认为开启

!!!

现在开始

  • 环境准备

    • pubserver:eth0->192.168.88.240,eth1->192.168.99.240
    • client1:eth0->192.168.88.10,网关192.168.88.5
    • lvs1: eth0 -> 192.168.88.5;eth1->192.168.99.5
    • web1:eth1->192.168.99.100;网关192.168.99.5
    • web2:eth1->192.168.99.200;网关192.168.99.5

       

# 创建4台虚拟机

[root@myhost ~]# vm clone client1 lvs1 web{1..2}


# 初始化虚拟机

[root@myhost ~]# virsh console client1  # 连接client1控制台

localhost login: root

Password: a

# 登陆之后,将以下内容粘贴到终端

hostnamectl set-hostname client1

nmcli connection modify "System eth0" con-name eth0

nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.88.10/24 autoconnect yes ipv4.gateway 192.168.88.5

nmcli connection down eth0

nmcli connection up eth0


# 退出

[root@localhost ~]# exit

# 退出之后,按ctrl+]可回到真机


# 真机通过ssh连接client1

[root@myhost ~]# rm -f ~/.ssh/known_hosts 

[root@myhost ~]# ssh 192.168.88.10



# 配置第2台机器作为lvs1

[root@myhost ~]# virsh console lvs1

localhost login: root

Password: a


# 登陆之后,将以下内容复制到命令行

hostnamectl set-hostname lvs1

nmcli connection modify "System eth0" con-name eth0

nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.88.5/24 autoconnect yes

nmcli connection down eth0

nmcli connection up eth0


rm -f /etc/sysconfig/network-scripts/ifcfg-eth1

nmcli connection add con-name eth1 ifname eth1 type ethernet autoconnect yes ipv4.method manual ipv4.addresses 192.168.99.5/24

reboot     # 重启系统,使得eth1网卡生效


# 按ctrl+]可回到真机


# 真机通过ssh连接lvs1

[root@myhost ~]# ssh 192.168.88.5




# 配置第3台机器作为web1

[root@myhost ~]# virsh console web1

localhost login: root

Password: a


# 登陆之后,将以下内容复制到命令行

hostnamectl set-hostname web1

nmcli connection modify "System eth0" con-name eth0

nmcli connection modify eth0 autoconnect no

rm -f /etc/sysconfig/network-scripts/ifcfg-eth1

nmcli connection add con-name eth1 ifname eth1 type ethernet autoconnect yes ipv4.method manual ipv4.addresses 192.168.99.100/24 ipv4.gateway 192.168.99.5

reboot


# 按ctrl+]可回到真机


# 真机通过ssh连接web1

[root@myhost ~]# ssh 192.168.99.100


# 配置第4台机器作为web2

[root@myhost ~]# virsh console web2

localhost login: root

Password: a


# 登陆之后,将以下内容复制到命令行

hostnamectl set-hostname web2

nmcli connection modify "System eth0" con-name eth0

nmcli connection modify eth0 autoconnect no

rm -f /etc/sysconfig/network-scripts/ifcfg-eth1

nmcli connection add con-name eth1 ifname eth1 type ethernet autoconnect yes ipv4.method manual ipv4.addresses 192.168.99.200/24 ipv4.gateway 192.168.99.5

reboot


# 按ctrl+]可回到真机


# 真机通过ssh连接web2

[root@myhost ~]# ssh 192.168.99.200
  • 虚拟机已关闭selinux和防火墙 。
  • 在pubserver上准备管理环境
# 创建工作目录

[root@pubserver ~]# mkdir cluster

[root@pubserver ~]# cd cluster/


#创建主配置文件

[root@pubserver cluster]# vim ansible.cfg

[defaults]

inventory = inventory

host_key_checking = false  # 不检查主机密钥


# 创建主机清单文件及相关变量

[root@pubserver cluster]# vim inventory

[clients]

client1 ansible_host=192.168.88.10


[webservers]

web1 ansible_host=192.168.99.100

web2 ansible_host=192.168.99.200


[lb]

lvs1 ansible_host=192.168.88.5


[all:vars]   # all是ansible自带的组,表示全部主机

ansible_ssh_user=root

ansible_ssh_pass=a


# 创建文件目录,用于保存将要拷贝到远程主机的文件

[root@pubserver cluster]# mkdir files


# 编写yum配置文件

[root@pubserver cluster]# vim files/local88.repo

[BaseOS]

name = BaseOS

baseurl = ftp://192.168.88.240/dvd/BaseOS

enabled = 1

gpgcheck = 0


[AppStream]

name = AppStream

baseurl = ftp://192.168.88.240/dvd/AppStream

enabled = 1

gpgcheck = 0


[rpms]

name = rpms

baseurl = ftp://192.168.88.240/rpms

enabled = 1

gpgcheck = 0

[root@pubserver cluster]# vim files/local99.repo

[BaseOS]

name = BaseOS

baseurl = ftp://192.168.99.240/dvd/BaseOS

enabled = 1

gpgcheck = 0


[AppStream]

name = AppStream

baseurl = ftp://192.168.99.240/dvd/AppStream

enabled = 1

gpgcheck = 0


[rpms]

name = rpms

baseurl = ftp://192.168.99.240/rpms

enabled = 1

gpgcheck = 0


# 编写用于上传yum配置文件的playbook

[root@pubserver cluster]# vim 01-upload-repo.yml

---

- name: config repos.d

  hosts: all

  tasks:

    - name: delete repos.d  # 删除repos.d目录

      file:

        path: /etc/yum.repos.d

        state: absent


    - name: create repos.d  # 创建repos.d目录

      file:

        path: /etc/yum.repos.d

        state: directory

        mode: '0755'


- name: config local88      # 上传repo文件到88网段

  hosts: clients,lb

  tasks:

    - name: upload local88

      copy:

        src: files/local88.repo

        dest: /etc/yum.repos.d/


- name: config local99      # 上传repo文件到99网段

  hosts: webservers

  tasks:

    - name: upload local99

      copy:

        src: files/local99.repo

        dest: /etc/yum.repos.d/

        

[root@pubserver cluster]# ansible-playbook 01-upload-repo.yml
配置LVS NAT模式步骤

配置2台web服务器

# 创建首页文件,文件中包含ansible facts变量

[root@pubserver cluster]# vim files/index.html

Welcome from {{ansible_hostname}}


# 配置web服务器

[root@pubserver cluster]# vim 02-config-webservers.yml

---

- name: config webservers

  hosts: webservers

  tasks:

    - name: install nginx  # 安装nginx

      yum:

        name: nginx

        state: present


    - name: upload index   # 上传首页文件到web服务器

      template:

        src: files/index.html

        dest: /usr/share/nginx/html/index.html


    - name: start nginx    # 启动服务

      service:

        name: nginx

        state: started

        enabled: yes


[root@pubserver cluster]# ansible-playbook 02-config-webservers.yml


# 在lvs1上测试到web服务器的访问

[root@lvs1 ~]# curl http://192.168.99.100

Welcome from web1

[root@lvs1 ~]# curl http://192.168.99.200

Welcome from web2

安装LVS

[root@pubserver cluster]# vim 04-inst-lvs.yml

---

- name: install lvs

  hosts: lb

  tasks:

    - name: install lvs  # 安装lvs

      yum:

        name: ipvsadm

        state: present

        

[root@pubserver cluster]# ansible-playbook 04-inst-lvs.yml

配置LVS

# 为web服务器创建虚拟服务器,使用rr调度算法

[root@lvs1 ~]# ipvsadm -A -t 192.168.88.5:80 -s rr

# 查看配置

[root@lvs1 ~]# ipvsadm -Ln  # L是列出,n是使用数字,而不是名字


# 向虚拟服务器中添加RIP

[root@lvs1 ~]# ipvsadm -a -t 192.168.88.5:80 -r 192.168.99.100 -w 1 -m

[root@lvs1 ~]# ipvsadm -a -t 192.168.88.5:80 -r 192.168.99.200 -w 2 -m

# 查看配置

[root@lvs1 ~]# ipvsadm -Ln


# 验证

[root@client1 ~]# for i in {1..6}

> do

> curl http://192.168.88.5

> done

Welcome from web2

Welcome from web1

Welcome from web2

Welcome from web1

Welcome from web2

Welcome from web1


# 删除配置。(如果配置有错,用以下命令删除重配置)

[root@lvs1 ~]# ipvsadm -D -t 192.168.88.5:80



# 修改调度模式为加权轮询

[root@lvs1 ~]# ipvsadm -E -t 192.168.88.5:80 -s wrr

# 验证配置

[root@client1 ~]# for i in {1..6}; do curl http://192.168.88.5; done

Welcome from web2

Welcome from web2

Welcome from web1

Welcome from web2

Welcome from web2

Welcome from web1

你可能感兴趣的:(lvs,linux,运维,服务器)