- 项目背景
服务集群为二主四从集群模式,现实现一个域名(对应一个公网ip)访问服务器集群同时实现负载均衡和容灾处理。
- 解决方案
- Keepalived集群模式
- Keepalived技术介绍
- Keepalived集群模式
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
通俗来讲:两台业务系统启动着相同的服务,如果有一台故障,另一台自动接管,我们将将这个称之为高可用。
-
-
- 技术框架图
-
Keekpalived工作原理:通过vrrp协议实现
-
-
-
- 单主单VIP模式集群方案:
-
-
服务之间主节点服务由选举机制产生:
网络配置集群架构:
- 方案实现
- Keepalived系统搭建
- 系统环境
- Keepalived系统搭建
主机系统:
Ubuntu
主机设备:
server1:192.168.2.188
server2:192.168.2.71
VIP地址:
192.168.2.189
-
-
- Keepalived安装
-
在线安装:
>apt-get install keepalived
配置规则:
>mkdir -p /etc/keepalived/
>vi /etc/keepalived/keepalived.conf
添加如下内容:
vrrp_instance VI_1 {
#主机设置master
state MASTER
#监听网卡设置
interface eth0
#虚拟路由ID 保持主从配置相同
virtual_router_id 51
#权重主的大于从的
priority 100
advert_int 1
authentication
{
auth_type PASS
auth_pass 1111
}
#虚拟IP设置
virtual_ipaddress
{
10.10.6.188
}
}
注:
Interface: 为当前设备ip网卡名称,可通过ifconfig命令查询
priority : 权重配置 数值越大权重越大,一般主服务器设置大一些
state : master 为主服务器;BACKUP 为从服务器;
服务启动重启查看:
>service keepalived start
查看启动状态
>service keepalived status
或者
>ps -ef|grep keepalived
停止
>service keepalived stop
服务重启
>service keepalived restart
-
-
- 查看VIP是否配置成功
-
>ip addr list
或者
>ip addr show eth0
查看网卡是否绑定VIP
-
-
- Nginx安装配置
-
在线安装nginx
>apt-get install nginx
找到nginx文件和nginx.conf文件位置
>find / -name nginx
>fing / -name nginx.conf
进入目录修改nginx配置,监听一个端口,用来接口调用测试
一般查询到nginx启动目录为:
/usr/sbin/nginx
配置文件目录为:
/etc/nginx/nginx.conf
编辑配置文件:
两台设备配置一样,添加如下代理配置:
server { listen 81; server_name localhost index index.html index.htm index.php; root /xiaoxiao/na/index/; }
创建index.html文件
>mkdir -p /xiaoxiao/na/index/
>chmod -R 777 /xiaoxiao/na/index/
>vi /xiaoxiao/na/index/index.html
添加如下内容并保存:
其中server1为:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>this is server 1</h1>
</body>
</html>
其中server2为:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>this is server 2</h1>
</body>
</html>
启动nginx
> /usr/sbin/nginx
查看nginx是否启动
>ps -ef |grep nginx
-
-
- 效果测试
-
重复测试如下接口查看返回信息
> curl http://192.168.2.189:81/index.html
Curl命令测试:
[root@test-centos-121 ~]# curl http://192.168.2.192:81/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>this is server2 </h1>
</body>
</html>
[root@test-centos-121 ~]#
注:返回的server2的信息
查看VIP绑定的设备:
>ip addr list
如下:
root@ubuntu-wys-SIP:/etc/keepalived# ip addr list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
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:a4:19:c3 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.71/24 brd 192.168.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.2.192/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea4:19c3/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever
root@ubuntu-wys-SIP:/etc/keepalived#
宕机测试:
关闭主节点(关机处理),这边关闭keepalived处理
>service keepalived stop
查看发现VIP已经和server2解绑:
> ip addr list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
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:a4:19:c3 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.71/24 brd 192.168.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea4:19c3/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever
root@ubuntu-wys-SIP:/etc/keepalived#
再次重复测试如下接口查看返回信息
> curl http://192.168.2.189:81/index.html
返回结果为:
[root@test-centos-121 ~]# curl http://192.168.2.192:81/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>this is server1 </h1>
</body>
</html>
[root@test-centos-121 ~]#
注:返回的server1的信息,可见服务器已成功轮换到备用服务器
-
- LVS系统搭建
- 系统环境
- LVS系统搭建
主机系统:
Ubuntu
主机设备:
server1:192.168.2.188
server2:192.168.2.71
Server-vip: 192.168.2.145
VIP地址:
192.168.2.191
-
-
- ipvsadm安装
-
linux已经集成ipvsadm,特殊没有当前命令可采用如下在线安装方法:
Ubuntu :>apt-get install ipvsadm
Centos: >yum -y install ipvsadm
-
-
- ipvsadm和实际设备VIP配置
-
-
-
-
- 虚拟服务器配置ipvsadm
-
-
配置VIP
>ipvsadm -A -t 192.168.2.191:81 -s rr
配置VIP绑定的漂浮的两台服务器设备
>ipvsadm -a -t 192.168.2.191:81 -r 192.168.2.71:81 -g
>ipvsadm -a -t 192.168.2.191:81 -r 192.168.2.71:81 -g
查看配置情况:
>ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP xiaoxiaocentos:81 rr
-> 192.168.2.71:81 Route 1 0 0
-> 192.168.2.188:81 Route 1 0 0
[root@xiaoxiaocentos ~]#
报错ipvsadm 配置:
Ubuntu命令
>/etc/init.d/ipvsadm save
centos命令
>/usr/sbin/ipvsadm -S
-
-
-
- 实际服务器配置VIP
-
-
两台实际服务器设备分别执行相同命令
>ip addr add 192.168.2.191/24 dev eth0
查看配置结果:
>ip addr show eth0
如下:
root@ubuntu-wys-PDD-v2:/etc/keepalived# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:1a:4a:91 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.188/24 brd 192.168.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.2.192/32 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.2.191/24 scope global secondary eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe1a:4a91/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever
root@ubuntu-wys-PDD-v2:/etc/keepalived#
-
-
- Nginx安装配置
-
安装配置步骤如上3.1.4步骤
-
-
- 效果测试
-
通过接口调用:
> curl http://192.168.2.191:81/index.html
结果如下:
[root@test-centos-121 ~]# curl http://192.168.2.191:81/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>this is server1 </h1>
</body>
</html>
[root@test-centos-121 ~]# curl http://192.168.2.191:81/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>this is server2 </h1>
</body>
</html>
[root@test-centos-121 ~]# curl http://192.168.2.191:81/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>this is server1 </h1>
</body>
</html>
[root@test-centos-121 ~]# curl http://192.168.2.191:81/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>this is server2 </h1>
</body>
</html>
[root@test-centos-121 ~]#
通过对比返回结果看到,实现了如上通过VIP访问接口随机轮询调用两台实际设备
- 方案对比
Keepalived方案:
当一个VIP模式下只能实现容灾处理,两天服务器应用选举机制,keepalived启动后只有一个设备ip启用,只要当一台设备宕机后另外一台设备才起作用。(其中VIP实现机制的选择)
Lvs方案:
需要一台调度设备,调度设备通过VIP实现随机实现随机轮询机制。
可以通过一个公网ip(调度设备的外网ip),内部通过ipvsadm+VIP调度,实现轮询访问两个主节点。试下负载均衡和设备容灾。