LVS_Director + keepalivedの高可用性プロジェクトの戦闘

1.Keepalived VRRPはじめに

keepalived是什么
    keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。

keepalived工作原理
    keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。(云服务器不支持VRRP)

    虚拟路由冗余协议,可以认为是实现高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
=========================================================================================
脑裂(裂脑):
Keepalived的BACKUP主机在收到不MASTER主机报文后就会切换成为master,如果是它们之间的通信线路出现问题,无法接收到彼此的组播通知,但是两个节点实际都处于正常工作状态,这时两个节点均为master强行绑定虚拟IP,导致不可预料的后果,这就是脑裂。
解决方式:
1、添加更多的检测手段,比如冗余的心跳线(两块网卡做健康监测),ping对方等等。尽量减少"裂脑"发生机会。(指标不治本,只是提高了检测到的概率);
2、做好对裂脑的监控报警(如邮件及手机短信等或值班).在问题发生时人为第一时间介入仲裁,降低损失。例如,百度的监控报警短倍就有上行和下行的区别。报警消息发送到管理员手机上,管理员可以通过手机回复对应数字或简单的字符串操作返回给服务器.让服务器根据指令自动处理相应故障,这样解决故障的时间更短.
3、爆头,将master停掉。然后检查机器之间的防火墙。网络之间的通信

2.プロジェクト準備

4台の仮想マシンを準備し、リアル(実サーバが唯一のWebテストに使用される)を行うために、2台のプロキシサーバー、2台のサーバを行う
1、keepalivedのように2台のLVSサーバを選択します(マスターバックアップ)。
ウェブサービスを提供するために、nginxのサーバー実際に必要
VIPを生成keepalivedの高可用性サーバーのインストールを行うために2、2つのLVSを

[root@master ~]# 192.168.13.128                   主节点
[root@backup ~]# 192.168.13.129                   备用节点
[root@real-server1 ~]# 192.168.13.133             第一台真实服务器
[root@real-server2 ~]# 192.168.13.137             第二台真实服务器

3.nginxインストール

二つの実サーバnginxのインストールに、Webサーバーとしてテストするために使用

给所有的机器关闭防火墙和selinux
[root@real-server1 ~]# systemctl stop firewalld && setenforce 0
给第一台真实服务器安装nginx
[root@real-server1 ~]# cd /etc/yum.repos.d/
[root@real-server1 yum.repos.d]# vim nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
[root@real-server1 yum.repos.d]# yum install yum-utils -y
[root@real-server1 yum.repos.d]# yum install nginx -y
[root@real-server1 yum.repos.d]# systemctl start nginx  #启动
给第二台真实服务器安装nginx
[root@real-server2 ~]# cd /etc/yum.repos.d/
[root@real-server2 yum.repos.d]# vim nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
[root@real-server2 yum.repos.d]# yum install yum-utils -y
[root@real-server2 yum.repos.d]# yum install nginx -y
[root@real-server2 yum.repos.d]# systemctl start nginx  #启动

4.LVS_Director + keepalivedの

KeepAlived在该项目中的功能:
1. 管理IPVS的路由表(包括对RealServer做健康检查)
2. 实现调度器的HA(高可用)
Keepalived所执行的外部脚本命令建议使用绝对路径
=================================================================================

実施形態の手順:
1.マスタ/スレーブスケジューラソフトウェアのインストールと設定

