cluster(3)

(一) lvs-fullnat

fullnat模式的性能虽然不如dr模式,但是,fullnat支持多vlan,再rs是不同的vlan的情况下,明显使用fullnat是很好的选择。

fullnat的基本原理:假定用户端的ip是cip,vs上有两个ip,一个是vip,还有lip,lip可以是不同网段的一组ip,rs的ip为rip,当客户请求进来,经过vs的时候,再vs出发生一次snat,将cip转化成lip,再由vs到rs的时候又发生了一次dnat,将vip转化成rip,同样的请求返回时,也经历了两次nat,所以一共经历4次nat,从而达到了可以支持多vlan的情况。

client (cip) --->  vs (vip,lip)  ---> rs (rip)
         <---               <---

但是在这种情况下,只有一台vs,会导致该vs的负载过大,加入keepalived也只能提高稳定性,并不能解决高吞吐量的问题,因此一般会进行一个lvs集群,keepalived可以对rs进行健康检查,在lvs集群前面加上一个路由器或者交换机,使用ospf协议,用户请求到达路由器(或者交换机)后,通过原地址、端口和目的地址、端口的hash,将链接分配到集群中的某一台LVS上,LVS通过内网向后端转发请求,后端再将数据返回给用户,整个会话完成。rs之间的session表要定期同步,以防止其中一个rs出现问题而造成session丢失的情况。

fullnat模式要重新编译内核,下面是步骤:
一 编译内核:

1 从官网上下载rpm源码包,并用rpmbuild重新编译为二进制包

kernel-2.6.32-220.23.1.el6.src.rpm
Lvs-fullnat-synproxy.tar.gz

网址:kb.linuxvirtualserver.org

1 rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm        ###安装rpm包###
2 cd rpmbuild/                  ###安装完后会在当前目录下
3 yum install -y rpm-build
4 cd /root/rpmbuild/SPECS/

5 rpmbuild -bp kernel.spec            ###解开源码打补丁###

**************************************************************************
6 yum install redhat-rpm-config  patchutils xmlto asciidoc binutils-devel newt-devel python-devel perl-ExtUtils-Embed hmaccalc    ###依赖性###
**************************************************************************

7 yum install asciidoc-8.4.5-4.1.el6.noarch.rpm newt-devel-0.52.11-3.el6.x86_64.rpm  slang-devel-2.2.1-1.el6.x86_64.rpm
cd rpmbuild/SPECS/
**************************************************************************

8 rpmbuild -bp kernel.spec        ###解决完依赖性后再次解开源码打补丁###

9 tar zxf Lvs-fullnat-synproxy.tar.gz

10 cd lvs-fullnat-synproxy/

11 cp lvs-2.6.32-220.23.1.el6.patch ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/

12 cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/

13 patch -p1 < lvs-2.6.32-220.23.1.el6.patch    ###打补丁###

14 vim Makefile
内容:
EXTRAVERSION = -220.23.1.el6    ###扩展版本,你所编译的版本###

15 make

16 make modules_install        ###安装模块

17 make install            ###安装的是引导文件,在/boot目录下就有你所编译的内核文件vmlinuz-2.6.32-220.23.1.el6###

18 vim /boot/grup/grub.conf    ###引导文件要修改,因为你所编好的内核文件就加在原有版本的上面,因此default的要改成0,开机时才会进入你所编译的内核版本###

内容:
default=0        ###改成0才会在进入系统时访问你所编译的版本###
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.32-220.23.1.el6)    ###你所编译的版本####
        root (hd0,0)
        kernel /vmlinuz-2.6.32-220.23.1.el6 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-220.23.1.el6.img
title Red Hat Enterprise Linux (2.6.32-431.el6.x86_64)        ###原有的系统内核版本####
        root (hd0,0)
        kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-431.el6.x86_64.img

二 realserver  kernel

步骤与内核编译相同,不过打补丁是打toa补丁,toa补丁是为让realserver拿到客户端的ip地址,如果不许要可以不编译

三 编译keepalived

1 cd lvs-fullnat-synproxy/

