LVS-DRモード+ Keepalived展開実験
序文
理論についてあまり知らない人は、私が以前に書いたブログの
リンクをチェックすることができます:https : //blog.csdn.net/m0_47219942/article/details/108368922。
ラボ環境
-
会社のウェブサイトの負荷容量をさらに改善するために、会社は既存のウェブサイトプラットフォームを拡張し、LVSに基づく負荷分散クラスターを構築することを決定しました。クラスターのアクセス効率を考慮して、管理者はLVSクラスターのDRモードを採用し、共有ストレージデバイスは内部プライベートネットワークに格納されます
-
5つのcentos7仮想マシン
- LVS1:192.168.100.130
- LVS2:192.168.100.129
- Web1:192.168.100.201
- Web2:192.168.100.202
- VIP:192.168.100.10
- 勝利7:192.168.100.100
実験トポロジー図
目的
win7クライアントは、lvsスケジューラーのドリフトIPアドレスにアクセスすることにより、Webノードサーバーのコンテンツに正常にアクセスできます。
スケジューラ構成
- 両方のLVSサーバーにツールキットをインストールする
yum install keepalived ipvsadm -y 'keepalived:双机热备要用到的,ipvsadm:调度管理要用'
- 両方のLVSサーバーがルーティングと転送をオンにし、リダイレクトをオフにします
vim /etc/sysctl.conf
'尾行插入下段配置'
net.ipv4.ip_forward=1
'proc响应关闭重定向功能'
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost ~]# sysctl -p '重载配置,立即生效'
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
- 両方のLVSサーバーがネットワークカードをホストオンリーモードに変更します
- 両方のLVSサーバーは、ens33のIPアドレスとens33:0のⅥPアドレスで構成されています
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0
[root@localhost network-scripts]# vim ifcfg-ens33:0 '配置虚拟ip地址'
'删除原本内容,添加以下配置'
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
[root@localhost network-scripts]# vim ifcfg-ens33
'...省略内容,修改为static'
BOOTPROTO=static
'...省略内容,尾行添加内容'
IPADDR=192.168.100.130
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0
[root@localhost network-scripts]# vim ifcfg-ens33:0 '配置虚拟ip地址'
'删除原本内容,添加以下配置'
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
[root@localhost network-scripts]# vim ifcfg-ens33
'...省略内容,修改为static'
BOOTPROTO=static
'...省略内容,尾行添加内容'
IPADDR=192.168.100.129
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
- 両方のLVSサーバーがサービス管理を容易にするスクリプトを作成します
cd /etc/init.d
vim dr.sh
#'编辑以下脚本内容'
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10 #'虚拟IP'
RIP1=192.168.100.201 #'真实web服务器ip'
RIP2=192.168.100.202
case "$1" in
start)
/sbin/ipvsadm --save > /etc/sysconfig/ipvsadm #'保存配置'
systemctl start ipvsadm #'启动服务'
/sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
/sbin/route add -host $VIP dev ens33:0 #'添加路由网段信息'
/sbin/ipvsadm -A -t $VIP:80 -s rr #'指定虚拟服务访问入口,指定轮询算法'
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g #'指定真实服务器,-g表示dr模式'
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
echo "ipvsadm starting [ok]"
;;
stop)
/sbin/ipvsadm -C #'清空缓存'
systemctl stop ipvsadm #'关闭服务'
ifconfig ens33:0 down #'关闭接口'
route del $VIP #'删除路由信息'
echo "ipvsadm stoped [ok]"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then #'判断文件存在与否决定状态'
echo "ipvsadm stoped"
exit 1
else
echo "ipvsadm Runing [ok]"
fi
;;
*)
echo "Usage:$0 {start|stop|status}"
exit 1
esac
exit 0
[root@localhost init.d]# chmod +x dr.sh
[root@localhost init.d]# service dr.sh start
ipvsadm starting [ok]
[root@localhost init.d]# systemctl stop firewalld.service
[root@localhost init.d]# setenforce 0
2つのノードサーバーを構成する
- 2つのノードサーバーにhttpdサービスをインストールして構成する
yum install httpd -y
- VIPをバインドする2つのノードIPアドレスを構成する
- LVS-DRでは、2つのノードサーバーを構成してVIPアドレスをバインドする必要があります
- VIPアドレスは、Web応答パケットの送信元アドレスとしてのみ使用され、クライアントのアクセス要求を監視しません
- ホストオンリーモードに変更されます
- 2つのノードサーバーは、ens33のIPアドレスとlo:0のVIPアドレスを構成します。
cd /etc/sysconfig/network-scripts
cp -p ifcfg-lo ifcfg-lo:0
vim ifcfg-lo 0
DEVICE=lo:0
IPADDR=192.168.100.10
NETMASK=255.255.255.0
ONBOOT=yes
[root@localhost network-scripts]# vim ifcfg-ens33
'...省略内容,修改为static'
BOOTPROTO=static
'...省略内容,尾行添加内容'
IPADDR=192.168.100.201
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
'其中web2服务器修改为192.168.100.202'
IPADDR=192.168.100.202
- 2ノードのサーバー構成でARP応答が抑制される
'配置抑制ARP脚本'
[root@localhost network-scripts]# vim /etc/init.d/web.sh
#!/bin/bash
VIP=192.168.100.10
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore 'arp忽略'
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK "
;;
stop)
ifconfig lo:0 down
route del $VIP /dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore 'arp开启'
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stopd"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
[root@localhost network-scripts]# chmod +x /etc/init.d/web.sh
- 2ノードサーバー構成テストURL
テストWebページを個別に作成します。テストWebページのコンテンツは、異なるノードサーバーを区別するために異なる必要があります。
cd /var/www/html
echo "this is kevin web" > index.html
[root@wlocalhost ~]# vim /var/www/html/index.html
<h1>this is benet web</h1>
- ネットワークカードを再起動し、仮想ポートを開き、LVSサービスを開き、ファイアウォールを閉じます
systemctl restart network
ifup ens33:0
service dr.sh start
systemctl start httpd
systemctl stop firewalld
setenforce 0
デュアルシステムホットバックアップキープアライブ構成
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1 '邮件协议指向自己'
smtp_connect_timeout 30
router_id LVS_01 'router_id不能相同'
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER '主服务器为MASTER,备服务器为BACKUP'
interface ens33
virtual_router_id 51 '主备组号要相同'
priority 100 '优先级,备服务器的优先级要小于主'
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 '主备密码要相同'
}
virtual_ipaddress {
192.168.100.10
}
}
virtual_server 192.168.100.10 80 {
delay_loop 6
lb_algo rr '轮询算法'
lb_kind DR '修改为DR模式'
persistence_timeout 50
protocol TCP
real_server 192.168.100.201 80 {
'节点1配置'
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.100.202 80 {
'节点2配置'
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
- 2番目のlvsスケジューラと最初のスケジューラの違い
[root@localhost keepalived]# scp keepalived.conf root@192.168.100.130:/etc/keepalived/ '将keepalived.conf文件远程复制到130调度服务器上'
The authenticity of host '192.168.100.130 (192.168.100.130)' can't be established.
ECDSA key fingerprint is SHA256:W+MleaejDosjJJV1F2noJPAGWA/d2qESydwosqTqWWw.
ECDSA key fingerprint is MD5:68:5f:ee:e5:76:ca:96:01:5d:d8:b9:1f:4b:5a:58:91.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.100.130' (ECDSA) to the list of known hosts.
root@192.168.100.130's password:
keepalived.conf 100% 1195 1.0MB/s 00:00
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
'只需要修改三个地方'
...省略内容
router_id LVS_02 'router_id不能相同'
...省略内容
vrrp_instance VI_1 {
state BACKUP '此处选择为BACKUP备服务器'
priority 90 '优先级需要低于主服务器'
...省略内容
'其他配置都相同'
- keepalivedサービスとネットワークカードサービスをオンにする
systemctl start keepalived
service network restart
- ifconfigを介して2つのDRスケジューリングサーバーが表示される
テスト
- クライアント構成
最後のページのポイントに注意してください。同じWebページのコンテンツが常に更新されている場合は、キャッシュをクリアし、キャッシュの期限が切れるまで待ってから、