CentOS 7 上的LVS+keepalived安装及配置
1.服务器初始化
服务器建议最小化安装。关闭SELINUX和iptables以及一些不需要的服务,检查时间设置并校准,设置语言,修改文件描述符限制,优化内核参数等。初始化可使用脚本进行。
安装必要软件。
1 yum -y install screen sysstat vim-enhanced lrzsz
2.Keepalived、LVS安装
系统自带的软件包已足够新,所以在前端LVS的2台服务器上直接使用yum安装
yum install keepalived ipvsadm
systemctl enable keepalived.service
在发生主备切换和发现后端机器up/down的时候需要发送邮件通知
yum -y install sendmail systemctl start sendmail.service systemctl enable sendmail.service
3.Keepalived配置文件
由于是使用keepalived+LVS的结构,所以前端LVS只需要配置Keepalived的配置文件即可。/etc/keepalived/keepalived.conf文件,注意主机和备机配置文件的区别。
! Configuration File for keepalived ###http://www.keepalived.org/pdf/UserGuide.pdf 官方配置文档 global_defs { notification_email { ##配置邮件 test@test.com ##收到通知邮件的邮件帐户 } notification_email_from test-lvs@testcdn.com ##用于SMTP邮件发送的帐户 smtp_server 127.0.0.1 ##由于发送邮件的SMTP邮件服务器地址 smtp_connect_timeout 30 ##邮件发送超时时间 router_id TEST_LVS ##标识本节点的字条串,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到,主机和备机上的router_id设置为一致,同一个网络中必须唯一,注意在一个网段里有多个集群的话需要设置成不同的router_id。 } vrrp_instance VI_1 { state MASTER ##指定实例状态,配置为MASTER, interface em1 ##指定实例运行在哪个网络接口上 virtual_router_id 51 ##虚拟路由ID(0-255),在一个VRRP实例中主备服务器ID必须一样,但是在同一个网络中不可存在同样的virtual_router_id,不要和其他集群重复,如果一个配置文件中配置了多个VRRP实例,各个实例的virtual_router_id也必须区分开来 priority 150 ##优先级值设定:MASTER要比BACKUP的值大 advert_int 1 ##设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒。 authentication { ##认证机制 auth_type PASS ##默认PASS; 有两种:PASS或AH auth_pass 1111 ##默认1111; 可多位字符串,但仅前8位有效,设置验证密码,在一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信。 } virtual_ipaddress { 192.168.146.100 ##虚拟IP,可多个,写法为每行一个 } } virtual_server 192.168.146.100 80 { delay_loop 6 ##设置健康状态检查时间 lb_algo wrr ##调度算法,加权轮训调度 lb_kind DR ##LVS工作模式,这里使用的是Direct Route模式 persistence_timeout 50 ##持久连接超时时间,会话保持时间,单位是秒,这个选项对于动态网页是非常有用的,为集群系统中session共享提供了一个很好的解决方案。有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话保持时间。需要注意的是,这个会话保持时间,是最大无响应超时时间,也就是说用户在操作动态页面时,如果在50秒内没有执行任何操作,那么接下来的操作会被分发到另外节点,但是如果一直在操作动态页面,则不受50秒的时间限制。 protocol TCP ##指定转发协议类型,有tcp和udp两种。 virtualhost cdn.test.com ##指定使用HTTP_GET或SSL_GET时的虚拟主机地址 real_server 192.168.146.105 80 { ##指定一个RS成员 weight 3 ##配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统资源。 HTTP_GET { ##使用HTTP_GET检测RS的使用可用性 url { path /lvs_check ##指定URL路径 status_code 200 ##指定访问URL返回的状态码 } connect_timeout 10 ##指定连接RS超时时间 nb_get_retry 3 ##重试次数 delay_before_retry 3 ##重试间隔 connect_port 80 ##指定连接的RS端口 } } real_server 192.168.146.106 80 { weight 3 HTTP_GET { url { path /lvs_check status_code 200 } connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } #https virtual_server 192.168.146.100 443 { ##设置https支持 delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 50 protocol TCP virtualhost cdn.test.com real_server 192.168.146.105 443 { weight 3 SSL_GET { ####使用SSL_GET检测RS的使用可用性 url { path /lvs_check status_code 200 } connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 443 } } real_server 192.168.146.1106 443 { weight 3 SSL_GET { url { path /lvs_check status_code 200 } connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 443 } } }
在备机上我们的配置文件只需要将MASTER改为BACKUP并且priority设置的比MASTER低就行。
配置解释:
其中global段是全局设置,里面设置了接收报警邮箱和smtp服务器,不支持带身份验证的SMTP,notification_email指定keepalived在发生事件(比如切换)时,需要发送email到的对象,可以有多个,每行一个。这里我们设置为通过本机的sendmail发送邮件。主机和备机上的router_id设置为一致,同一个网络中必须唯一,注意在一个网段里有多个集群的话需要设置成不同的router_id。vrrp_script是定义一个健康检查脚本。vrrp_instance(vrrp实例名)可以任意命名,两边设置成一致即可,一个配置中可以设置多个vrrp实例,但名字不能相同。virtual_router_id两边需要设置成一样的,值为1~255,但是在同一个网络中不可存在同样的virtual_router_id,不要和其他集群重复!如果一个配置文件中配置了多个VRRP实例,各个实例的virtual_router_id也必须区分开来。interface定义vrrp运行在哪个网络接口上,这里我们的em1为外网,所以定义为em1,具体根据实际情况配置。track_interface定义监测的网卡接口,当其中的一块出现故障keepalived都将视为路由器出现故障。备机上的state需要设置为BACKUP,权重值priority必须要比MASTER低,建议主机设置为150,备机设置为100。主机和备机之间的验证采用密码验证,两边的密码必须设置成一样。虚拟IP地址
virtual_ipaddress根据你的实际情况设置,可以设置多个VIP,每行设置一个,最多支持到20个,如果超过20个需要再定义一个virtual_ipaddress_excluded配置段,将其余的虚拟IP添加进去。
至此Keepalived配置完毕。更多选项参数请参考官网文档或者网络上其他资料。