2 tar  zxf lvs-tools.tar.gz

3 cd tools/keepalived/

4 ./configure --with-kernel-dir="/lib/modules/`uname -r`/build"

5 make

6 make install

###编译ipvsadm###

1 cd lvs-fullnat-synproxy/tools/ipvsadm/

2 make

3 make install

4 ipvsadm --help            ###可以看见lvs的模式里多了一个fullnat###

5  ipvsadm -l                ###(size=4194304)变为2的22次方,原来只有4096,一但是高吞吐量的时候就有可能发生丢包的现象####

(二)keepalived+nginx

两个节点一样的操作:

1 vim  /usr/local/lnmp/nginx/conf/nginx.conf

内容:

upstream westos {
        server 172.25.78.3:80;
        server 172.25.78.4:80;

}

server{
                listen 80;
                server_name www.westos.org;
                location / {
                        proxy_pass http://westos;
                }
        }

2 vim /opt/nginx_check.sh

#!/bin/bash
curl http://127.0.0.1/index.html -o /dev/null -s || nginx
if [ $? -ne 0 ]; then
/etc/init.d/keepalived  stop   &> /dev/null
fi

3 vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
vrrp_script nginx_check {
        script /opt/nginx_check.sh
        interval 2
        }
global_defs {
   notification_email {
        [email protected]
   }
   notification_email_from [email protected]        ###还有一个节点为server2####
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER                ###还有一个节点写backup###
    interface eth0
    virtual_router_id 51
    priority 100                ###还有一个节点的数字要比100低###
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.78.100
    }
    track_script {
        nginx_check
        }
}

4 /etc/init.d/keepalived start
5 nginx

测试:

1
[[email protected] Desktop]# curl www.westos.org
<h1>server3-www.westos.org</h1>
[[email protected] Desktop]# curl www.westos.org
<h1>server3-www.westos.org</h1>
[[email protected] Desktop]# curl www.westos.org
<h1>server4-www.westos.org</h1>
[[email protected] Desktop]# curl www.westos.org
<h1>server3-www.westos.org</h1>

2 当server1的keepalived停止了,server2接管资源

[[email protected] conf]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:ac:6c:6d brd ff:ff:ff:ff:ff:ff
    inet 172.25.78.2/24 brd 172.25.78.255 scope global eth0
    inet 172.25.78.100/32 scope global eth0
    inet6 fe80::5054:ff:feac:6c6d/64 scope link
       valid_lft forever preferred_lft forever

[[email protected] Desktop]# curl www.westos.org
<h1>server4-www.westos.org</h1>
[[email protected] Desktop]# curl www.westos.org
<h1>server3-www.westos.org</h1>
[[email protected] Desktop]# curl www.westos.org
<h1>server3-www.westos.org</h1>
[[email protected] Desktop]# curl www.westos.org
<h1>server4-www.westos.org</h1>

3 当server1的nginx停止了

[[email protected] conf]# nginx -s stop
[[email protected] Desktop]# curl www.westos.org
<h1>server3-www.westos.org</h1>
[[email protected] Desktop]# curl www.westos.org
<h1>server4-www.westos.org</h1>

时间: 2024-12-14 08:42:01

cluster(3)的相关文章

Redis Cluster集群部署搭建

在Oracle的路上走了许多年,换换感觉,尝试一下新的知识,也是一个不错的感觉.Redis,一个超轻量化的内存数据库,只做一小块数据库功能实现,却非常优秀的一个产品.今天,就分享一下安装Redis集群的过程. 搭建redis集群,建议至少需要准备3台服务器,共搭建6个节点,3个master,3个slave,并且要求3个master节点不能全部跑到同一台服务器上,保证节点安全,3台服务器的配置相同,使用redistest账号搭建,对应的端口是7000/7001/7002端口 我的集群分配如下,每个

ActiveMQ集群Master-Slave + Broker Cluster模式

