在一个系统中,常常存在一些单点服务器,为了提高整个系统的稳定性,我们常常需要对这些单点服务做高可用配置;keepalived即为一种常用的高可用配置服务;
Keepalived的工作模式有以下两种:
1、 主/备:即单虚拟路径器,仅配置一个VIP;
2、 主/主:即多个虚拟路径器,配置多个VIP,每个虚拟路径器作为其中某个VIP的的master虚拟路径器;
在CentOS6.4以后,keepalived已经在Base仓库中提供,安装keepalived以后,我们可以看到其相关文件如下:
配置文件:/etc/keepalived/keepalived.conf
主程序文件:/usr/sbin/keepalived
Unit File:/usr/lib/systemd/system/keepalived.service
安装完成之后,就可以对集群做配置了,但在配置之前,需要确保以下几点:
Ø 各节点时间必须同步;
Ø 确保iptables与SELinux规则不会成为阻碍;
Ø 各节点之间可通过主机名相互通信(对keepalived非必须);
Ø 各节点之间的root用户可以基于密钥认证的ssh服务完成相互通信(非必须);
首先,我们来看一下keepalived配置文件中各配置选项的意义:
l 虚拟路由器相关配置:
vrrp_instance <STRING> { state MASTER | BACKUP:指定当前节点在此虚拟路由器上的初始状态;只能有一个为MASTER,余下的都应该为BACKUP; interface IFACE_NAME:绑定为当前虚拟路由器使用的物理接口; virtual_router_id VRID:当前虚拟路由的VRID,为虚拟路由器的唯一标识,范围为0~255; priority 100:当前主机在此虚拟路径器中的优先级,范围为1~254; advert_int 1:vrrp通告的时间间隔; nopreempt:定义工作模式为非抢占模式; preempt_delay NUM:定义在抢占模式下,节点上线后触发新选举操作的延迟时长;单位为秒; authentication { auth_type AH | PASS auth_pass <PASSWORD> }:定义认证方法; virtual_ipaddress { <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL> }:定义虚拟路径器IP地址,一般只需定义IPADDR/MASK dev <STRING>即可; track_interface { IFACE_NAME1 IFACE_NAME2 ... }:配置要监控的网络接口,一旦接口出现故障,则转为FAULT状态; notify_master <STRING> | <QUOTED-STRING>:当前节点成为主节点时触发的脚本; notify_backup <STRING> | <QUOTED-STRING>:当前节点转为备用节点时触发的脚本; notify_fault <STRING> | <QUOTED-STRING>:当前节点转为fault状态时触发的脚本; notify <STRING> | <QUOTED-STRING>:通用格式的通知触发机制,一个脚本可完成以上三种状态转换时的通知;}:定义要配置的虚拟路径器;
l 虚拟服务器相关配置:
virtual_server IP port | virtual_server fwmark int { delay_loop <INT>:服务轮询的时间间隔; lb_algo rr | wrr | lc | wlc | lblc | sh | dh:定义virtual_server的调度算法; lb_kind NAT | DR | TUN:定义服务器集群的类型; persistence_timeout <INT>:定义持久连接超时时长; protocol TCP:定义服务协议,仅支持TCP; sorry_server <IPADDR> <PORT>:指定备用服务器地址; real_server <IPADDR> <PORT> { weight <INT>:定义当前真实服务器的权重; nofity_up <STRING> | <QUOTED-STRING>:当前真实服务器上线时触发的脚本; notify_down <STRING> | <QUOTED-STRING>:当前真实服务器下线时触发的脚本; HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC_CHECK { url { path <URL_PATH>:定义要监控的URL; status_code <INT>:判断上述检测机制为健康状态的响应码; digest <STRING>:判断上述检测机制为健康状态的响应的内容的校验码; }:定义检测服务器健康状态时请求的URL及检测方法;可以有多个url配置段; nb_get_retry <INT>:定义检测时的重试次数; delay_before_retry <INT>:定义重试之前的延迟时长; connect_ip <IP_ADDR>:定义向当前RS的哪个IP地址发起健康状态检测请求,若未定义,默认为定义RS时的IP地址; connect_port <PORT>:定义向当前RS的哪个端口发起健康状态检测请求,若未定义,默认为定义RS时的端口; bindto <IP_ADDR>:定义发出健康状态检测请求时使用的源地址; bind_port <PORT>:定义发出健康状态检测请求时使用的源端口; connect_timeout <INT>:定义连接请求的超时时长; }:定义当前主机的健康状态检测方法; TCP_CHECK { connect_ip <IP_ADDR>:定义向当前RS的哪个IP地址发起健康状态检测请求,若未定义,默认为定义RS时的地址; connect_port <PORT>:定义向当前RS的哪个端口发起健康状态检测请求,若未定义,默认为定义RS时的端口; bindto <IP_ADDR>:定义发出健康状态检测请求时使用的源地址; bind_port <PORT>:定义发出健康状态检测请求时使用的源端口; connect_timeout <INT>:定义连接请求的超时时长; }:在传输层应用tcp协议对当前主机进行健康状态检测; }:定义真实服务器}:定义虚拟主机,可通过IP与端口或防火墙标记来进行定义;
了解了常用配置选项的意义后,我们就可以进行配置了;在网络拓扑中,我们使用nginx做反向代理以代理后端的httpd服务器;并对nginx做冗余,与keepalived放置在同一个主机上,并用keepalived实现主/主工作模式;其网络拓扑如下:
下面,我们进行具体的配置:
1、 编辑10.1.2.70的keepalived的配置文件/etc/keepalived/keepalived.conf如下;
vrrp_instance VI_1 { state MASTER interface eno16777736 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.1.2.74/16 dev eno16777736 } } vrrp_instance VI_2 { state BACKUP interface eno16777736 virtual_router_id 52 priority 98 advert_int 1 preempt_delay 1 authentication { auth_type PASS auth_pass 2222 } virtual_ipaddress { 10.1.2.75/16 dev eno16777736 } }
2、编辑10.1.2.71的keepalived的配置文件/etc/keepalived/keepalived.conf如下;
vrrp_instance VI_1 { state BACKUP interface eno16777736 virtual_router_id 51 priority 98 advert_int 1 preempt_delay 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.1.2.74/16 dev eno16777736 } } vrrp_instance VI_2 { state MASTER interface eno16777736 virtual_router_id 52 priority 100 advert_int 1 preempt_delay 1 authentication { auth_type PASS auth_pass 2222 } virtual_ipaddress { 10.1.2.75/16 dev eno16777736 } }
3、在10.1.2.70与10.1.2.71主机上均安装nginx;
yum –y install nginx
4、编辑nginx配置文件/etc/nginx/nginx.conf如下:
在http配置段增加如下内容:
upstream test { server 10.1.2.72:80 weight=1; server 10.1.2.73:80 weight=1; }
在server配置段中增减如下内容:
location / { proxy_pass http://test; }
5、配置完成,确保iptables与SELinux规则不会成为阻碍后,启动服务利用客户端测试即可;
原创文章,作者:luoliumeng,如若转载,请注明出处:http://www.178linux.com/56702