Centos7+Nginx+Keepalived实现Apache服务的高可用&负载均衡

今天是2017年的第一天,昨天也就是2016年的最后一天,我尝试部署了Centos7+Nginx+Keepalived实现WEB服务的高可用负载均衡服务,终于在2017年的第一天前完成了,所以在此分享给有需要的朋友;说到负载均衡,其实在linux下有很多服务可以实现,比如Nginx、haproxy、lvs等服务,当前我们在前面的文章有介绍过了,但是对于高可用服务,我们在linux下最常见也是应用最多的是Keepalived,对于这些综合服务对于一个管理员来说是必须要会的,所以今天我们主要介绍的是Centos7+Nginx+Keepalived实现WEB(Apache)服务的高可用负载均衡。具体见下:

环境介绍:

Hostname:A-S

IP:

Role:Apache Web Service

Hostname:B-S

IP:

Role:Apache Web Service

Hostname:BB-S

IP:

Role:Nginx+Keepalived

Hostname:BB-S

IP:

Role:Nginx+Keepalived

Virtual IP:

我们需要首先安装两台Apache Web服务

因为我们准备使用yum安装服务,所以需要定义阿里云仓库

cd/etc/
vim
添加以下内容
[epel]name=aliyunepelbaseurl=/epel/7Server/x86_64/
gpgcheck=0

首先在上安装apache

yumisntall-yhttpd

然后定义显示页面

vim/var/www/html/
</html>
<!DOCTYPEhtml>
<html>
<head>
<title>WelcometoApache</title>
<style>
body{
35em;
margin:0auto;
font-family:Tahoma,Verdana,Arial,sans-serif;
}
</style>
<styletype="text/css">
h1{color:red}
h2{color:blue}
h3{color:green}
h4{color:yellow}
}
</style>
</head><bodybgcolor='#46A3FF'>
<h1>WelcometoA-SApache</h1>
<h2>HostName:A-S</h2>
<h3>IP:</h3>
<h4>Service:Apache</h4>
<inputtype=buttonvalue="Refresh"onclick="('')">
</body>
</html>
Systemctlstarthttpd

然后添加默认的防火墙端口8o

Firewall-cmd--zone=public--add-port='80/tcp'--permanent
或者vim/etc/firewalld/zone/
添加一下格式
<portportocal='tcp'port='80'>

我们测试访问

我们按照同上的方法在第二台服务器上进行配置,安装跳过

第二台主机的配置: 主机名 B-S

安装好httpd后,我们将a-s上的index拷贝到b-s服务器上

scproot@:/var/www/html/

然后修改文件

</html>
<!DOCTYPEhtml>
<html>
<head>
<title>WelcometoApache</title>
<style>
body{
35em;
margin:0auto;
font-family:Tahoma,sans-serif;
}
</style>
<styletype="text/css">
h1{color:red}
h2{color:blue}
h3{color:green}
h4{color:yellow}
}
</style>
</head><bodybgcolor='#CA8EFF'>
<h1>WelcometoB-SApache</h1>
<h2>HostName:B-S</h2>
<h3>IP:</h3>
<h4>Service:Apache</h4>
<inputtype=buttonvalue="Refresh"onclick="('')">
</body>
</html>

测试访问

接下来我们开始准备在两台前端服务器、上安装Nginx和keepalived;我们将keepalived和Nginx安装在同一台机器上

我们首先在主备服务器上安装Nginx

我们首先要定于安装源, 才可以使用yum安装,我们在主备服务器上都配置

cd/etc/
vim
添加以下内容
[epel]name=aliyunepelbaseurl=/epel/7Server/x86_64/
gpgcheck=0

定义好后,我们将定义的安装源给另外一台备服务器也拷贝一份

scp/etc//root@/etc//

指定源后,我们就可以开始安装Nginx了,首先在主服务器上

yuminstall-yNginx

安装后,我们首先查看默认的Nginx配置