一.简介 Master-Slave集群: 由至少3个节点组成,一个Master节点,其他为Slave节点.只有Master节点对外提供服务,Slave节点处于等待状态.当主节点宕机后,从节点会推举出一个节点出来成为新的Master节点,继续提供服务. 优点是可以解决多服务热备的高可用问题,缺点是无法解决负载均衡和分布式的问题. Broker Cluster集群: Broker-Cluster部署方式中,各个broker通过网络互相连接,并共享queue.当broker-A上面指定的queue-A

redis cluster (2) 相关命令参考及慢查询

实例关闭命令 redid-cli  shutdown  说明:关闭时强制 bgsave 所以需要一些时间    注:在start时,需要先加载数据到内存,数据加载完毕之后 redis 才会listen 端口 集群相关命令 1.CLUSTER INFO 打印集群的信息   2.CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息.  3.CLUSTER FAILOVER 手动故障转移,需要在转移的主节点的从节点上执行 节点 相关命令 1.CLUSTER MEE

HA Cluster 之 OpenAIS---corosync

OpenAIS---corosync  =============================================================================== 概述: =============================================================================== 回顾: HA解决方案:OpenAIS(开放式应用接口标准)  1.介绍 ★HA解决方案: vrrp协议:keepalived SA

MariaDB数据库介绍之四、Galera Cluster

一.Galera Cluster Galera是一个MySQL(也支持MariaDB,Percona)的同步多主集群软件,Galera集群的复制功能基于Galeralibrary实现,为了让MySQL与Galera library通讯,特别针对MySQL开发了wsrep API. 二.Galera  Cluster的功能和优势 功能: multi-master,即所有节点可以同时读写数据库 自动的节点成员控制,失效节点自动被清除 新节点加入数据自动复制 并行复制,行级 优势: 因为是multi-

Windows 配置Reids集群 Redis Cluster

1. 下载安装Redis Redis官方不支持Windows,但是Microsoft Open Tech group在 GitHub上开发了一个Win64的版本,下载地址为: 下载Redis 启动服务 redis-server redis.windows.conf 客户端连接 redis-cli.exe -h 127.0.0.1 -p 6379 2. 安装Ruby并配置环境 安装Ruby,Windows可以安装RubyInstaller,下载地址: http://railsinstaller.o

Windows Server2016+SQL Server 2016 Cluster安装及配置

Windows Server2016+SQL Server 2016 Cluster 安装及配置 我们知道,近期微软正式发布了Windows Server2016和SQL Server Cluster 2016,所以借此机会来尝试一下Windows Server2016+SQL Server Cluster 2016安装及配置,对于相关功能的优化及升级需要在官网上自己查看整理.大概就是windows server2016跟windows10页面框架结构差不多,SQL Server2016从安装上

MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解

Percona XtraDB Cluster简称PXC.Percona Xtradb Cluster的实现是在原mysql代码上通过Galera包将不同的mysql实例连接起来,实现了multi-master的集群架构.下图中有三个实例,组成了一个集群,而这三个节点与普通的主从架构不同,它们都可以作为主节点,三个节点是对等的,这种一般称为multi-master架构,当有客户端要写入或者读取数据时,随便连接哪个实例都是一样的,读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节

【Redis】Redis学习(二) master/slave、sentinal、Cluster简单总结

项目中用到Redis,所以准备学习一下,感觉Redis的概念还是很多的,什么主从模式.Sentinal模式.集群模式的,一下子都晕了,我觉得还是有必要先理清这些基本概念再说. 一.单节点实例 单节点实例还是比较简单的,平时做个测试,写个小程序如果需要用到缓存的话,启动一个Redis还是很轻松的,做为一个key/value数据库也是可以胜任的.单节点部署参照:http://www.cnblogs.com/yiwangzhibujian/p/7053840.html 中的初级教程. 二.主从模式(m

Configure Red Hat Enterprise Linux shared disk cluster for SQL Server

下面一步一步介绍一下如何在Red Hat Enterprise Linux系统上为SQL Server配置共享磁盘集群(Shared Disk Cluster)及其相关使用(仅供测试学习之用,基础篇) 一.      创建共享磁盘和 Cluster 微软官方配置文档:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure. Linux Cluster结构