18.1クラスタ説明
よる機能は、2つのカテゴリに分類されています。高可用性と負荷分散
高可用性クラスタは、マシンがダウンしているときにサービスを提供するためのサービスを提供し続け、一般的に二つのサーバ、仕事、冗長などの他の一つであり、冗長性を引き継ぎます
オープンソースソフトウェアの高可用性:ハートビート、keepalivedの
ロードバランシングクラスタは、サーバーがバックエンドを処理配布するユーザの要求に責任がある販売代理店として、サーバーを持っている必要があり、このクラスタで、販売代理店に加えて、サーバーサービスをユーザーに提供することで、サーバの数は、少なくとも2
オープンソースの負荷ソフトウェアLVSのバランスを取る、そこにkeepalivedの、haproxy、nginxの、商用F5、NetScalerの
はじめに18.2 keepalivedの
ここでは、centos6いくつかの問題があるので、実験結果に影響を与え、高可用性クラスタのハートビートを達成するためにkeepalivedの使用します
VRRP(仮想ルータ冗長Protocl)を通じて実現keepalivedの可用性。
この契約は、同じ機能ルータはマスタの役割とN(N> = 1)バックアップの役割が存在することになるグループを形成するよりも存在します。
マスターVRRPプロトコルは、バックアップマスターがVRRPに送られたパケットを受信しないとき、それがダウンしてマスターを想定し、それぞれのバックアップマルチキャストフォームにデータパケットを送信します。その後、各バックアップの優先度に応じて新しい母校になった人を決定する必要があります。
keepalivedのは、三つのモジュール、すなわちコア、チェックして、VRRPを持っています。コアモジュールは、ヘルスチェックを担当するモジュールをチェックし、メインプロセス、メンテナンスおよびロードを開始し、グローバルコンフィギュレーションファイルを解析するための責任、keepalivedのの中核である場合には、VRRP VRRPモジュールは、合意を達成することです。
keepalivedので18.3 / 18.4 / 18.5の高可用性クラスタ構成
図1に示すように、マスターのために準備二つのマシン130と132,130、132は、バックアップであります
2は、2機が設置されているkeepalivedの
[ルート@ arslinux-01〜]#yumをインストール-y keepalivedの [ルート@ arslinux-02〜]#yumをインストール-y keepalivedの
図3に示すように、両方のマシンがnginxのをインストールする必要があり、以前に130にコンパイルされてインストールさ132は、yumをインストールする必要が
[ルート@ arslinux-02〜]#yumをインストール-y nginxの
4、メイン再編集上の/etc/keepalived/keepalived.conf
[ルート@ arslinux-01〜]#mvの/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[ルート@ arslinux-02〜]#VIM /etc/keepalived/keepalived.conf global_defs { notification_email { [email protected] } notification_email_from [email protected] SMTP_SERVER 127.0.0.1 smtp_connect_timeout 30 ROUTER_ID LVS_DEVEL } vrrp_script chk_nginx { スクリプト「の/ usr /local/sbin/check_ng.sh」 間隔3 } VI_1 {vrrp_instance 状態マスター ens33インタフェース 51 virtual_router_id プライオリティ100 advert_int 1 認証{ AUTH_TYPEのPASS auth_pass aminglinux> COM } virtual_ipaddressを{ 192.168.194.100 } track_script { chk_nginx } }
定義することはできないとの問題、電子メールのメールボックスを持っているnotification_email
定義することができない、メールでのメールボックス、問題notification_email_from
SMTP_SERVER 127.0.0.1
30 smtp_connect_timeout
ROUTER_ID LVS_DEVELを定義することはできません
断続的に通常の間隔を3秒3を検出するためのテストサービスをchk_nginx vrrp_scriptかどうか
VI_1 vrrp_instance関連する構成をマスター
そのバックアップがあるから、それがある場合の状態の役割は、マスターであります
ブロードキャストネットワークカードを送信するために使用されるインタフェース
virtual_router_idルーティングID
優先順位100重量
認証認証関連情報
AUTH_TYPE PASS認証タイプ、パスワードフォーム
auth_passパスワードは、文字列を定義するには
IPの合計からvirtual_ipaddressマスター、それは、VIP、ダウンする解決されたIPからの主よ、両方のホスト部194であります
以前にnginxのを確認しchk_nginx定義され、スクリプトをロードtrack_script
5、通常のスクリプトnginxのかどうかのチェックを編集
Vimの/usr/local/sbin/check_ng.sh#[arslinuxルート01〜@] #!/ binに/ bashのの #時間変数、ログインするための D = `日付--date今日+% Y%M%D_%をH:%のM:%S ' #数演算処理のnginx のn-PS -C = `nginxの--no-見出し| WC -l` #プロセスが0の場合、nginxのは、再びnginxの開始、および検出プロセスの数れる #さらに場合この時点では起動しないnginxのことを示す、0されることはkeepalivedの終了する必要が 続い; - [EQ "0" $ N]のIF を開始/etc/init.d/nginx | -l WC N2 = `--no-PS -Cのnginxの見出しを` [$ N2 -eq "0 "] IF、次に エコー" $ D nginxの下、ウィルkeepalivedのSTOP" >> /var/log/check_ng.log STOPがkeepalivedのsystemctl Fiの Fiを提供して
、nginxのプロセスの数を計算するためにトイレ-lコマンドプロセスの数が0に等しい場合、nginxのサービスが起動しない、あなたはnginxのサービスを起動し、起動後のプロセス値を表示する必要がある、または0の場合| PS -C nginxの--no-見出しを実行します説明nginxのはまだ起動しない、あなたは、ログ、トラブルシューティングを容易にエラーの日付を記述する必要があります。keepalivedの停止した後、メインが停止しkeepalivedの、それは自動的に、マスタースレーブがスタートkeepalivedの持っている混乱、およびスプリットブレインにならないように、サービスから。
参考リンク:https://note.youdao.com/ynoteshare1/index.html?id=17b7d082afd8d31b4fd5c48b5f93bcc1&type=note
6、755 /usr/local/sbin/check_ng.shにパーミッションを変更
[ルート@のarslinux-01〜]#chmodの755 /usr/local/sbin/check_ng.sh
7、開始keepalivedの
[ルート@ arslinux-01〜]#はkeepalivedの開始systemctl [ルート@ arslinux-01〜]#psのの補助を| grepをkeepalivedの 根0.0 0.1 122980 1412 8138?SS 22:43 0:00は/ usr / sbinに/ keepalivedの-D ルート8139 0.0 0.3 133940 3328?S 22:43 0:00の/ usr / sbinに/ keepalivedの-D ルート8140 0.1 0.2 133880 2860?S 22:43 0:00の/ usr / sbinに/ keepalivedの-D ルート8174 0.0 0.0 112724 992 PTS / 0 R + 22:43 0:00のgrep --color =オートkeepalivedの
nginxのは、自動的にロードするかどうかを確認する8、
[ルート@のarslinux-01〜]#psのの補助| grepをするのnginxの ルート7988 0.0 0.1 46052 1292?SS 21:48 0:00 nginxの:マスター・プロセスは/ usr / local / nginxの/ sbinに/ nginxの-c /usr/local/nginx/conf/nginx.conf 誰も7989 0.0 0.3 48540 3932?S 21:48 0:00 nginxの:ワーカープロセス 誰も7990 0.0 0.3 48540 3932?S 21:48 0:00 nginxの:ワーカープロセスの ルート8357 0.0 0.0 112724 988 PTS + 22:45 0:00のgrep --color =オートnginxの/ 0 R [ルート@ arslinux-01〜]#1 /etc/init.d/のnginxの停止 (systemctl経由)nginxの停止:[确定] [ルート@のarslinux-01〜]#psのの補助| grepをするのnginxの ルート8395 0.0 0.0 112724 984 PTS / 0 S + 22:45 0:00 grepの--color =自動nginxの [ルート@ arslinux-01〜]#psのの補助| grepをnginxの ルート0.0 0.1 46052 1296 8417?SS 22:45 0:00 nginxの:マスター・プロセスは/ usr / local / nginxの/ sbinに/ nginxの-c /usr/local/nginx/conf/nginx.conf 0.0 0.3 48540 3932 8421誰?S 22:45 0:00 nginxの:ワーカープロセス 誰0.0 0.3 48540 3932 8422?S午前22時45午後12時nginxのワーカープロセス / 0 R + 22:46午後12時のgrep --color =オートnginxのルート8466の0.0 0.0 112724 988 PTS
9、HTTPS://blog.51cto.com/11530642/2096227
10、/ var / log / messagesにログ
11、VIPは、IPCONFIGで見ることができないだけで、IPアドで見ることができます
[ルート@ arslinux-01〜]#IPが追加 1:LOを:<ループバックを、UP、LOWER_UP> MTU 65536のqdisc NOQUEUE状態UNKNOWNグループのデフォルトを1000年QLEN リンク/ループバック00:00:00:00:00:00 BRD午前0時:00:00:00:00 INET 127.0.0.1/8範囲のホストLO 永遠preferred_lft永遠valid_lft INET6 :: 1/128範囲ホストは 永遠にpreferred_lft valid_lft永遠 2:ens33:<ブロードキャスト、マルチキャスト、UP、LOWER_UP> MTU 1500のqdisc pfifo_fast 1000年QLENグループのデフォルトをアップステート リンク/エーテル00:0C:29:24:EA:F2 BRD FF:FF:FF:FF:FF:FF INET 192.168.194.130/24 BRD 192.168.194.255スコープグローバルnoprefixrouteのens33 valid_lft永遠preferred_lft永遠に INET 192.168.194.100/32スコープグローバルens33は 永遠に永遠にpreferred_lft valid_lft INET 192.168.194.150/24 BRD 192.168.194.255の範囲グローバル二noprefixrouteのens33:0 valid_lft永遠preferred_lft永遠 のinet6 FE80 :: C905:5e78:b916:41da / 64スコープリンクnoprefixroute 永遠preferred_lft永遠valid_lft 3:ens37:<ブロードキャスト、マルチキャスト、 UP、LOWER_UP> MTU 1500なqdisc状態UPグループ1000 QLENデフォルトpfifo_fast リンク/エーテル00:0C:29:24:EA:FC BRD FF:FF:FF:FF:FF:FF INET 192.168.100.1/24 BRDの192.168.100.255スコープグローバルnoprefixrouteのens37 valid_lft永遠preferred_lft永遠 FE80 INET6 :: F41:9da7:d8e3:10BA / 64スコープリンクnoprefixroute preferred_lft永遠に永遠にvalid_lft
設定する前に12、メインのiptablesとgetenforceからオフになっているファイアウォールを確認してください
13、/etc/keepalived/keepalived.confから設定ファイルを編集
[ルート@ arslinux-02〜]#mvの/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[ルート@のarslinux-02〜]#のVimの/etc/keepalived/keepalived.conf
global_defs {
{notification_email
}
notification_email_from [email protected]
SMTP_SERVER 127.0.0.1
30 smtp_connect_timeout
ROUTER_ID LVS_DEVEL
}
vrrp_script chk_nginx {
スクリプト「/usr/local/sbin/check_ng.sh」
インターバル3
}
vrrp_instance VI_1 {
状態のバックアップ
インタフェースens33
virtual_router_id 51
優先順位90
advert_int 1
認証{
AUTH_TYPE PASS
auth_pass aminglinux>コム
}
virtual_ipaddress {
192.168.194.100
}
track_script {
chk_nginx
}
}
参考リンク:https://note.youdao.com/ynoteshare1/index.html?id=b12b72e89f72aca6896e4f250f7b4ce2&type=note
バックアップとしての状態
プライマリと一貫性の両方virtual_router_id、VIP
100は、主優先90からメイン未満であります
14、nginxの編集をチェックし、通常のスクリプトか
Vimの/usr/local/sbin/check_ng.sh#[arslinuxルート02〜@] #!/ binに/ bashのの #時間変数、ログインするための D = `日付--date今日+% Y%M%D_%をH:%のM:%S ' #数演算処理のnginx のn-PS -C = `nginxの--no-見出し| WC -l` #プロセスが0の場合、nginxのは、再びnginxの開始、および検出プロセスの数れる #さらに場合nginxのがkeepalivedの終了する必要があります。この時点で開始しませ示し、0で 、その後; - [EQ "0" $ N]のIF nginxの起動systemctl WC -l` | N2 = `--no-PS -Cのnginxの見出し [$ N2 IF - EQ "0"];その後、 エコー"$ D nginxの下には、STOPをkeepalivedのだろう" >> /var/log/check_ng.log systemctl STOPはkeepalivedの Fiの Fiを提供して
nginxのはyumがインストールされている場合は、systemctl開始nginxのを開始するためにコマンドを使用することができます
755 /usr/local/sbin/check_ng.sh権限を変更するには15、
[ルート@のarslinux-02〜]#chmodの755 /usr/local/sbin/check_ng.sh
16、keepalivedのを開始
[ルート@ arslinux-02〜]#はkeepalivedの開始systemctl [ルート@ arslinux-02〜]#psのの補助を| grepをkeepalivedの 根0.0 0.1 122876 1412 7836?SS 23:14 0:00は/ usr / sbinに/ keepalivedの-D ルート7837 0.0 0.3 133836 3340?S 23:14 0:00の/ usr / sbinに/ keepalivedの-D ルート7838 0.0 0.2 133776 2872?S 23:14 0:00の/ usr / sbinに/ keepalivedの-D ルート7878 0.0 0.0 112724 992 PTS / 0 S + 23:14 0:00のgrep --color =オートkeepalivedの
から開始するかどうかの17、nginxのチェック
[ルート@のarslinux-02〜]#psのの補助| grepをするのnginxの ルート7813 0.0 0.2 125004 2108?Ssの午前23時11午前0時nginxの:マスター・プロセスは/ usr / sbinに/ nginxの nginxの0.0 0.3 125392 3148 7814?S夜11時11分午後12時nginxの:ワーカープロセスの ルート7976 0.0 0.0 112724 984 PTS / 0 R +午後11時15分午後12時のgrep --color =オートnginxの
18、メインブラウザアクセス
nginxの中で定義されている今回の訪問では、デフォルトの仮想サーバーのホームです
19、/usr/share/nginx/html/index.html上のデフォルトのページから、デフォルトのページのバックアップ、バックアップを変更
[ルート@のarslinux-02〜]#猫/usr/share/nginx/html/index.html
バックアップ、バックアップ
ブラウザからアクセス20、
21、IPが表示ipから追加します
[root@arslinux-02 ~]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:14:4f:d9 brd ff:ff:ff:ff:ff:ff inet 192.168.194.132/24 brd 192.168.194.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::4c99:ed43:5757:e772/64 scope link noprefixroute valid_lft forever preferred_lft forever
22、浏览器访问 vip 192.168.194.100,实际上就是 master,vip 在 master 上
23、测试高可用
测试1:关闭 主上 nginx,会重新启动,因为 keepalived
测试2:增加规则:iptables -I OUTPUT -p vrrp -j DROP,从上出现出现了 vip ,但 主上 vip 依然没有释放
访问 vip,依然是主上的默认虚拟服务器
测试3:停止主上的 keepalived,主上的 vip 被释放了
此时访问 vip 则是 从上的默认虚拟服务器
测试4:重启主上的 keepalived,访问 vip,马上回到了主上的默认虚拟服务器
24、mysql 也可以弄高可用,但是要确保两边数据一致
18.6 负载均衡集群介绍
主流开源软件 LVS、keepalived、haproxy、nginx等
其中LVS 属于4层(网络OSI 7层模型),nginx 属于7层,haproxy 既可以认为是4层,也可以当做7层使用
keepalived 的负载均衡功能其实就是 lvs
lvs 这种4层的负载均衡是可以分发除80外的其他端口通信的,比如 MySQL 的,而 nginx 仅仅支持 http,https,mail,haproxy 也支持MySQL这种
相比较来说,LVS 这种4层的更稳定,能承受更多的请求,而 nginx 这种7层的更加灵活,能实现更多的个性化需求
18.7 LVS介绍
LVS 是由国人章文嵩开发
流行度不亚于 apache 的 httpd,基于 TCP/IP 做的路由和转发,稳定性和效率很高
LVS 最新版本基于 Linux 内核2.6,有好多年不更新了
LVS 有三种常见的模式:NAT、DR、IP Tunnel
LVS 架构中有一个核心角色叫做分发器(Load balance),它用来分发用户的请求,还有诸多处理用户请求的服务器(Real Server,简称 rs)
LVS NAT模式(10台以下)
这种模式借助 iptables 的 nat 表来实现
用户的请求到分发器后,通过预设的 iptables 规则,把请求的数据包转发到后端的 rs 上去
rs 需要设定网关为分发器的内网 ip
用户请求的数据包和返回给用户的数据包全部经过分发器,所以分发器成为瓶颈
在 nat 模式中,只需要分发器有公网 ip 即可,所以比较节省公网 ip 资源
LVS IP Tunnel模式
这种模式,需要有一个公共的 IP 配置在分发器和所有rs上,我们把它叫做 vip
客户端请求的目标 IP 为 vip,分发器接收到请求数据包后,会对数据包做一个加工,会把目标 IP 改为 rs 的 IP,这样数据包就到了 rs 上
rs 接收数据包后,会还原原始数据包,这样目标 IP 为 vip,因为所有 rs 上配置了这个 vip,所以它会认为是它自己
结果反馈给客户端
NAT 就是 iptables 转发,IP Tunnel 把模板 ip 做更改
LVS DR模式
这种模式,也需要有一个公共的 IP 配置在分发器和所有 rs 上,也就是 vip
和IP Tunnel 不同的是,它会把数据包的 MAC 地址修改为 rs 的 MAC 地址
rs接收数据包后,会还原原始数据包,这样目标 IP 为 vip ,因为所有 rs 上配置了这个 vip,所以它会认为是它自己
结果反馈给客户端
18.8 LVS调度算法
轮询 Round-Robin rr
加权轮询 Weight Round-Robin wrr
最小连接 Least-Connection lc
加权最小连接 Weight Least-Connection wlc
基于局部性的最小连接 Locality-Based Least Connections lblc
带复制的基于局部性最小连接 Locality-Based Least Connections with Replication lblcr
目标地址散列调度 Destination Hashing dh
源地址散列调度 Source Hashing sh
18.9/18.10 LVS NAT模式搭建
准备工作
1、准备三台机器
分发器,简称 dir 192.168.194.130
rs1 192.168.194.132
rs2 192.168.194.133
2、给分发器添加一块网卡
ens37:192.168.174.100,本地 windows 上能 ping 通
3、三台机器上全部关闭 firewalld
4、三台机器安装 iptables-services,保存空规则
[root@arslinux-02 ~]# yum install -y iptables-services
[root@arslinux-02 ~]# systemctl start iptables
[root@arslinux-02 ~]# systemctl enable iptables
[root@arslinux-02 ~]# iptables -F
[root@arslinux-02 ~]# service iptables save
5、关闭selinux,编辑 /etc/selinux/config,状态改为 disable
6、将 rs1 和 rs2 的网关设置为分发器的 ip 地址 192.168.194.130
搭建工作
1、在 dir 上安装 ipvsadm
[root@arslinux-01 ~]# yum install -y ipvsadm
2、写脚本vim /usr/local/sbin/lvs_nat.sh
[root@arslinux-01 ~]# vim /usr/local/sbin/lvs_nat.sh #! /bin/bash # director 服务器上开启路由转发功能 echo 1 > /proc/sys/net/ipv4/ip_forward # 关闭icmp的重定向 echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects # 注意区分网卡名字,阿铭的两个网卡分别为ens33和ens37 echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects # director 设置nat防火墙 iptables -t nat -F iptables -t nat -X iptables -t nat -A POSTROUTING -s 192.168.194.0/24 -j MASQUERADE # director设置ipvsadm IPVSADM='/usr/sbin/ipvsadm' $IPVSADM -C $IPVSADM -A -t 192.168.174.100:80 -s wlc -p 3 $IPVSADM -a -t 192.168.174.100:80 -r 192.168.194.132:80 -m -w 1 $IPVSADM -a -t 192.168.174.100:80 -r 192.168.194.133:80 -m -w 1
3、测试
rs1 上
[root@arslinux-02 ~]# curl localhost backup,backup
rs2 上
[root@arslinux-02 ~]# curl localhost backup2,backup2
4、ipvsadm的规则:
[root@arslinux-01 ~]# 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.174.174:80 wlc persistent 3 -> 192.168.65.132:80 Masq 1 0 0 -> 192.168.65.133:80 Masq 1 0 1
5、可能连续几次访问该ip结果都是RS2,也许是缓存的原因
可以把lvs_nat.sh的IPVSADM规则第一条改为:轮询
$IPVSADM -A -t 192.168.174.100:80 -s rr
6、それは再SH
[ルート@のarslinux-01〜]#shをする/usr/local/sbin/lvs_nat.sh
7、カールしても、ネットワークIPの外に、結果を見て
アクセスは、RRを働いされている、非常に平均であります
実験は成功でした!
クラスノート
1、クラスタリングおよび分類
高可用性、負荷分散、分散
高可用性アーキテクチャを意味する2、
長いサービス利用可能性、安定性、ホットスタンバイを確認してください
3. keepalivedの原則
VRRPプロトコル仮想ルーティングプロトコル
作業は、プローブが正しく動作しているBC、問題A、の上に右に応じてB / Cから再選択します
https://blog.csdn.net/u013920085/article/details/21184143
図示4、LVS三つのモード
https://blog.51cto.com/jiekeyang/1839583
5、fullnatモード
https://ieevee.com/tech/2015/12/08/fullnat.html
これら四つの小さなLVSと使用シナリオの
https://www.jianshu.com/p/ce7ba9dfe103