vim/etc/Nginx/
#Formoreinformationonconfiguration,see:
#*OfficialEnglishDocumentation:/en/docs/
#*OfficialRussianDocumentation:/ru/docs/
userNginx;
worker_processesauto;
error_log/var/log/Nginx/;
pid/run/;
#Loaddynamicmodules.See/usr/share/Nginx/.
include/usr/share/Nginx/modules/*.conf;
events{
worker_connections1024;
}
http{
log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'
'$status$body_bytes_sent"$http_referer"'
'"$http_user_agent""$http_x_forwarded_for"';
access_log/var/log/Nginx/main;
sendfileon;
tcp_nopushon;
tcp_nodelayon;
keepalive_timeout65;
types_hash_max_size2048;
include/etc/Nginx/;
default_typeapplication/octet-stream;
#Loadmodularconfigurationfilesfromthe/etc/Nginx/directory.
#See/en/docs/ngx_core_#include
#formoreinformation.
include/etc/Nginx//*.conf;
server{
listen80default_server;
listen[::]:80default_server;
server_name_;
root/usr/share/Nginx/html;
#Loadconfigurationfilesforthedefaultserverblock.
include/etc/Nginx//*.conf;
location/{
}
error_page404/;
location=/{
}
error_page500502503504/;
location=/{
}
}
#SettingsforaTLSenabledserver.
#
#server{
#listen443sslhttp2default_server;
#listen[::]:443sslhttp2default_server;
#server_name_;
#root/usr/share/Nginx/html;
#
#ssl_certificate"/etc/pki/Nginx/";
#ssl_certificate_key"/etc/pki/Nginx/private/";
#ssl_session_cacheshared:SSL:1m;
#ssl_session_timeout10m;
#ssl_ciphersHIGH:!aNULL:!MD5;
#ssl_prefer_server_cipherson;
#
##Loadconfigurationfilesforthedefaultserverblock.
#include/etc/Nginx//*.conf;
#
#location/{
#}
#
#error_page404/;
#location=/{
#}
#
#error_page500502503504/;
#location=/{
#}
#}
}

默认配置我们备份一份

cp/etc/Nginx//etc/Nginx/

接下来我们要配置Nginx实现后端服务器的web的负载均衡;

在此我们使用的是Nginx负载均衡的默认方式-轮询

我们需要在http区域里面添加负载配置

upstreamreal_server_pool{
#ip_hash;
server:80weight=1max_fails=2fail_timeout=30s;
server:80weight=1max_fails=2fail_timeout=30s;
}
#添加一组真实的服务器地址池
#供proxy_pass和fastcgi_pass指令中使用的代理服务器
#后台如果有动态应用的时候,ip_hash指令可以通过hash算法
#将客户端请求定位到同一台后端服务器上,解决session共享,#但建议用动态应用做session共享
#server用于指定一个后端服务器的名称和参数
#weight代表权,重默认为1,权重越高被分配的客户端越多
#max_fails指定时间内对后端请求失败的次数
#fail_timeout达到max_fails指定的失败次数后暂停的时间
#down参数用来标记为离线,不参与负载均衡.在ip_hash下使用
#backup仅仅在非backup服务器宕机或繁忙的时候使用
server{
listen:80;#监听ip改为本地ip
server_namelocalhost;
#charsetkoi8-r;
#access_loglogs/main;
location/{
#roothtml;
#index;
proxy_next_upstreamhttp_502http_504errortimeoutinvalid_header;
proxy_passreal_server_pool;
proxy_set_headerHost$host;
proxy_set_headerX-Forwarded-For$remote_addr;
}

添加后的

#Formoreinformationonconfiguration,see:
#*OfficialEnglishDocumentation:/en/docs/
#*OfficialRussianDocumentation:/ru/docs/
userNginx;
worker_processesauto;
error_log/var/log/Nginx/;
pid/run/;
#Loaddynamicmodules.See/usr/share/Nginx/.
include/usr/share/Nginx/modules/*.conf;
events{
worker_connections1024;
}
http{
log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'
'$status$body_bytes_sent"$http_referer"'
'"$http_user_agent""$http_x_forwarded_for"';
access_log/var/log/Nginx/main;
sendfileon;
tcp_nopushon;
tcp_nodelayon;
keepalive_timeout65;
types_hash_max_size2048;
include/etc/Nginx/;
default_typeapplication/octet-stream;
upstreamreal_server_pool{
#ip_hash;
server:80weight=1max_fails=2fail_timeout=30s;
server:80weight=1max_fails=2fail_timeout=30s;
}
#添加一组真实的服务器地址池
#供proxy_pass和fastcgi_pass指令中使用的代理服务器
#后台如果有动态应用的时候,不参与负载均衡.在ip_hash下使用
#backup仅仅在非backup服务器宕机或繁忙的时候使用
#Loadmodularconfigurationfilesfromthe/etc/Nginx/directory.
#See/en/docs/ngx_core_#include
#formoreinformation.
include/etc/Nginx//*.conf;
server{
#listen80default_server;
#listen[::]:80default_server;
listen:80;#监听ip改为本地ip
server_namelocalhost;
#server_name_;
root/usr/share/Nginx/html;
#Loadconfigurationfilesforthedefaultserverblock.
include/etc/Nginx//*.conf;
#增加的
location/{
#roothtml;
#index;
proxy_next_upstreamhttp_502http_504errortimeoutinvalid_header;
proxy_passreal_server_pool;
proxy_set_headerHost$host;
proxy_set_headerX-Forwarded-For$remote_addr;
}
error_page404/;
location=/{
}
error_page500502503504/;
location=/{
}
}
#SettingsforaTLSenabledserver.
#
#server{
#listen443sslhttp2default_server;
#listen[::]:443sslhttp2default_server;
#server_name_;
#root/usr/share/Nginx/html;
#
#ssl_certificate"/etc/pki/Nginx/";
#ssl_certificate_key"/etc/pki/Nginx/private/";
#ssl_session_cacheshared:SSL:1m;
#ssl_session_timeout10m;
#ssl_ciphersHIGH:!aNULL:!MD5;
#ssl_prefer_server_cipherson;
#
##Loadconfigurationfilesforthedefaultserverblock.
#include/etc/Nginx//*.conf;
#
#location/{
#}
#
#error_page404/;
#location=/{
#}
#
#error_page500502503504/;
#location=/{
#}
#}
}

接着我们重启Nginx

systemctlenableNginx
systemctlstartNginx

接下来我们尝试访问一下,因为使用的是轮询,所以访问Nginx会跳转到不同的两个页面

我们在安装keepalived前,先配置路由转发

vim/etc/
_forward=1#此参数改为1
sysctl-p#使修改生效

接着我们在主服务器上安装keepalived

yuminstall-ykeepalived

安装完成后,我们备份一下keepalived的配置文件

cp/etc/keepalived//etc/keepalived/

接下来我们查看一下默认的keepalived默认配置

cat/etc/keepalived/
!ConfigurationFileforkeepalived
global_defs{
notification_email{
acassen@
failover@
sysadmin@
}
notification_email_from@
smtp_server
smtp_connect_timeout30
router_idLVS_DEVEL
}
vrrp_instanceVI_1{
stateMASTER
interfaceeth0
virtual_router_id51
priority100
advert_int1
authentication{
auth_typePASS
auth_pass1111
}
virtual_ipaddress{



}
}
virtual_server443{
delay_loop6
lb_algorr
lb_kindNAT
nat_mask
persistence_timeout50
protocolTCP
real_server443{
weight1
SSL_GET{
url{
path/
digestff20ad2481f97b1754ef3e12ecd3a9cc
}
url{
path/mrtg/
digest9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout3
nb_get_retry3
delay_before_retry3
}
}
}
virtual_server1358{
delay_loop6
lb_algorr
lb_kindNAT
persistence_timeout50
protocolTCP
sorry_server1358
real_server1358{
weight1
HTTP_GET{
url{
path/testurl/
digest640205b7b0fc66c1ea91c463fac6334d
}
url{
path/testurl2/
digest640205b7b0fc66c1ea91c463fac6334d
}
url{
path/testurl3/
digest640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout3
nb_get_retry3
delay_before_retry3
}
}
real_server1358{
weight1
HTTP_GET{
url{
path/testurl/
digest640205b7b0fc66c1ea91c463fac6334c
}
url{
path/testurl2/
digest640205b7b0fc66c1ea91c463fac6334c
}
connect_timeout3
nb_get_retry3
delay_before_retry3
}
}
}
virtual_server1358{
delay_loop3
lb_algorr
lb_kindNAT
nat_mask
persistence_timeout50
protocolTCP
real_server1358{
weight1
HTTP_GET{
url{
path/testurl/
digest640205b7b0fc66c1ea91c463fac6334d
}
url{
path/testurl2/
digest640205b7b0fc66c1ea91c463fac6334d
}
url{
path/testurl3/
digest640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout3
nb_get_retry3
delay_before_retry3
}
}
real_server1358{
weight1
HTTP_GET{
url{
path/testurl/
digest640205b7b0fc66c1ea91c463fac6334d
}
url{
path/testurl2/
digest640205b7b0fc66c1ea91c463fac6334d
}
url{
path/testurl3/
digest640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout3
nb_get_retry3
delay_before_retry3
}
}
}

接下来我们修改默认的keepalived配置

echo>/etc/keepalived/

我们清空默认配置后,添加以下内容

vim/etc/keepalived/
global_defs{
notification_email{
gavin@#定义通知邮箱,有多个可以换行添加
}
notification_email_fromadmin@#定义发送邮件的邮箱
smtp_server#定义发件服务器
smtp_connect_timeout30#定义连接smtp服务器超时时间
router_idLVS_DEVEL
}
vrrp_instanceVI_1{
stateMASTER#标示主备,备机上改为BACKUP
interfaceens160#HA监测的端口
virtual_router_id51#主备的virtual_router_id的值必须相同
priority100#优先级,通常主要比备稍大
advert_int1#VRRPMulticast广播周期秒数
authentication{#定义认证
auth_typePASS#认证方式
auth_pass1111#认证口令字
}
virtual_ipaddress{#定义vip
#多个可换行添加,一行一个
}
}
virtual_server80{
delay_loop6#每隔6秒查询realserver状态
lb_algorr
lb_kindNAT
nat_mask
persistence_timeout50#同一IP的连接50秒内被分配到同一台realserver
protocolTCP#用TCP监测realserver的状态
real_server80{#需要指向Nginx负载的地址
weight3#权重
TCP_CHECK{
connect_timeout10#10秒无响应超时
nb_get_retry3
delay_before_retry3
connect_port80
}
}
real_server80{#需要指向Nginx负载的地址
weight3
TCP_CHECK{
connect_timeout3
delay_before_retry3
connect_port80
}
}
}

我们介绍一下主要参数

global_defs
notification_email:keepalived在发生诸如切换操作时需要发送email通知地址,后面的smtp_server相比也都知道是邮件服务器地址。也可以通过其它方式报警,毕竟邮件不是实时通知的。
router_id:机器标识,通常可设为hostname。故障发生时,邮件通知会用到
vrrp_instance
state:指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER
interface:实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的
mcast_src_ip:发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
virtual_router_id:这里设置VRID,这里非常重要,相同的VRID为一个组,他将决定多播的MAC地址
priority:设置本节点的优先级,优先级高的为master
advert_int:检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常
authentication:定义认证方式和密码,主从必须一样
virtual_ipaddress:这里设置的就是VIP,也就是虚拟IP地址,他随着state的变化而增加删除,当state为master的时候就添加,当state为backup的时候删除,这里主要是有优先级来决定的,和state设置的值没有多大关系,这里可以设置多个IP地址
track_script:引用VRRP脚本,即在vrrp_script部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
vrrp_script
告诉keepalived在什么情况下切换,所以尤为重要。可以有多个vrrp_script
script:自己写的检测脚本。也可以是一行命令如killall-0Nginx
interval2:每2s检测一次
weight-5:检测失败(脚本返回非0)则优先级-5
fall2:检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise1:检测1次成功就算成功。但不修改优先级

保存退出后,我们启动keepalived

systemctlstartkeepalived
systemctlenablekeepalived

然后我们测试ping一下vistual ip

注:如果ping不通vistual ip的话,有可能是文件的中的网卡配置,centos6的网卡是eth0,而centos7的是 ens160

ping

接下来我们配置第二台备服务器,然后首先安装及配置Nginx

yuminstall-yNginx

然后备份备服务器的文件

cp/etc/Nginx//etc/Nginx/

然后我们从主服务器下的配置拷贝到备服务器Nginx目录下,然后替换默认的文件

scp/etc/Nginx/root@:/etc/Nginx/

然后我们修改备服务器的监听地址,需要指向备服务器的本地地址---> listen :80; # 监听ip改为本地ip

#Formoreinformationonconfiguration,see:
#*OfficialEnglishDocumentation:/en/docs/
#Formoreinformationonconfiguration,不参与负载均衡.在ip_hash下使用
#backup仅仅在非backup服务器宕机或繁忙的时候使用
#Loadmodularconfigurationfilesfromthe/etc/Nginx/directory.
#See/en/docs/ngx_core_#include
#formoreinformation.
include/etc/Nginx//*.conf;
server{
#listen80default_server;
#listen[::]:80default_server;
listen:80;#监听ip改为本地ip
server_namelocalhost;
#server_name_;
root/usr/share/Nginx/html;
#Loadconfigurationfilesforthedefaultserverblock.
include/etc/Nginx//*.conf;
location/{
#roothtml;
#index;
proxy_next_upstreamhttp_502http_504errortimeoutinvalid_header;
proxy_passreal_server_pool;
proxy_set_headerHost$host;
proxy_set_headerX-Forwarded-For$remote_addr;
}
error_page404/;
location=/{
}
error_page500502503504/;
location=/{
}
}
#SettingsforaTLSenabledserver.
#
#server{
#listen443sslhttp2default_server;
#listen[::]:443sslhttp2default_server;
#server_name_;
#root/usr/share/Nginx/html;
#
#ssl_certificate"/etc/pki/Nginx/";
#ssl_certificate_key"/etc/pki/Nginx/private/";
#ssl_session_cacheshared:SSL:1m;
#ssl_session_timeout10m;
#ssl_ciphersHIGH:!aNULL:!MD5;
#ssl_prefer_server_cipherson;
#
##Loadconfigurationfilesforthedefaultserverblock.
#include/etc/Nginx//*.conf;
#
#location/{
#}
#
#error_page404/;
#location=/{
#}
#
#error_page500502503504/;
#location=/{
#}
#}
}

其实我们也可以只修改添加的内容

upstreamreal_server_pool{
#ip_hash;
server:80weight=1max_fails=2fail_timeout=30s;
server:80weight=1max_fails=2fail_timeout=30s;
}
#添加一组真实的服务器地址池
#供proxy_pass和fastcgi_pass指令中使用的代理服务器
#后台如果有动态应用的时候,不参与负载均衡.在ip_hash下使用
#backup仅仅在非backup服务器宕机或繁忙的时候使用
server{
listen:80;#监听ip改为本地ip
server_namelocalhost;
#charsetkoi8-r;
#access_loglogs/main;
location/{
#roothtml;
#index;
proxy_next_upstreamhttp_502http_504errortimeoutinvalid_header;
proxy_passreal_server_pool;
proxy_set_headerHost$host;
proxy_set_headerX-Forwarded-For$remote_addr;
}

然后我们启动备服务器的Nginx服务

systemctlstartNginx
systemctlenableNginx

我们在安装keepalived前,先配置路由转发

vim/etc/
_forward=1#此参数改为1
sysctl-p#使修改生效

然后安装keepalived

然后我们备份默认keepalived配置

cp/etc/keepalived//etc/keepalived/

然后修改拷贝的数据文件,

scp/etc/keepalived/root@:/etc/keepalived/

配置备用调度器的keepalived,只需要将state MASTER 改为state BACKUP,降低priority 100 的值:

vim/etc/keepalived/
global_defs{
notification_email{
gavin@#定义通知邮箱,有多个可以换行添加
}
notification_email_fromadmin@#定义发送邮件的邮箱
smtp_server#定义发件服务器
smtp_connect_timeout30#定义连接smtp服务器超时时间
router_idLVS_DEVEL
}
vrrp_instanceVI_1{
stateBACKUP#标示主备,备机上改为BACKUP
interfaceens160#HA监测的端口
virtual_router_id51#主备的virtual_router_id的值必须相同
priority50#优先级,一行一个
}
}
virtual_server80{
delay_loop6#每隔6秒查询realserver状态
lb_algorr
lb_kindNAT
nat_mask
persistence_timeout50#同一IP的连接50秒内被分配到同一台realserver
protocolTCP#用TCP监测realserver的状态
real_server80{#需要指向Nginx负载的地址
weight3#权重
TCP_CHECK{
connect_timeout10#10秒无响应超时
nb_get_retry3
delay_before_retry3
connect_port80
}
}
real_server80{#需要指向Nginx负载的地址
weight3
TCP_CHECK{
connect_timeout3
delay_before_retry3
connect_port80
}
}
}

我们介绍一下主要参数

global_defs
notification_email:keepalived在发生诸如切换操作时需要发送email通知地址,后面的smtp_server相比也都知道是邮件服务器地址。也可以通过其它方式报警,毕竟邮件不是实时通知的。
router_id:机器标识,通常可设为hostname。故障发生时,邮件通知会用到
vrrp_instance
state:指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER
interface:实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的
mcast_src_ip:发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
virtual_router_id:这里设置VRID,这里非常重要,相同的VRID为一个组,他将决定多播的MAC地址
priority:设置本节点的优先级,优先级高的为master
advert_int:检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常
authentication:定义认证方式和密码,主从必须一样
virtual_ipaddress:这里设置的就是VIP,也就是虚拟IP地址,他随着state的变化而增加删除,当state为master的时候就添加,当state为backup的时候删除,这里主要是有优先级来决定的,和state设置的值没有多大关系,这里可以设置多个IP地址
track_script:引用VRRP脚本,即在vrrp_script部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
vrrp_script
告诉keepalived在什么情况下切换,所以尤为重要。可以有多个vrrp_script
script:自己写的检测脚本。也可以是一行命令如killall-0Nginx
interval2:每2s检测一次
weight-5:检测失败(脚本返回非0)则优先级-5
fall2:检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise1:检测1次成功就算成功。但不修改优先级

记得修改防火墙配置哦

firewall-cmd--add-port='tcp/80'--permanent

然后我们启动 keepalived服务

systemctlstartkeepalived
systemcltlenablekeepalived

我们也测试ping一下vistual ip:

ping

接下来我们要实现realserver服务器配置

我们需要在两台web(http),,需要在这两台服务器上配置虚拟VIP,所以在服务器上执行以下脚本

首先在服务器上新建脚本文件

vimreal_server
然后添加一下脚本内容:
#!/bin/bash
#chkconfig:23458535
#Description:Startrealserverwithhostboot
VIP=
functionstart(){
ifconfiglo:0$VIPnetmaskbroadcast$VIP
echo1>/proc/sys/net/ipv4/conf/lo/arp_ignore
echo2>/proc/sys/net/ipv4/conf/lo/arp_announce
echo1>/proc/sys/net/ipv4/conf/all/arp_ignore
echo2>/proc/sys/net/ipv4/conf/all/arp_announce
echo“RealServer$(uname-n)started”
}
functionstop(){
ifconfiglo:0down
ifconfiglo:0$VIPnetmaskbroadcast$VIP
echo0>/proc/sys/net/ipv4/conf/lo/arp_ignore
echo0>/proc/sys/net/ipv4/conf/lo/arp_announce
echo0>/proc/sys/net/ipv4/conf/all/arp_ignore
echo0>/proc/sys/net/ipv4/conf/all/arp_announce
echo“RealServer$(uname-n)stopped”
}
case$1in
start)
start
;;
stop)
stop
;;
*)
echo“Usage:$0{start|stop}”
exit1
esac

保存退出后

然后赋予执行权限

chmoea+xrealserver

然后将脚本拷贝到第二台web服务器上:

scp/DATA/real_serverroot@/DATA/

我们在第二台服务器上查看

最后我们说一下如何将realserver的脚本添加到随系统启动

我们将使用chkconfig --add 来管理服务器的添加、顺序

cprealserver/etc//将脚本拷贝到指定目录
chkconfig--addrealserver添加realserver脚本到自动启动
chkconfig--list查看自动启动服务
chkconfig--list查看自动启动服务

通过以上配置后,我们就可以通过服务进行操作了

/etc//realserverstop
/etc//realserverstart
chkconfigrealserveron设置为自动启动

然后我们在第二台web服务器上做同样的操作

cprealserver/etc//将脚本拷贝到指定目录
chkconfig--addrealserver添加realserver脚本到自动启动
chkconfig--list查看自动启动服务
chkconfig--list查看自动启动服务

通过以上配置后,我们就可以通过服务进行操作了

/etc//realserverstop
/etc//realserverstart
chkconfigrealserveron设置为自动启动

接下来我们就是测试了,我们在两台realserver上执行查看ip状态

a-s
ipash
b-s
ipash

最后我们在keelalived服务器上查看ip状态,从状态上看,我们的keepalived是监听在备服务器上的,如果将备服务器keepalibed停止后,会切换到主服务器上的

aa-s主服务器
ipash

备服务器:

bb-s备服务器
ipash

最后我们就是测试了

我们访问vistual ip进行测试

我们查看log

tail-f/var/log/message

我们停止主服务器的keepalived服务

查看备服务器的log

最后我们说一下keepalived的log;Keepalived默认所有的日志都是写入到/var/log/message下的,由于message的日志太多了,而Keepalived的日志又很难分离出来,所以本文提供了一个调整Keepalived日志输出路径的方法。
具体操作步骤如下:
一、修改 /etc/sysconfig/keepalived

默认配置

vim/etc/sysconfig/keepalived
vim/etc/sysconfig/keepalived
把KEEPALIVED_OPTIONS="-D"修改为KEEPALIVED_OPTIONS="-D-d-S0"
#其中-S指定syslog的facility


接下来设置syslog
vim/etc/
注:Cnetos6的路劲是/etc/
Centos7的路劲是/etc/
添加以下配置
#keepalived-S0
local0.*/var/log/

