HA Cluster 配置准备:
(1) 各节点时间必须同步
ntp, chrony
(2) 确保iptables及selinux不会成为阻碍
(3) 各节点之间可通过主机名互相通信(对KA并非必须)
建议使用/etc/hosts文件实现
(4) 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信(对KA并非必须)
1)用两台主机,安装keepalived ,httpd ,(安装httpd的作用是 当web服务器都挂了,本机的httpd充当web页面提示:网站维护中 )做好KEY验证,写好/etc/hosts文件
[root@KA1 ~]#yum install keepalived -y
[root@KA2 ~]#yum install keepalived -y
节点1做KEY验证
[root@KA1 ~]#ssh-keygen
[root@KA1 ~]#ssh-copy-id 192.168.8.105
节点2做KEY验证
[root@KA2 ~]#ssh-keygen
[root@KA2 ~]#ssh-copy-id 192.168.8.104
节点1 /ect/hosts文件
[root@KA1 ~]#vim /etc/hosts
[root@KA1 ~]#cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.8.104 KA1
192.168.8.105 KA2
节点2 /ect/hosts文件
[root@KA2 ~]#vim /etc/hosts
[root@KA2 ~]#cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.8.105 KA2
192.168.8.104 KA1
安装httpd , 启动
节点1
[root@KA1 ~]#yum install httpd -y
[root@KA1 ~]#echo "网站维护中!" > /var/www/html/index.html
[root@KA1 ~]#systemctl start httpd
节点2
[root@KA2 ~]#yum install httpd -y
[root@KA2 ~]#echo "网站维护中!" > /var/www/html/index.html
[root@KA2 ~]#systemctl start httpd
2)修改keepalived配置文件
节点1配置
[root@KA1 ~]#vim /etc/keepalived/keepalived.conf
全局配置
global_defs {
notification_email {
root@localhost 邮件地址
}
notification_email_from keepalived@localhost 发邮件的名字
smtp_server 127.0.0.1 发邮件的主机
smtp_connect_timeout 30
router_id KA1 路由名,随便起一个
vrrp_mcast_group4 224.100.100.100 多播地址
虚拟路由器配置
vrrp_instance VI_1 {
state MASTER
interface eth0 接口
virtual_router_id 51 虚拟路由id
priority 100 优先级
advert_int 1 广播时间间隔
authentication {
auth_type PASS
auth_pass 123456 密码随便设
}
virtual_ipaddress {
192.168.8.100/24 dev eth0 label eth0:1 虚拟VIP的地址
}
}
虚拟服务器配置
virtual_server 192.168.8.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
sorry_server 127.0.0.1 80 如果两台web服务都挂了,启用本机的web服务,提示网站维护
real_server 192.168.8.102 80 { web服务器地址
weight 1
HTTP_GET {
url {
path / web服务器页面路径
status_code 200 状态检查
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.8.103 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
节点2配置
[root@KA2 ~]#vim /etc/keepalived/keepalived.conf
全局配置
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id KA2
vrrp_mcast_group4 224.100.100.100
}
虚拟路由器配置
vrrp_instance VI_1 {
state BACKUP 主机设为BACKUP
interface eth0
virtual_router_id 51 路由id和节点1 一样
priority 80 优先级要比节点1 小
advert_int 1
authentication {
auth_type PASS
auth_pass 123456 密码和节点1 一样
}
virtual_ipaddress {
192.168.8.100/24 dev eth0 label eth0:1 虚拟VIP也和节点1 一样
}
}
虚拟服务器配置
virtual_server 192.168.8.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
sorry_server 127.0.0.1 80 如果两台web服务都挂了,启用本机的web服务,提示网站维护
real_server 192.168.8.102 80 { web服务器的地址
weight 1
HTTP_GET {
url {
path / web服务器的页面路径
status_code 200 状态检查
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.8.103 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
3)在web服务器上安装httpd , 绑定vip,修改内核参数,直接跑下面写好的脚本就OK了 ,把vip地址改一下
#!/bin/bash
#Author:wangxiaochun
#Date:2017-08-13
vip=192.168.8.100
mask='255.255.255.255'
dev=lo:1
rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null
service httpd start &> /dev/null && echo "The httpd Server is Ready!"
echo "<h1>`hostname`</h1>" > /var/www/html/index.html
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig $dev $vip netmask $mask #broadcast $vip up
#route add -host $vip dev $dev
echo "The RS Server is Ready!"
;;
stop)
ifconfig $dev down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "The RS Server is Canceled!"
;;
*)
echo "Usage: $(basename $0) start|stop"
exit 1
;;
esac
web1执行脚本
[root@web1 ~]#bash lvs_dr_rs.sh start
The RS Server is Ready!
查看绑定的VIP
[root@web1 ~]#ip a
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
inet 192.168.8.100/32 scope global lo:1
valid_lft forever preferred_lft forever
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 group default qlen 1000
link/ether 00:0c:29:67:d8:20 brd ff:ff:ff:ff:ff:ff
inet 192.168.8.102/24 brd 192.168.8.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe67:d820/64 scope link
valid_lft forever preferred_lft forever
web2执行脚本
[root@web2 ~]#bash lvs_dr_rs.sh start
The RS Server is Ready!
查看绑定的VIP
[root@web2 ~]#ip a
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
inet 192.168.8.100/32 scope global lo:1
valid_lft forever preferred_lft forever
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 group default qlen 1000
link/ether 00:0c:29:73:26:e3 brd ff:ff:ff:ff:ff:ff
inet 192.168.8.103/24 brd 192.168.8.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe73:26e3/64 scope link
valid_lft forever preferred_lft forever
4)在keepalived 节点上安装ipvsadm 可以查看lvs策略
节点一
[root@KA1 ~]#yum install ipvsadm -y
查看lvs
[root@KA1 ~]#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.8.100:80 rr
-> 192.168.8.102:80 Route 1 0 0
-> 192.168.8.103:80 Route 1 0 0
节点二
[root@KA2 ~]#yum install ipvsadm -y
查看lvs
[root@KA2 ~]#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.8.100:80 rr
-> 192.168.8.102:80 Route 1 0 0
-> 192.168.8.103:80 Route 1 0 0
5)启动keepalived服务,查看IP
节点1
[root@KA1 ~]#systemctl start keepalived.service
查看IP
[root@KA1 ~]#ip a
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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:83:52:fe brd ff:ff:ff:ff:ff:ff
inet 192.168.8.104/24 brd 192.168.8.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 192.168.8.100/24 scope global secondary eth0:1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe83:52fe/64 scope link
valid_lft forever preferred_lft forever
You have new mail in /var/spool/mail/root
节点2
[root@KA2 ~]#systemctl start keepalived.service
查看IP
[root@KA2 ~]#ip a
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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:d1:c0:fc brd ff:ff:ff:ff:ff:ff
inet 192.168.8.105/24 brd 192.168.8.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fed1:c0fc/64 scope link
valid_lft forever preferred_lft forever
You have new mail in /var/spool/mail/root
6)测试
[root@centos ~]#while true ; do curl 192.168.8.100 ;sleep 0.5 ;done
192.168.8.103 web2
192.168.8.102 web1
192.168.8.103 web2
192.168.8.102 web1
192.168.8.103 web2
192.168.8.102 web1
192.168.8.103 web2
192.168.8.102 web1
成功!
6)测试两个web服务都挂了
[root@route ~]#curl 192.168.8.100
网站维护中!