haproxy(grpc)+keepalived
一、安装haproxy
1,下载
1)公网下载地址:http://download.openpkg.org/components/cache/haproxy/
2)配置下载https://github.com/jinjianming/load-balancing
2,编译
tar -xvf haproxy-2.0.4.tar && cd haproxy-2.0.4/
make TARGET=custom ARCH=x86_64 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
/usr/local/haproxy/sbin/haproxy -v
3,启动
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy2.0.cfg
配置
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local0.* /data/log/haproxy.log
#
log 127.0.0.1 local0
nbproc 1
maxconnrate 300
maxcomprate 300
maxsessrate 500
chroot /usr/local/haproxy #部署路径
pidfile /usr/local/haproxy/haproxy.pid #pid文件
#ulimit -n 50000
maxconn 30000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /usr/local/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option dontlognull
option redispatch
option http-use-htx
option logasap
option httplog
retries 3
timeout http-request 100s
timeout queue 1m
timeout connect 5m
timeout client 5m
timeout server 5m
timeout connect 5m
timeout http-keep-alive 100s
timeout check 10s
maxconn 100000
#--------------------------------------
#monitor
#--------------------------------------
listen admin_stats
stats enable
bind 0.0.0.0:8089 #监控端口设置
mode http
log global
maxconn 10
stats uri /stats #登录监控子路径配置
stats realm welcome\ Haproxy
stats auth admin:admin #监控的账号密码
stats admin if TRUE
option httplog
stats refresh 30s
stats hide-version
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend wx_idl_server #frontend名称
bind *:8051 proto h2 #haproxy的端口 proto h2此配置为更好调度grpc如果是http需要删除掉
default_backend wx_idl_server
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend wx_idl_server
balance leastconn #负载策略 leastconn为 最少连接者先处 roundrobin # 轮询,软负载均衡基本都具备这种算法 balance static-rr # 根据权重,建议使用 等等。
#option tcplog
server s1 192.168.1.2:30051 check proto h2 weight 1 maxconn 200 #负载地址,proto h2此配置为更好调度grpc如果是http需要删除掉
server s2 192.168.1.3:30051 check proto h2 weight 1 maxconn 200
4,使用system管理haproxy
vim /lib/systemd/system/haproxy.service
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/haproxy
ExecStart=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy2.0.cfg $OPTIONS
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/kafka.service
systemctl daemon-reload
systemctl start haproxy
二、安装keepalived及配置
1)公网下载地址:https://www.keepalived.org/download.html
2,编译
tar -zxvf /home/keepalived-2.0.10.tar.gz
cd keepalived-2.0.10/
./configure --prefix=/usr/local/keepalived
编译过程中出现的错误:
*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
解决方案:
yum install -y libnl libnl-devel
继续编译,若出现下面错误
configure: error: libnfnetlink headers missing
解决方案:
yum install -y libnfnetlink-devel
继续编译,然后安装
./configure --prefix=/usr/local/keepalived
make && make install
制作快捷启动,在源文件的目录/opt/software/keepalived-2.0.10/keepalived/etc/init.d下有两个个快捷启动文件和生成/usr/local/keepalived目录下一个配置文件需要复制,具体执行如下命令:
cp /home/keepalived-2.0.10/keepalived/etc/init.d/keepalived /etc/init.d/
# 需要提前在/etc下创建keepalived目录
mkdir -p /etc/keepalived
##cp之前先改好配置文件如下附件。
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /home/keepalived-2.0.10/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
systemctl daemon-reload
这样就可以执行service keepalived [start | stop | reload | restart ]命令。
启动报“Starting keepalived: /bin/bash: keepalived: command not found”错误:
解决方案:
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
或者
systemctl start keepalived
3,keeplived-1的配置
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_haproxy {
script "/usr/bin/killall -0 haproxy" #检查haproxy状态
interval 2
weight -4 #当检查失败减4个权重
}
vrrp_instance VI_1 {
state MASTER #当前角色为master
interface bond4 #网卡名称
virtual_router_id 152 #路由id,要在整个网段中唯一切与slave相同
priority 100
nopreempt #设置不抢占模式当自身恢复后不会抢占vip
unicast_src_ip 10.96.37.53 #本地ip
unicast_peer {
10.96.37.54 #slave的IP地址
}
advert_int 1
authentication {
auth_type PASS
auth_pass passAI
}
virtual_ipaddress {
10.96.37.74/24 #虚ip
}
track_script {
chk_haproxy
}
}
keeplived-2的配置
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 2
weight -4
}
vrrp_instance VI_1 {
state BACKUP
interface bond4
virtual_router_id 152
priority 99
unicast_src_ip 10.96.37.54
unicast_peer {
10.96.37.53
}
advert_int 1
authentication {
auth_type PASS
auth_pass passAI
}
virtual_ipaddress {
10.96.37.74/24
}
track_script {
chk_haproxy
}
}