1.1 keepalivedの高可用性ソフトウェア
参考:
HAProxy:
https://blog.csdn.net/l835311324/article/details/83031084
HTTPS://blog.csdn.net/qq_41772936/article/details/80718014
https://blog.51cto.com/3381847248/ 1977073
キープアライブ:
https://blog.csdn.net/celeste7777/article/details/49096167
https://v3u.cn/a_id_117
1、keepalived--モニタリング検査
注:モニタリング検査、VRRP冗長化プロトコル:キープアライブソフトウェアは2つの機能を持っています
1.キープアライブWebサーバーの役割は、状態を検出することであるWebサーバがダウンしている場合、障害がクラスタマシンから削除されます
2. keepalieveは、クラスタサービスは、以下の3つから正常チェックします。
1)レイヤ3: ICMPプロトコルのpingテストによって
2)レイヤ4: Webサービスなどは、アクティブポートにするかどうかのチェックを80 keepalivedの
3)レイヤ7:設定サーバのチェックによれば、ユーザは正常に動作しているかどうか
2、keepalivedの - VRRP冗長プロトコル原理
注機構は、キャンペーンを通じてVIPの方法を決定する場合、VRRP仮想ルーティング冗長プロトコルは、障害の問題の一点です
1. keepalivedの可用性VRRPプロトコル通信を採用し、それは、キャンペーンを通じて決定VRRPスタンバイ機構であります
常に、VRRPブロードキャストパケットを送信します。2. keepalivedのプライマリサーバは、生きていることを伝えるために準備しました
3.バックアップ・マシン・モニター・ブロードキャストパケットは、すべての新しいマスターのマシン構成ファイルの優先順位選挙によって調製し、人為的にマスターが使用できない、マスターによって送信された場合
4.新しいホストは、リソース関連のサービスを引き継ぐビジネスの継続性を確保するために開始します
1.2キープアライブ+ haproxy高可用性クラスタ
1、実際のキープアライブクラスタ展開アーキテクチャ図
1)haproxy構成
1. haproxyフロントエンドモジュールは、ユーザ要求へのインターフェースを担当するように構成され、バックエンドの定義は、(実際のキープアライブホストグループ内の)バックエンドサーバのセットを定義することができ
前記フロントエンドは、複数のバックエンドを持つことができ、バックエンドは、異なるフロントエンドコールの数(可能バックエンドAPIインターフェースは、複数のフロントエンドを呼び出すことができます)
3.特定のプロセスは、ユーザの要求により指定された処理要求に、フロントエンドを受信したときに私達の構成をバックエンドということです。
4.バックエンドは、その後、実際のバックエンドサーバに要求を分散します
2)キープアライブ設定
1.2つのキープアライブのサーバは、仮想IP、同時にサービス・エージェントのできる唯一のキープアライブ・マスター・クラスターを監視しながら、
キープアライブ・マスターがダウンしているとき2.、キープアライブ・スレーブ・マスターはすぐにクラスタおよび政府機関のサービスに置き換えられます
1.3を使用する]ドッキングウィンドウ-コンは、キープアライブに配置しました
1、環境説明(借入COMPOSE試験)
「」「環境、専用仮想マシン、およびその後ドッカー-構成する3つのアナログドッカー容器HAProxy、キープアライブ・マスター、スレーブ、キープアライブの使用を開始」「」
# HAProxy:0.0.0.0:8000を(ネットワークドッカーは、構成ホストポート8000 HAProxy)にマッピング #キープアライブマスタ:172.20.128.2(VIP:172.20.128.4:80) #キープアライブスレーブ:172.20.128.3 (VIP:172.20.128.4:80)
2、展開キープアライブプロジェクトコード
バージョン:" 3 " のサービス: nginx_master: ビルド: コンテキスト:。/ dockerfile:。/ Dockerfileの ボリューム: - ./index-master.html:/usr/share/nginx/html/ index.htmlを - ./favicon.ico:/usr/share/nginx/html/ favicon.icoを - ./keepalived-master .confを:の/ etc / keepalivedの/ keepalived.conf ネットワーク: 静的 - ネットワーク: ipv4_address: 172.20.128.2 cap_add: - NET_ADMIN nginx_slave: ビルド: コンテキスト:。/ dockerfile:。/ Dockerfileの ボリューム: - ./index-slave.html:/usr/share/nginx/html/ index.htmlを - ./favicon.ico:/usr/share/nginx/html/ favicon.icoを - ./keepalived-slave .conf:の/ etc / keepalivedの/ keepalived.conf ネットワーク: 静的 - ネットワーク: ipv4_address: 172.20.128.3 cap_add: - NET_ADMINの プロキシ: イメージ:haproxy: 1.7- 高山 ポート: - 8000:6301個 のボリューム: - ./haproxy.cfg: / usr / local / etc / haproxy / haproxy.cfg ネットワーク: -静電気にネットワーク ネットワーク: 静的 - ネットワーク: IPAM: 設定: -サブネット:172.20.0.0/16
# 使用的基础镜像源(alpine是精简的Linux内核) FROM nginx:1.13.5-alpine # 更新最新本地镜像源 && 升级软件 RUN apk update && apk upgrade # 安装keepalived等相关软件 RUN apk add --no-cache bash curl ipvsadm iproute2 openrc keepalived && \ rm -f /var/cache/apk/* /tmp/* # 将nginx和keepalive启动脚本从宿主机拷贝到docker容器中 COPY entrypoint.sh /entrypoint.sh # 给启动脚本添加权限 RUN chmod +x /entrypoint.sh # 启动服务 CMD ["/entrypoint.sh"]
# vrrp_script区域主要用来做健康检查的,当时检查失败时会将vrrp_instance的priority减少相应的值 vrrp_script chk_nginx { script "pidof nginx" interval 2 } # 设置外网的VIP(虚拟ip) vrrp_instance VI_1 { # 可以是MASTER或BACKUP,不过当其他节点keepalived启动时会将priority比较大的节点选举为MASTER state MASTER # 对外提供服务的网络接口,用来发VRRP包 interface eth0 # 取值在0-255之间,用来区分多个instance的VRRP组播, 同一网段中该值不能重复,并且同一个vrrp实例使用唯一的标识 virtual_router_id 33 # 用来选举master的,要成为master,那么这个选项的值最好高于其他机器50个点,该项取值范围是1-255(在此范围之外会被识别成默认值100) priority 200 # 发VRRP包的时间间隔,即多久进行一次master选举,可以认为是健康查检时间间隔,单位为秒 advert_int 1 # 表示发送VRRP单播报文使用的源IP地址,当前keepalive真实ip unicast_src_ip 172.20.128.2 # 表示对端接收VRRP单播报文的IP地址(防止上游交换机禁用广播) unicast_peer { 172.20.128.3 } authentication { # 定义认证类型 auth_type PASS # 认证密码 这些相当于暗号 auth_pass letmein } # keepalive对外的虚拟地址,访问虚拟地址会访问keepalive的master地址 virtual_ipaddress { 172.20.128.4/24 dev eth0 } # track_script用于追踪脚本,用以实现某个检测功能 track_script { chk_nginx } } # 配置keepalive virtual_server 172.20.128.2 80 { delay_loop 15 lb_algo rr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP # keepalive代理的真实服务ip real_server 172.16.16.177 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 4 } } # keepalive代理的真实服务ip real_server 172.16.16.178 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 4 } } }
vrrp_script chk_nginx { script "pidof nginx" interval 2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 33 priority 100 advert_int 1 unicast_src_ip 172.20.128.3 unicast_peer { 172.20.128.2 } authentication { auth_type PASS auth_pass letmein } virtual_ipaddress { 172.20.128.4/24 dev eth0 } track_script { chk_nginx } }
# global常用配置项 global # haproxy默认没有记录日志的文件,需要依赖rsyslog收集,具体方法,首先在配置文件的global段添加一条配置项 log 127.0.0.1 local0 # 最大并发连接数;默认为2000 maxconn 4096 daemon # 要启动的haproxy的进程数量;默认为1个,推荐为1个 nbproc 4 defaults log 127.0.0.1 local3 mode http option dontlognull option redispatch retries 2 maxconn 2000 balance roundrobin timeout connect 5000ms timeout client 5000ms timeout server 5000ms # frontend部署前端服务,负责给用户请求一个接口 frontend main # 监听本docker容器中所有访问6301端口的请求 # 监听端口,即haproxy提供web服务的端口,和lvs的vip端口类似 bind *:6301 # 定义一个服务器组 http_back default_backend webserver # backend可以定义后端一组服务器 backend webserver server ngxin_master 172.20.128.4:80 check inter 2000 rise 2 fall 5 # 具体流程就是当frontend接受到用户请求,根据我们的配置交给指定的backend处理请求,backend再将请求分发到真正的后端服务器
#!/bin/sh /usr/sbin/keepalived -n -l -D -f /etc/keepalived/keepalived.conf --dont-fork --log-console & nginx -g "daemon off;"
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>主机</title> <style> #box{ margin: 0px auto; font-family: 'Times New Roman', Times, serif; font-size: 30px; font-style: initial; color: aliceblue; } body{ background-color: black } </style> </head> <body> <div id="box"> 主机 </div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>从机</title> <style> #box{ margin: 0px auto; font-family: 'Times New Roman', Times, serif; font-size: 30px; font-style: initial; color: aliceblue; } body{ background-color: black } </style> </head> <body> <div id="box"> 从机 </div> </body> </html>
3、测试keepalive
1)使用docker-compose开启keepalive集群
[root@linux-node4 nginx_keepalive]# docker-compose up # 使用docker-compose部署keepalive(是在交互窗口运行的)
[root@linux-node4 nginx_keepalive]# docker ps # 部署完成后新打开一个终端查看运行状态
CONTAINER ID IMAGE PORTS NAMES
8fc6f148f02d nginx_keepalive_nginx_master 80/tcp nginx_keepalive_nginx_master_1
5c94af00a93e nginx_keepalive_nginx_slave 80/tcp nginx_keepalive_nginx_slave_1
93afe48d9b86 haproxy:1.7-alpine 0.0.0.0:8000->6301/tcp nginx_keepalive_proxy_1
2)关闭keepalive-master模拟机器故障测试自动切换
[root@linux-node4 compose_lnmp]# docker stop nginx_keepalive_nginx_master_1 # 关闭keepalive-master模拟机器故障
[root@linux-node4 compose_lnmp]# docker ps # 取到keepalive-master已经关闭
CONTAINER ID IMAGE PORTS NAMES
c21d0edda6d3 nginx_keepalive_nginx_slave 80/tcp nginx_keepalive_nginx_slave_1
ab283ebcfaf1 haproxy:1.7-alpine 0.0.0.0:8000->6301/tcp nginx_keepalive_proxy_1
[root@linux-node4 nginx_keepalive]# docker rm -f $( docker ps -a | grep keepalive |awk '{print $1}') # 如果要停用最好删除创建的docker镜像
3)项目地址
https://gitee.com/xiaonq110/nginx_keepalive.git