192.168.13.128
[root@master ~]# yum -y install ipvsadm keepalived
[root@master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak   #备份
[root@master ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id directory1   #只是名字而已,辅节点改为directory2(两个名字一定不能一样)
}

vrrp_instance VI_1 {
    state MASTER        #定义主还是备,备用的话写backup
    interface ens33     #VIP绑定接口
    virtual_router_id 80  #整个集群的调度器一致(在同一个集群)
    priority 100         #(优先权)back改为50(50一间隔)
    advert_int 1         #检查间隔,默认为1s
    authentication {
        auth_type PASS      #主备节点认证
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.13.144/24    #VIP(自己网段的)
    }
}
virtual_server 192.168.13.144 80 {    #LVS配置
	delay_loop 3  #启动3个进程
	lb_algo rr     #LVS调度算法
	lb_kind DR     #LVS集群模式(路由模式)
	nat_mask 255.255.255.0
	protocol TCP      #健康检查使用的协议
	real_server 192.168.13.133 80 {
		weight 1
		inhibit_on_failure   #当该节点失败时,把权重设置为0,而不是从IPVS中删除
		TCP_CHECK {          #健康检查
			connect_port 80   #检查的端口
			connect_timeout 3  #连接超时的时间
			}
		}
	real_server 192.168.13.137 80 {
		weight 1
		inhibit_on_failure
		TCP_CHECK {
			connect_timeout 3
			connect_port 80
			}
		}
}
192.168.13.129
[root@backup ~]# yum install -y ipvsadm keepalived
[root@backup ~]# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@backup ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id directory2
}
vrrp_instance VI_1 {
    state BACKUP    #设置为backup
    interface ens33
    nopreempt        #设置到back上面,不抢占资源
    virtual_router_id 80
    priority 50   #备用改为50
    advert_int 1	#检测间隔1s
    authentication {
        auth_type PASS
        auth_pass 1111            #认证类型和密码主备一样,要不然无法互相认证
    }
    virtual_ipaddress {
        192.168.13.144/24    #抢占的VIP也一样
    }
}
virtual_server 192.168.13.144 80 {
	delay_loop 3
	lb_algo rr
	lb_kind DR
	nat_mask 255.255.255.0
	protocol TCP
	real_server 192.168.13.133 80 {
		weight 1
		inhibit_on_failure
		TCP_CHECK {
			connect_port 80
			connect_timeout 3
			}
		}
	real_server 192.168.13.137 80 {
		weight 1
		inhibit_on_failure
		TCP_CHECK {
			connect_timeout 3
			connect_port 80
			}
		}
}

2.スタートkeepalivedの(両方のスタート待機)

[root@master ~]# systemctl start keepalived
[root@backup ~]# systemctl start keepalived
开机自启(可以不设置)
[root@master ~]# systemctl enable keepalived
[root@backup ~]# systemctl enable keepalived
[root@master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.13.144:80 rr
  -> 192.168.13.133:80            Route   1      0          0         
  -> 192.168.13.137:80            Route   1      0          0         
[root@backup ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.13.144:80 rr
  -> 192.168.13.133:80            Route   1      0          0         
  -> 192.168.13.137:80            Route   1      0          0         

3.すべてのRSの構成(nginx1、nginx2)
設定されたサーバ、テストのすべてのRS

192.168.13.133
[root@real-server1 ~]# ip addr add dev lo 192.168.13.144/32
[root@real-server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  #忽略arp广播
[root@real-server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确ip地址回包
[root@real-server1 ~]# sysctl -p
[root@real-server1 ~]# echo "this is first real-server" > /usr/share/nginx/html/index.html
[root@real-server1 ~]# vim /etc/nginx/nginx.conf
    keepalive_timeout  0;           #设置长链接
[root@real-server1 ~]# nginx -s reload
192.168.13.137
[root@real-server2 ~]# ip addr add dev lo 192.168.13.144/32
[root@real-server2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  #忽略arp广播
[root@real-server2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确ip地址回包
[root@real-server2 ~]# sysctl -p
[root@real-server2 ~]# echo "this is second real-server"> /usr/share/nginx/html/index.html
[root@real-server2 ~]# vim /etc/nginx/nginx.conf
    keepalive_timeout  0;#默认keepalive_timeout  65;
[root@real-server2 ~]# nginx -s reload
#修改后端nginx服务器的长连接是为了方便测试

注:
あなたがページにアクセスすることができない場合、それは間違っているプロファイルかもしれません。あなたは、この記事では、コードの直接コピーされている場合は、私は、あなたがすべてのコメントを削除するには、設定ファイルにいくつかの余分なスペースなどを結果として時々の入力方法は、よい質問を示唆しています。
192.168.13.144の独自のセットへのVIPアクセス
ここに画像を挿入説明
ここに画像を挿入説明
ビュー2台のノードサーバーは、マスターノードのVIPを見つける
ここに画像を挿入説明
プライマリサーバのノードがダウンした場合(私たちは停止したサービスをテストするために使用される)、この時点で、VIPは、自分のスタンバイノードにドリフトします。
ここに画像を挿入説明
しかし、ユーザーがShiqueが感じるアクセス
ここに画像を挿入説明
ここに画像を挿入説明
ページがまだ使い続けることができ、これは、高可用性があります。

公開された25元の記事 ウォン称賛72 ビュー10000 +

おすすめ

転載: blog.csdn.net/baidu_38803985/article/details/104952422