一、准备工作
准备三台CentOS服务器,IP地址分别为192.168.0.150,192.168.0.151,192.168.0.152。
在151和152服务器上安装好Mysql(CentOS 7安装MySQL)。
在150和152服务器上安装Mycat并配置好schema(Mycat安装与配置)。
二、安装HaProxy
我们通过yum的方式安装HaProxy,先在150这台服务器安装。
1、查找haproxy的安装文件
yum search haproxy
2、安装haproxy
yum -y install haproxy.x86_64
3、修改haproxy的配置
vim /etc/haproxy/haproxy.cfg
先将defaults下的mode改成tcp,因为Haproxy只能通过tcp协议来连接mycat。
接下来配置backend app,这里配置的是mycat的ip和端口号,然后保存并退出。
4、启动Haproxy
haproxy -f /etc/haproxy/haproxy.cfg
这里出现的警告信息暂时不用理会,查看一下进程看Haproxy是否已经启动
ps -ef|grep haproxy
没问题。
haproxy的端口号为5000,账户密码为mycat的账户密码。
6、测试验证
关闭150服务器上的mycat,看通过haproxy能否正常访问。
可以正常访问
再将152服务器上mycat也关闭
不能正常访问。至此,Haproxy已经成功安装并成功代理到150、152服务器上的两台mycat。按照同样的步骤在152服务器上安装好Haproxy。
7、针对Haproxy启动时出现的警告信息,我们可以修改一下配置来取消掉这些警告信息。
三、安装keepalived
1、同安装Haproxy一样,先通过yum搜索keepalived。
yum search keepalived
2、安装keepalived
yum install -y keepalived.x86_64
3、修改配置文件
vim /etc/keepalived/keepalived.conf
先将global_defs下的vrrp_strict注释掉,vrrp_strict会影响虚拟IP的使用。
接下来修改vrrp_instance,这里配置的是虚拟IP。
state MASTER表示当前这台机器是keepalived主机。interface表示的是网卡,通过ip addr
可以查看当前机器的网卡名称。
所以interface需要修改成ens33。
virtual_ipaddress里面配置的是虚拟IP地址,虚拟IP地址需要跟真实的IP地址在同一网段内,这里我们配置成192.168.0.200。
最后配置virtual_server虚拟服务,virtual_server后面配置的是虚拟IP和端口,所以要将IP修改成前面配置好的192.168.0.200,端口可以自行设置,这里我们设置成6000。
任何配置real_server真实的服务器。
当前机器的IP地址为192.168.0.150,端口设置成Haproxy的端口5000。因为keepalived是通过tcp连接haproxy,所以不需要SSL_GET,从keepalived官方文档找到tcp的配置。
TCP_CHECK {
connect_port num
connect_timeout num
}
connect_port设置为haproxy的端口,connect_timeout设置为10秒。
然后将下面的配置都删掉。保存并退出。
4、在152服务器上安装好keepalived,然后将150机器上的配置文件复制到152机器上。
scp [email protected]:/etc/keepalived/keepalived.conf /etc/keepalived/
修改一下配置,MASTER改成SLAVE,real_server的IP改成192.168.0.152。保存并退出。
5、分别启动两台服务器上的keepalived。
keepalived -f /etc/keepalived/keepalived.conf
查看keepalived进程看是否启动成功。
ps -ef|grep keepalived
启动成功!此时通过ip addr查看150服务器的IP可以发现有两个IP地址,其中一个为keepalived的虚拟IP。
而152这台服务器仍然只有一个IP
6、通过Navicat连接keepalived,端口号为6000,账号密码为mycat的账号密码。连接成功。
四、测试
现在,HaProxy和keepalived全都成功安装并启动,我们模拟一下其中一台keepalived挂掉时,服务能否正常使用。
查看150服务器上的keepalived的进程id
ps -ef|grep keepalived
然后将keepalived的进程全部kill掉
通过Navicat访问keepalived,没有问题。
查看一下150服务器的IP,发现只存在一个IP
再看一下152服务器的IP,可以发现虚拟IP已经绑定到152服务器上。
再次启动150服务器上的keepalived,虚拟IP并不会重新绑定到150服务器上,而是继续绑定在152服务器上。
我们再模拟一下haproxy挂掉的情况,将152服务器上的haproxy的进程kill掉。
然后查看一下虚拟IP会不会绑定到150服务器上。
可以看到,haproxy挂掉时,虚拟IP并没有转移到150服务器上。此时Navicat也不能正常访问。
为了解决这个问题,需要重新修改一下keepalived的配置。
我们需要先安装killall
命令,先搜索该命令。
yum search killall
yum install -y psmisc.x86_64
查看一下killall
命令
我们要用到的是killall -0
这个命令,该命令不是用来kill某个进程,而是探查某个进程是否存在。存在返回0,不存在返回1。
修改keepalived.conf,新增检测haproxy进程的脚本,没2秒探测一次。然后在vrrp_instance里面配置该脚本。
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
}
real_server里面的TCP_CHECK就不再需要了,将其删除,保存并退出。
同样的操作在152服务器上再执行一遍。注意,152服务器上的vrrp_instance里面的state需要改成BACKUP
。
分别启动两台服务器上的keepalived,此时虚拟IP绑定在150的服务器上。
我们再次关闭150服务器上的haproxy。
然后再看一下虚拟IP地址,虚拟IP已经绑定到152服务器上。