网页微信登录不了提示为了安全考虑,哈尔滨seo优化排名,嘉兴网站托管,服务周到的上海网站建设公司1.什么是HaproxyHAProxy是一个使用C语言编写的自由及开放源代码软件[1]#xff0c;其提供高可用性、负载均衡#xff0c;以及基于TCP和HTTP的应用程序代理。HAProxy特别适用于那些负载特大的web站点#xff0c;这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬…1.什么是HaproxyHAProxy是一个使用C语言编写的自由及开放源代码软件[1]其提供高可用性、负载均衡以及基于TCP和HTTP的应用程序代理。HAProxy特别适用于那些负载特大的web站点这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中 同时可以保护你的web服务器不被暴露到网络上2.什么是KeepAlivedkeepalived是一个类似于layer3, 4 5交换机制的软件也就是我们平时说的第3层、第4层和第5层交换。Keepalived是自动完成不需人工干涉。Keepalived的作用是检测服务器的状态如果有一台web服务器宕机或工作出现故障Keepalived将检测到并将有故障的服务器从系统中剔除同时使用其他服务器代替该服务器的工作当服务器工作正常后Keepalived自动将服务器加入到服务器群中这些工作全部自动完成不需要人工干涉需要人工做的只是修复故障的服务器3.什么是MycatMyCat 是目前最流行的基于 java 语言编写的数据库中间件是一个实现了 MySQL 协议 的服务器前端用户可以把它看作是一个数据库代理用 MySQL 客户端工具和命令行访问 而其后端可以用 MySQL 原生协议与多个 MySQL 服务器通信也可以用 JDBC 协议与大多数 主流数据库服务器通信其核心功能是分库分表。配合数据库的主从模式还可实现读写分离。 MyCat 是基于阿里开源的 Cobar 产品而研发Cobar 的稳定性、可靠性、优秀的架构和 性能以及众多成熟的使用案例使得 MyCat 变得非常的强大。4.HaproxyKeepAlivedMycat结构图5.搭建 xinetd 服务配置 MyCat 状态检查服务 在所有 MyCat192.168.199.184/192.168.199.116服务所在主机中增加状态检查服务脚 本。此操作为 HaProxy 提供对 MyCat 服务状态检查的依据。通过 xinetdHAProxy 可以用 httpchk 来检测 Mycat 的存活状态。xinetd 即 extended internet daemonxinetd 是新一代的网络守护进程服务程序又叫超级 Internet 服务器。经常用来管 理多种轻量级 Internet 服务。xinetd 提供类似于 inetdtcp_wrapper 的功能但是更加强大和 安全。xinetd 为 linux 系统的基础服务1.安装 xinetdyum install -y xinetd2.检查/etc/xinetd.conf 的末尾是否有 includedir /etc/xinetd.d 没有就加上 vi /etc/xinetd.conf3.创建/etc/xinetd.d 目录检查 /etc/xinetd.d 目录是否存在不存在则创建 mkdir /etc/xinetd.d/4.增加 Mycat 存活状态检测服务配置vi /etc/xinetd.d/mycat_statusservice 说明service 6.添加 /usr/local/bin/mycat_status 服务脚本vi /usr/local/bin/mycat_status!7. 给新增脚本赋予可执行权限chmod 755 /usr/local/bin/mycat_status8.在 /etc/services 中加入 mycat_status 服务vi /etc/services 在末尾加入 mycat_status 48700/tcp # mycat_status保存后重启 xinetd 服务 service xinetd restart9.验证 mycat_status 服务是否成功启动 netstat -antup|grep 4870010.测试脚本是否有效/usr/local/bin/mycat_status6.安装 HAProxy1.上传 haproxy-1.7.1.tar.gz 到 Linux 并解压安装包tar -zxf haproxy-1.7.1.tar.gz2.安装编译依赖yum install -y gcc gcc-c pcre pcre-devel zlib zlib-devel openssl openssl-devel3.编译cd haproxy-1.7.1make TARGETlinux2628 ARCHx86_64 USE_PCRE1 USE_OPENSSL1 USE_ZLIB1PREFIX/usr/local/haproxy注意TARGET 是指定内核版本高于 2.6.28 的建议设置为 linux2628Linux 操作系统内核版本查看命令# uname -r ARCH 指定系统架构openssl pcre zlib 这三个包需要安装不然不支持4.创建安装目录mkdir /usr/local/haproxy5.执行安装make install PREFIX/usr/local/haproxy6.创建配置文件目录mkdir -p /usr/local/haproxy/confmkdir -p /etc/haproxy/7.添加配置文件并创建软连接vi /usr/local/haproxy/conf/haproxy.cfggloballn -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg8.拷贝错误页面资源并创建软连接可选cp -r /root/upload/haproxy-1.7.1/examples/errorfiles /usr/local/haproxy/ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles9.拷贝开机启动文件并赋予权限cp /root/upload/haproxy-1.7.1/examples/haproxy.init /etc/rc.d/init.d/haproxychmod x /etc/rc.d/init.d/haproxy10.添加 HAProxy 命令脚本软连接ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin11.设置 HAProxy 开机启动chkconfig --add haproxychkconfig haproxy onHAProxy 配置 MyCat 负载均衡集群haproxy.cfg说明vi /usr/local/haproxy/conf/haproxy.cfg## global 配置中的参数为进程级别的参数通常与其运行的操作系统有关
global
log 127.0.0.1 local0 info ## 定义全局的 syslog 服务器最多可以定义 2 个
### local0 是日志设备对应于/etc/rsyslog.conf 中的配置默认回收 info 的日志级别
#log 127.0.0.1 local1 info
chroot /usr/share/haproxy ## 修改 HAProxy 的工作目录至指定的目录并在放弃权限之前
执行
### chroot() 操作可以提升 haproxy 的安全级别
group haproxy ## 同 gid不过这里为指定的用户组名
user haproxy ## 同 uid但这里使用的为用户名
daemon ## 设置 haproxy 后台守护进程形式运行
nbproc 1 ## 指定启动的 haproxy 进程个数
### 只能用于守护进程模式的 haproxy默认为止启动 1 个进程
### 一般只在单进程仅能打开少数文件描述符的场中中才使用多进程模式
maxconn 4096 ## 设定每个 haproxy 进程所接受的最大并发连接数
### 其等同于命令行选项-nulimit-n自动计算的结果正式参照从参数设定的
# pidfile /var/run/haproxy.pid ## 进程文件默认路径 /var/run/haproxy.pid
node haproxy1 ## 定义当前节点的名称用于 HA 场景中多 haproxy 进程共享同一个 IP
地址时
description haproxy1 ## 当前实例的描述信息
## defaults用于为所有其他配置段提供默认参数这默认配置参数可由下一个defaults 所重新设定
defaults
log global ## 继承 global 中 log 的定义
mode http ## mode:所处理的模式 (tcp:四层 , http:七层 , health:状态检查,只会返回 OK)
### tcp: 实例运行于纯 tcp 模式在客户端和服务器端之间将建立一个全双工的连接
#### 且不会对 7 层报文做任何类型的检查此为默认模式
### http:实例运行于 http 模式客户端请求在转发至后端服务器之前将被深度分析
#### 所有不与 RFC 模式兼容的请求都会被拒绝
### health实例运行于 health 模式其对入站请求仅响应“OK”信息并关闭连接
#### 且不会记录任何日志信息 此模式将用于相应外部组件的监控状态检测请求
option httplog
retries 3
option redispatch ## serverId 对应的服务器挂掉后,强制定向到其他健康的服务器
maxconn 2000 ## 前端的最大并发连接数默认为 2000
### 其不能用于 backend 区段对于大型站点来说可以尽可能提高此值以便让 haproxy
管理连接队列
### 从而避免无法应答用户请求。当然此最大值不能超过“global”段中的定义。
### 此外需要留心的是haproxy 会为每个连接维持两个缓冲每个缓存的大小为 8KB
### 再加上其他的数据每个连接将大约占用 17KB 的 RAM 空间这意味着经过适当优
化后
### 有着 1GB 的可用 RAM 空间时将维护 40000-50000 并发连接。
### 如果指定了一个过大值极端场景中其最终所占据的空间可能会超过当前主机的
可用内存
### 这可能会带来意想不到的结果因此将其设定一个可接受值放为明智绝对其默
认为 2000
timeout connect 5000ms ## 连接超时(默认是毫秒,单位可以设置 us,ms,s,m,h,d)
timeout client 50000ms ## 客户端超时
timeout server 50000ms ## 服务器超时
## HAProxy 的状态信息统计页面
listen admin_stats
bind :48800 ## 绑定端口
stats uri /admin-status ##统计页面
stats auth admin:admin ## 设置统计页面认证的用户和密码如果要设置多个另起一
行写入即可
mode http
option httplog ## 启用日志记录 HTTP 请求
## listen: 用于定义通过关联“前端”和“后端”一个完整的代理通常只对 TCP 流量有用
listen mycat_servers
bind :3307 ## 绑定端口
mode tcp
option tcplog ## 记录 TCP 请求日志
option tcpka ## 是否允许向 server 和 client 发送 keepalive
option httpchk OPTIONS * HTTP/1.1rnHost: www ## 后端服务状态检测
### 向后端服务器的 48700 端口端口值在后端服务器上通过 xinetd 配置发送
OPTIONS 请求
### (原理请参考 HTTP 协议) HAProxy 会根据返回内容来判断后端服务是否可用. ### 2xx 和 3xx 的响应码表示健康状态其他响应码或无响应表示服务器故障。
balance roundrobin ## 定义负载均衡算法可用于defaults、listen和backend中,默
认为轮询方式
server mycat_01 192.168.199.184:8066 check port 48700 inter 2000ms rise 2 fall 3 weight
10
server mycat_02 192.168.199.116:8066 check port 48700 inter 2000ms rise 2 fall 3 weight
10
## 格式server name address[:[port]] [param*]
### serser 在后端声明一个 server只能用于 listen 和 backend 区段。
### name为此服务器指定的内部名称其将会出现在日志及警告信息中
### address此服务器的 IPv4 地址也支持使用可解析的主机名但要在启动时需要
解析主机名至响应的 IPV4 地址
### [:[port]]指定将客户端连接请求发往此服务器时的目标端口此为可选项
### [param*]为此 server 设定的一系列参数均为可选项参数比较多下面仅说明几
个常用的参数
#### weight:权重默认为 1最大值为 2560 表示不参与负载均衡
#### backup:设定为备用服务器仅在负载均衡场景中的其他 server 均不可以启用此
server
#### check:启动对此 server 执行监控状态检查其可以借助于额外的其他参数完成更精
细的设定
#### inter:设定监控状态检查的时间间隔单位为毫秒默认为 2000
##### 也可以使用 fastinter 和 downinter 来根据服务器端专题优化此事件延迟
#### rise:设置 server 从离线状态转换至正常状态需要检查的次数不设置的情况下默
认值为 2
#### fall:设置 server 从正常状态转换至离线状态需要检查的次数不设置的情况下默
认值为 3
#### cookie:为指定 server 设定 cookie 值此处指定的值将会在请求入站时被检查
##### 第一次为此值挑选的 server 将会被后续的请求所选中其目的在于实现持久连接
的功能
#### maxconn:指定此服务器接受的最大并发连接数如果发往此服务器的连接数目高
于此处指定的值
#####其将被放置于请求队列以等待其他连接被释放注意多节点部署时 node 、 description 的值要做相应调整2.为 HAProxy 添加 Linux 系统用户groupadd haproxy useradd -g haproxy haproxy3.创建 chroot 运行的路径 mkdir /usr/share/haproxy 4.开启 rsyslog 的 haproxy 日志记录功能默认情况下 haproxy 是不记录日志的如果需要记录日志还需要配置系统的 syslog在 linux 系统中是 rsyslog 服务。syslog 服务器可以用作一个网络中的日志监控中心rsyslog是一个开源工具被广泛用于 Linux 系统以通过 TCP/UDP 协议转发或接收日志消息。安装配置 rsyslog 服务yum install -y rsyslog ## 没安装的情况下执行安装vi /etc/rsyslog.conf把 $ModLoad imudp 和 $UDPServerRun 514 前面的 # 去掉
$ModLoad imudp ## 是模块名支持 UDP 协议
$UDPServerRun 514
##允许 514 端口接收使用 UDP 和 TCP 协议转发过来的日志
##而 rsyslog 在默认情况下正是在 514 端口监听 UDP
确认 #### GLOBAL DIRECTIVES #### 段中是否有 $IncludeConfig /etc/rsyslog.d/*.conf 没
有则增加上此配置。
rsyslog 服务会来此目录加载配置cd /etc/rsyslog.d/创建 haproxy 的日志配置文件vi /etc/rsyslog.d/haproxy.conflocal0.* /var/log/haproxy.log
~注意如果不加上面的的~配置则除了在/var/log/haproxy.log 中写入日志外也会 写入/var/log/message 文件中配置保存后重启 rsyslog 服务 service rsyslog restart 等到 HAProxy 服务启动后就能在/var/log/haproxy.log 中看到日志了5.配置系统内核 IP 包转发规则vi /etc/sysctl.confnet.ipv4.ip_forward 1使配置生效 sysctl -p6.启动 HAProxyservice haproxy start ps -ef | grep haproxy查看 HAProxy 提供的 WEB 统计应用http://192.168.199.157:48800/admin-status
http://192.168.199.102:48800/admin-status
用户名和密码都是 admin参考/usr/local/haproxy/conf/haproxy.cfg 配置文件。
注意安装完一个 HAProxy 之后可以通过 mysql 命令控制台直接测试访问 HAProxy。
命令为mysql -uroot -p123456 -h192.168.199.157 -P33077.安装 Keepalived官网 http://www.keepalived.org/1.上传 Keepalived 到 Linux 服务器2.安装依赖yum install -y curl gcc openssl-devel libnl3-devel net-snmp-deve3.解压并安装tar -zxf keepalived-1.2.18.tar.gzcd keepalived-1.2.18mkdir /usr/local/keepalived./configure --prefix/usr/local/keepalivedmake make install4.将 Keepalived 安装成 Linux 系统服务因为没有使用 keepalived 的默认路径安装默认是/usr/local ,安装完成之后需要做
一些工作复制默认配置文件到默认路径
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
复制 keepalived 服务脚本到默认的地址
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
设置 keepalived 服务开机启动
chkconfig keepalived on5.修改 Keepalived 配置文件5.1修改 haproxy1 服务器中的配置文件vi /usr/local/keepalived/etc/keepalived/keepalived.confvi /etc/keepalived/keepalived.conf! Configuration File for keepalived
global_defs {router_id haproxy1
}
vrrp_script chk_haproxy {script /etc/keepalived/haproxy_check.shinterval 2weight 2
}
vrrp_instance VI_1 {state BACKUP interface eth0 virtual_router_id 35 priority 120nopreempt advert_int 1 authentication {auth_type PASSauth_pass 1111 }track_script {chk_haproxy}virtual_ipaddress {192.168.199.190}
}说明! Configuration File for keepalived
global_defs {
## keepalived 自带的邮件提醒需要开启 sendmail 服务。建议用独立的监控或第三方
SMTP
router_id haproxy1 ## 标识本节点的字符串通常为 hostname需要修改/etc/hosts
}
## keepalived 会定时执行脚本并对脚本执行的结果进行分析动态调整 vrrp_instance
的优先级。
## 如果脚本执行结果为 0并且 weight 配置的值大于 0则优先级相应的增加。
## 如果脚本执行结果非 0并且 weight 配置的值小于 0则优先级相应的减少。
## 其他情况维持原本配置的优先级即配置文件中 priority 对应的值。
vrrp_script chk_haproxy {
script /etc/keepalived/haproxy_check.sh ## 检测 haproxy 状态的脚本路径
interval 2 ## 检测时间间隔
weight 2 ## 如果条件成立权重2
}
## 定义虚拟路由 VI_1 为虚拟路由的标示符自己定义名称
vrrp_instance VI_1 {
state BACKUP ## 默认主设备priority 值大的和备用设备priority 值小的都
设置为 BACKUP
## 由 priority 来控制同时启动情况下的默认主备否则先启动的为主设备
interface eth0 ## 绑定虚拟 IP 的网络接口与本机 IP 地址所在的网络接口相同
我的是 eth0
virtual_router_id 35 ## 虚拟路由的 ID 号两个节点设置必须一样可选 IP 最后
一段使用,## 相同的 VRID 为一个组他将决定多播的 MAC 地址
priority 120 ## 节点优先级值范围 0-254 MASTER 要比 BACKUP 高
nopreempt ## 主设备priority 值大的配置一定要加上 nopreempt否则非抢占
也不起作用
advert_int 1 ## 组播信息发送间隔两个节点设置必须一样默认 1s
## 设置验证信息两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111 ## 真实生产按需求对应该过来
}
## 将 track_script 块加入 instance 配置块
track_script {
chk_haproxy ## 检查 HAProxy 服务是否存活
}
## 虚拟 IP 池, 两个节点设置必须一样
virtual_ipaddress {
192.168.199.190 ## 虚拟 ip可以定义多个每行一个
}
}5.2修改 haproxy2 服务器中的配置文件vi /usr/local/keepalived/etc/keepalived/keepalived.confvi /etc/keepalived/keepalived.conf! Configuration File for keepalived
global_defs {router_id haproxy2
}
vrrp_script chk_haproxy {script /etc/keepalived/haproxy_check.shinterval 2weight 2
}
vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 35priority 110advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_haproxy}virtual_ipaddress {192.168.199.190}
}注意 如果非抢占模式不生效 在 Keepalived 的故障节点恢复后会再次导抢占vip从而因 vip 切换而闪断带来的风险视频解说。 按以上配置配置了 Keepalived 非抢占模式 配置及注意点如下(1) 主设备、 从设备中的 state 都设置为 BACKUP(2) 主设备、从设备中都不要配置 mcast_src_ip 本机 IP 地址(3) 默认主设备priority 值大的 Keepalived 节点 配置一定要加上 nopreempt否则非抢占不起作用(4) 防火墙配置允许组播主、备两台设备上都需要配置 keepalived 使用 224.0.0.18作为 Master 和 Backup 健康检查的通信 IP6.提供 HAProxy 状态检查脚本如果 haproxy 停止运行尝试启动如果无法启动则杀死本机的 keepalived 进 程keepalied 将虚拟 ip 绑定到 BACKUP 机器上。mkdir -p /usr/local/keepalived/logvi /etc/keepalived/haproxy_check.sh#!/bin/bash
START_HAPROXY/etc/rc.d/init.d/haproxy start STOP_HAPROXY/etc/rc.d/init.d/haproxy stopLOG_FILE/usr/local/keepalived/log/haproxy-check.log HAPSps -C haproxy --no-header |wc -l date %Y-%m-%d %H:%M:%S $LOG_FILE
echo check haproxy status $LOG_FILE
if [ $HAPS -eq 0 ];then
echo $START_HAPROXY $LOG_FILE
$START_HAPROXY $LOG_FILE 21
sleep 3
if [ ps -C haproxy --no-header |wc -l -eq 0 ];then
echo start haproxy failed, killall keepalived $LOG_FILE
killall keepalived
fi
fichmod x /etc/keepalived/haproxy_check.sh7.启动 Keepalivedservice keepalived start关闭后Keepalived 会自动启动 HAProxy。关闭 Keepalived 命令 service haproxy stop查看 vip 命令 ip add查看进程命令 ps -ef | grep haproxy通过 VIP 访问 MYSQL:8.MyCat 配置数据库集群数据库集群负载策略:第一种配置方案schema.xml?xml version1.0?
缺陷可能有 IO 延迟问题。第二种配置方案?xml version1.0?
属性说明1.balance 属性
balance”0”, 不开启读写分离机制所有读操作都发送到当前可用的 writeHost 上
balance”1”全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡
balance”2”所有读操作都随机的在 writeHost、 readhost 上分发。
balance”3” 所有读请求随机的分发到 writeHost 对应的 readhost 执行,writerHost
不负担读压力
2 writeType 属性
writeType”0”, 所有写操作发送到配置的第一个 writeHost第一个挂了切到还生存的第
二个 writeHost重新启动后已切换后的为准切换记录在配置文件中:conf/dnindex.properties
datanode index
writeType”1”所有写操作都随机的发送到配置的 writeHost1.5 以后废弃不推荐
3 switchType 属性
也涉及到读写分离问题可以解决 IO 延迟问题。
switchType-1 表示不自动切换
switchType1 默认值表示自动切换
switchType2 基于 MySQL 主从同步的状态决定是否切换读写主机,心跳语句为 show
slave status。 当心跳监测获取的数据发现了 IO 的延迟则读操作自动定位到 writeHost
中。如果心跳监测获取的数据没有 IO 延迟则读操作自动定位到 readHost 中。建议为
不同的表格定位不同的 dataHost 节点。