保存退出后,重启服务

systemctlrestartrsyslog
systemctlrestartkeepalived

接下来我们查看/var/log路劲是否生成了文件

tail-f/var/log/

Centos7+Nginx+Keepalived实现Apache服务的高可用&负载均衡的更多相关文章

  1. 当iOS应用程序进入后台时,TCP和UDP(与多播)连接会发生什么

    我创建了几个实验:设置1:我创建了一个TCPSender应用程序和一个TCPReceiver应用程序.在本次实验中,我在iOS设备上启动了TCPSender,在另一台iOS设备上启动了TCPReceiver.然后两者都经过验证已建立连接并发送和接收数据.然后我将TCPReceiver应用程序置于后台.TCPSender应用程序指示连接丢失和崩溃(是的,我打算这样).设置2:我创建了一个UDPSen

  2. ios – 使用Swift的Lumberjack 2.0记录器

    我以前使用物镜C的Lumberjack记录器,我喜欢它.现在我开始学习Swift,我不能在那里使用我最喜欢的记录器.有人可以一步一步地写出我能做到的事吗?在Lumberjack2.0发布之前,我尝试在这里找到一些东西,但所有主题都是自定义包装器.我做了什么:>我用Cocoapods添加了Lumberjack;>我将“#import”添加到Bridging-Header文件中.我不知道接下来该怎么办?因为在ObjC中我有宏:staticconstintddLogLevel=LOG_LEVEL_INFO;el

  3. iOS推送通知优先级

    我已设置推送通知并正常工作,但是,有时我会遇到终端设备上的延迟交付.有没有办法我可以将推送的“优先级”键设置为10,以便立即发送推送?

  4. ios – 200在xcode 7中生成DSMM警告

    解决方法我有同样的问题.Facebook表示他们已经意识到这一点并且不是高优先级,因为它不会影响应用程序.我回退到4.7.1警告问题不再存在.我不认为它会被拒绝但不能确定.

  5. ios – 何时使用Semaphore而不是Dispatch Group?

    我会假设我知道如何使用DispatchGroup,为了解问题,我尝试过:结果–预期–是:为了使用信号量,我实现了:并在viewDidLoad方法中调用它.结果是:从概念上讲,dispachGroup和Semaphore都有同样的目的.老实说,我不熟悉:什么时候使用信号量,尤其是在与dispachGroup合作时–可能–处理问题.我错过了什么部分?

  6. xamarin.ios – Facebook iOS SDK:应用程序在启动时找不到“找不到符号:_ACFacebookAppIdKey.”仅在iOS 5中崩溃

    解决方法这是一个已修复的knownbug.目前唯一已知的解决方法是使用较旧版本的FacebookSDK.

  7. 如何使用Xcode的自动布局调整视图大小

    解决方法在写这个问题时,我意识到了诀窍是什么:在NSPopUpButton的大小检查器中,我不得不降低内容拥抱优先级.显然,这可以控制视图“拥抱”其内容的紧密程度.因此,当拥抱优先级高于调整大小优先级时,视图将不希望增加其大小,因为这意味着其边界与其内容之间具有更多的空白空间.然后在我的特殊情况下,我也可以将两个NSPopUpButtons固定为具有相同的宽度和vo:popUpButtons将完美地调整大小,同时保持间距不变.

  8. ios – 默认的自动布局内容拥抱和内容压缩阻抗优先级值是什么?

    我正在尝试调试自动布局问题,并且知道内容拥抱和内容压缩阻力优先级的默认值将有所帮助.这些是什么?它们是否特定于特定组件?我可以使用常量来引用它们吗?

  9. iOS – 友好的NSDate格式

    我需要在我的应用程序中显示帖子的日期给用户,现在我用这种格式:“5月25日星期五”.如何格式化NSDate以阅读“2小时前”的内容?使其更加用户友好.解决方法NSDateFormatter不能做这样的事情;你将需要建立自己的规则.我想像:所以这是打印’x分钟前’或’x小时前’从日期起24小时,通常是一天.

  10. osx – 无法创建目录/ var / teamsserver

    OpenSSH_6.2p2,OSSLShim0.9.8r8Dec2011debug1:Readingconfigurationdata/etc/ssh_configdebug1:/etc/ssh_configline20:Applyingoptionsfor*debug1:Connectingto1.2.3.4[1.2.3.4]portPORT.debug1:Connectionestablished.Couldnotcreatedirectory‘/var/teamsserver/.ssh’.debug

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部