chengrendianshitai,雾里看花演员表,夏妍的秋天片尾曲
系统环境:ubuntu16.04(docker容器)
架构环境:
keepalived/haproxy master: 172.17.0.4
keepalived/haproxy backup: 172.17.0.6
mysql master: 172.17.0.2
mysql slave: 172.17.0.3
haproxy版本:haproxy-2.0.8.tar.gz
keepalived版本:keepalived-2.0.19.tar.gz
一、安装haproxy(master/backup两台都要装)
1、前往官网 下载haproxy
解压,进入haproxy-2.0.8目录
vim install;查看安装说明
2、编译安装haproxy
(1)编译
报错1:bash: make: command not found
我直接用docker容易,make命令没安装,安装一下:
apt-get -y install make
然后执行:
make -j 2 target=generic use_gzip=1
报错2:/bin/sh: 1: gcc: not found
未安装gcc,安装gcc:
apt-get -y install gcc
然后再执行:
make -j 2 target=generic use_gzip=1
暂时未报错:
(2)安装
直接执行:
make install prefix=/usr/local/haproxy2.0.8
(3)复制命令至/usr/local/sbin/下
3、添加服务启动脚本文件
vim /etc/init.d/haproxy
#!/bin/bash # # chkconfig: 2345 85 15 # descrition: haproxy loadbalancer daemon=haproxy prog_dir=/usr/local/haproxy2.0.8 retval=0 success() { #跟朋友的探讨,使用shell本身来实现;当然也可以使用for的遍历循环, 总之方法有很多种 for ((i=0;i<=5;i++)) do sleep 0.2 echo -n "." done } start () { prog_stat=$(netstat -tlnp | grep ${daemon}) if [ -z "$prog_stat" ]; then $prog_dir/sbin/$daemon -f $prog_dir/conf/${daemon}.cfg echo -ne "starting ${daemon}......\t\t\t" && success echo -e "\e[32m[ok]\e[0m" else echo "$daemon is already running" retval=65 fi } stop () { prog_stat=$(netstat -tlnp | grep ${daemon}) if [ -n "$prog_stat" ]; then echo -ne "stopping ${daemon}......\t\t\t" && success prog_pid=$(cat $prog_dir/run/${daemon}.pid) kill $prog_pid echo -e "\e[32m[ok]\e[0m" else echo "$daemon is already stopped" retval=66 fi } restart() { echo -ne "restarting ${daemon}......\t\t\t" && success prog_pid=$(cat $prog_dir/run/${daemon}.pid) $prog_dir/sbin/$daemon -f $prog_dir/conf/${daemon}.cfg -st $prog_pid echo -e "\e[32m[ok]\e[0m" } status () { prog_stat=$(netstat -tlnp | grep ${daemon}) if [ -z "$prog_stat" ]; then echo "${daemon} stopped" else echo "${daemon} running" fi } case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; *) echo "usage /etc/init.d/$daemon {start | stop | restart | status}" retval=67 esac exit $retval
赋予执行权限:
chmod +x /etc/init.d/haproxy
4、添加haproxy.conf配置文件
先创建haproxy用户与组:
再创建配置文件:
mkdir -p /etc/haproxy
vim /etc/haproxy/haproxy.conf
global log 127.0.0.1 local2 info # 设置日志文件输出定向,info为日志级别 chroot /usr/local/haproxy2.0.8 # 改变当前工作目录 pidfile /usr/local/haproxy2.0.8/run/haproxy.pid #pid文件位置 user haproxy # 用户与用户组 group haproxy daemon # 守护进程启动,运维方式为后台工作 maxconn 4000 # 最大连接数 # 作用于其后紧跟的listen块,直至下一个defaults 块,下一个default 将替换上一个块作用于以后的listen defaults log global #启动每个实例日志记录事件和流量 mode http #默认的模式mode {tcp|http|health},tcp是四层,http是七层,health只会返回ok retries 3 #对server的connection失败后,重试的次数 option redispatch #启用或禁止在连接故障情况下的会话重新分配 maxconn 4096 #maxconn每个进程可用的最大连接数 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s frontend main bind 0.0.0.0:3307 default_backend mysql backend mysql balance leastconn #算法:最少连接数 server mysql1 172.17.0.2:3306 check port 3306 maxconn 300 server mysql2 172.17.0.3:3306 check port 3306 maxconn 300
复制一份配置文件到该目录:
cp -a /etc/haproxy/haproxy.conf /usr/local/haproxy2.0.8/conf/haproxy.cfg
来启动haproxyd服务
/etc/init.d/haproxy start
显示服务启动成功,端口也在
二、安装keepalived
1、前往官网下载所需版本
同样解压,进入目录,查看安装说明文档(此处忽略)
2、编译扮装
(1)检查环境
./configure --prefix=/usr/local/keepalived-2.0.19
报错1:can not include openssl headers files
没有openssl,执行:
apt-get -y install openssl libssl-dev
注意:redhat和centos中是需要安装openssl和openssl-devel的,在ubuntu中,openssl-devel被libssl-dev所代替,安装libssl-dev即可
再重新检查环境~
ok,每问题,警告忽视
(2)编译、编译安装
make && make install
ok,编译安装完成
3、编辑配置文件
cp /usr/local/keepalived-2.0.19/etc/keepalived/keepalived.conf /etc/keepalived/ #复制配置文件
cp /usr/local/keepalived-2.0.19/sbin/keepalived /usr/local/sbin/
cp /usr/local/keepalived-2.0.19/etc/rc.d/init.d/keepalived /etc/init.d/ #复制服务启动文件
chmod +x /etc/init.d/keepalived
vim /etc/keepalived/keepalived.conf(master机)
! configuration file for keepalived global_defs { router_id r1 #虚拟路由名称,master和backup不能一致 } vrrp_script chk_haproxy { #定义检查脚本 script "/etc/keepalived/chk_haproxy.sh" #脚本位置 interval 3 #每3秒检测一次 fall 3 #失败判断3次 # weight -2 #失败后权重-2 } vrrp_instance vi_1 { state master #状态,只有master或backup interface eth0 #网卡名称,注意一定要是自己正在使用的网卡名称 virtual_router_id 53 #虚拟路由id,是虚拟路由的mac最后两位 priority 100 #优先级 advert_int 1 #通告间隔时间 authentication { #认证 auth_type pass auth_pass 1111 } track_script { #执行以上脚本 chk_haproxy } virtual_ipaddress { #vip地址,同网段 172.17.0.253 } # notify_master "/etc/init.d/haproxy start" #当 当前节点成为master时,执行的任务 # notify_backup "/etc/init.d/haproxy restart" #当 当前节点成为backup时,执行的任务 # notify_fault "/etc/init.d/haproxy stop" #当 当前节点出现故障时,执行的任务 }
ok,创建健康检查脚本文件
vim /etc/keepalived/chk_haproxy.sh
#/bin/bash stat=`ps -c haproxy --no-header | wc -l` if [[ ! "$stat" -eq 1 ]];then /etc/init.d/keepalived stop fi
如果进程未在,直接关闭keepalived
chmod +x chk_haproxy.sh #给个执行权限
4、启动keepalived服务
启动文件中某些文件不存在,需要手动链接一下(ubuntu就是麻烦):
ln -s /lib/lsb/init-functions /etc/init.d/functions
mkdir /etc/rc.d
ln -s /etc/init.d /etc/rc.d/
cp /src/keepalived-2.0.19/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
然后安装daemon命令:
apt-get -y install daemon
注意图中,daemon -- keepalived 之前是 daemon keepalived,加了两条横杠
这个命令是有问题的,其中的-d本来是给keepalived用的,但这样组合后被认为是daemon命令的参数。这会导致服务不能启动。 如果不修改,会提示启动失败,但却不输出具体信息。
注意,由于我是使用docker容器安装的keepalived,所以我需要将此容器保存成镜像,然后再重新docker run,要加上--privileged这个参数,才能显示keepalived的vip(不是用容器安装的可以忽略)
docker run -dit --privileged --name ha_keep -p 3308:3307 ha_keep
下边启动服务:
/etc/init.d/keepalived start
执行:ip addr
5、配置backup机
haproxy服务于master机一致,keepalived服务主要修改主配置文件
keepalived/backup机配置文件:
! configuration file for keepalived global_defs { router_id r2 #虚拟路由名称,master和backup不能一致 } vrrp_script chk_haproxy { #定义检查脚本 script "/etc/keepalived.chk_haproxy.sh" #脚本位置 interval 3 #每3秒检测一次 fall 3 #失败判断3次 # weight -2 #失败后权重-2 } vrrp_instance vi_1 { state backup #状态,只有master或backup interface eth0 #网卡名称,注意一定要是自己正在使用的网卡名称 virtual_router_id 53 #虚拟路由id,是虚拟路由的mac最后两位 priority 99 #优先级 advert_int 1 #通告间隔时间 authentication { #认证 auth_type pass auth_pass 1111 } track_script { chk_haproxy } virtual_ipaddress { #vip地址,同网段 172.17.0.253 } # notify_master "/etc/init.d/haproxy start" #当 当前节点成为master时,执行的任务 # notify_backup "/etc/init.d/haproxy restart" #当 当前节点成为backup时,执行的任务 # notify_fault "/etc/init.d/haproxy stop" #当 当前节点出现故障时,执行的任务 }
其他配置相同,然后启动keepalived
6、测试将master机的haproxy服务stop,会不会自动将keepalived服务关掉,将vip转移到bakup机
下图所示vip到backup机就说明配置ok
7、负载均衡高可用配置完毕,不过此架构适用于mysql主主复制或有共享存储服务器,个人感觉mysql主主容易产生问题,不太推荐,个人看法。
如有转载请标明出处
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
linux下文本编辑器vim的使用方法(复制、粘贴、替换、行号、撤销、多文件操作)
网友评论