数据库应用:Mycat+HAProxy+Keepalived实现高可用

2023-10-26

目录

一、理论

1.高可用

2.部署高可用

二、实验

1.Mycat+HAProxy+Keepalived实现高可用

三、问题

1.开启HA-Proxy失败

2. VMware 克隆linux 网卡UUID重复问题

3.keepalived状态报错

 四、总结


一、理论

1.高可用

(1)概述

Mycat

在实际项目中,Mycat服务也需要考虑高可用性,如果Mycat所在服务器出现宕机,或Mycat服务故障,需要有备机提供服务,需要考虑Mycat集群。

HAProxy

HAProxv足一个使用C语言编写的自由及开放源代码软件,共提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。haproxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。

HAProxv运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

HAProxy实现了一种事件驱动,单一进程模型,此模型支持非常大的并发连按数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处埋数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就足为什么他们必须进行
优化以使每个CPU时间片(Cycle)做更多的工作。
 

③Keepalived

Keepalived是一款专为LVS和HA设计的一款健康检查工具;支持故障自动切换、支持节点健康状态检查。

Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群中各个服务节点的状态,后来又加入了可实现高可用VRRP功能。因此,Keepalived除了能够管理LVS集群外,还可以为其他服务(例如:Nginx、Haproxy、MySQL等)实现高可用。
Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,VRP出现的目的就是为了解决静态路由单点故障的问题,它能够保证当个别节点宕机时,整个网络可以不间断的运行
Keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用。

 

(2)方案

使用HAProxy + Keepalived配合两台Mycat搭起Mycat集群,实现高可用性。HAProxy实现了Mycat多节点的集群高可用和负载均衡,而HAProxy自身的高可用则可以通过Keepalived 来实现。

2.部署高可用

(1)部署 HAProxy服务器

# this config needs haproxy-1.1.28 or haproxy-1.2.1

global
        log /dev/log   local0 info
        log /dev/log   local0 notice
        #log loghost    local0 info
        maxconn 4096
        #chroot /usr/share/haproxy
        uid 99
        gid 99
        daemon
        #debug
        #quiet

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        redispatch
        option http-server-close
        #option forwardfor       except 127.0.0.0/8
        option                  redispatch
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          60s
        timeout server          60s
        timeout http-keep-alive 10s
        timeout check           10s
        timeout tunnel          1h
        timeout client-fin      30s
        maxconn                 3000
#       contimeout      5000
#       clitimeout      50000
#       srvtimeout      50000

# 绑定到keep1主机的本地网卡上,该页面为haproxy的统计页面,用于查看请求转发等状态
    listen admin_status 0.0.0.0:48800 ##VIP
    stats uri /admin-status ##统计页面
    stats auth admin:123456
    mode http
    option httplog
# 转发到mycat 8066业务端口,服务绑定在VIP上
    listen allmycat_service 192.168.204.23:8066 ##转发到 mycat 的 8066 端口,即 mycat 的服务端口
    mode tcp
    option tcplog
    option tcpka
    option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
    balance roundrobin
    server mycat_1 192.168.204.250:8066 check inter 5s rise 2 fall 3
    server mycat_2 192.168.204.251:8066 check inter 5s rise 2 fall 3

# 转发到mycat 9066管理端口,服务绑定在VIP上
    listen allmycat_admin 192.168.204.23:9066 ##转发到 mycat 的 9066 端口,及 mycat 的管理控制台端口
    mode tcp
    option tcplog
    option tcpka
    option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
    balance roundrobin
    # 为mycat主机提供状态check服务,5s检查一次
    server mycat_1 192.168.204.250:9066 check inter 5s rise 2 fall 3
    server mycat_2 192.168.204.251:9066 check inter 5s rise 2 fall 3
    #timeout server 20000isten  appli1-rewrite 0.0.0.0:10001

(2)重新定义Haproxy集群的日志

默认haproxy的日志是输出到系统的syslog中,查看起来不是非常方便,为了更好的管理haproxy的日志,我们在生产环境中一般单独定义出来。需要将haproxy的info及notice日志分别记录到不同的日志文件中。

① #修改haproxy主配置文件
vim /etc/haproxy/haproxy.cfg
-----------------------------------修改以下内容
global
	log /dev/log local0 info
	log /dev/log local0 notice
------------------------------------
 
② #重启服务
service haproxy restart
 
需要修改rsyslog配置,为了便于管理。将haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件。
③ #修改rsyslog配置文件
vim /etc/rsyslog.d/haproxy.conf
---------------------------------------------------------------------添加如下内容
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~
--------------------------------------------------------------------------
 

这部分配置是将haproxy的info日志记录到/var/log/haproxy/haproxy-info.log下,将notice日志记录到/var/log/haproxy/haproxy-notice.log下。“&~”表示当日志写入到日志文件后,rsyslog停止处理这个信息。

 
④ #创建目录、重启服务、查看验证
mkdir /var/log/haproxy/
systemctl restart rsyslog.service
 
tail -f /var/log/haproxy/haproxy-info.log			#查看haproxy的访问请求日志信息

(3)配置负载调度器(主keepalived服务器:192.168.204.70)

① #关闭防火墙
systemctl stop firewalld.service
setenforce 0
 
② #安装服务
yum install ipvsadm keepalived -y 
 
③ #修改配置文件keeplived.conf
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
 
......
global_defs {						#定义全局参数
--10行--修改,邮件服务指向本地
	smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
	router_id LVS_01
}
 
vrrp_instance VI_1 {				#定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
    state MASTER
--21行--修改,指定承载vip地址的物理接口
    interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	
    virtual_router_id 10
--23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
    priority 100
    advert_int 1					#通告间隔秒数(心跳频率)
    authentication {				#定义认证信息,每个热备组保持一致
		auth_type PASS				#认证类型
--27行--修改,指定验证密码,主备服务器保持一致
        auth_pass 123123
    }
    virtual_ipaddress {				#指定群集vip地址
        192.168.204.23
    }
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.204.23 8066 {
    delay_loop 6					#健康检查的间隔时间(秒)
    lb_algo rr						#指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式(NAT)
    lb_kind NAT
    persistence_timeout 50			#连接保持时间(秒)
    protocol TCP					#应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
    real_server 192.168.204.70 8066 {
        weight 1					#节点的权重
--45行--删除,添加以下健康检查方式		
        TCP_CHECK {
			#connect_port 8066			#添加检查的目标端口
			connect_timeout 3		#添加连接超时(秒)
			nb_get_retry 3			#添加重试次数
			delay_before_retry 3	#添加重试间隔
		}
	}
 
	real_server 192.168.204.100 8066 {		#添加第二个 Web节点的地址、端口
        weight 1
        TCP_CHECK {
			#connect_port 8066
			connect_timeout 3
			nb_get_retry 3
			delay_before_retry 3
		}
	}
}
##删除后面多余的配置##
 
④ #启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33	
 

(4)配置负载调度器(备keepalived服务器:192.168.204.100)

配置与主服务器相似

① #关闭防火墙
systemctl stop firewalld.service
setenforce 0
 
② #安装服务
yum install ipvsadm keepalived -y 
 
③ #修改配置文件keeplived.conf
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
 
......
global_defs {						#定义全局参数
--10行--修改,邮件服务指向本地
	smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
	router_id LVS_02
}
 
vrrp_instance VI_1 {				#定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
    state BACKUP
--21行--修改,指定承载vip地址的物理接口
    interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	
    virtual_router_id 10
--23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
    priority 99
    advert_int 1					#通告间隔秒数(心跳频率)
    authentication {				#定义认证信息,每个热备组保持一致
		auth_type PASS				#认证类型
--27行--修改,指定验证密码,主备服务器保持一致
        auth_pass 123123
    }
    virtual_ipaddress {				#指定群集vip地址
        192.168.204.23
    }
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.204.23 8066 {
    delay_loop 6					#健康检查的间隔时间(秒)
    lb_algo rr						#指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,NAT
    lb_kind NAT
    persistence_timeout 50			#连接保持时间(秒)
    protocol TCP					#应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
    real_server 192.168.204.70 8066 {
        weight 1					#节点的权重
--45行--删除,添加以下健康检查方式		
        TCP_CHECK {
			#connect_port 8066			#添加检查的目标端口
			connect_timeout 3		#添加连接超时(秒)
			nb_get_retry 3			#添加重试次数
			delay_before_retry 3	#添加重试间隔
		}
	}
 
	real_server 192.168.204.100 8066 {		#添加第二个 Web节点的地址、端口
        weight 1
        TCP_CHECK {
			#connect_port 8066
			connect_timeout 3
			nb_get_retry 3
			delay_before_retry 3
		}
	}
}
##删除后面多余的配置##
 
④ #启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33	
 

(5)配置节点服务器(maycat1服务器:192.168.204.250)

① 解压
cd /opt
tar zxvf Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz
cp -r mycat /usr/local/

②配置环境变量
vim ~/.bash_profile
export MYCAT_HOME=/usr/local/mycat

置并刷新环境变量使得mycat可以补全

echo 'PATH=/usr/local/mycat/bin:$PATH' > /etc/profile.d/mycat.sh
source /etc/profile.d/mycat.sh
mycat start

③启动mycat
mycat start


④ 启动成功日志末尾会出现successfully,mycat只能通过查看日志的方式判断是否启动成功
tail -f /usr/local/mycat/logs/wrapper.log

⑤ 配置schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
 
        <schema name="mycatdb1" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
        </schema>
        <schema name="mycatdb2" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn2">
        </schema>
        <schema name="mycatdb3" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn3">
        </schema>
 
                <!-- auto sharding by id (long) -->
                <!--splitTableNames 启用<table name 属性使用逗号分割配置多个表,即多个表使用这个配置-->
<!--fetchStoreNodeByJdbc 启用ER表使用JDBC方式获取DataNode-->
                <!--table name="customer" primaryKey="id" dataNode="dn1,dn2" rule="sharding-by-intfile" autoIncrement="true" fetchStoreNodeByJdbc="true">
                        <childTable name="customer_addr" primaryKey="id" joinKey="customer_id" parentKey="id"> </childTable>
                </table-->
                <!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="latest-month-calldate"
                        /> -->
 
        <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
                /> -->
        <dataNode name="dn1" dataHost="localhost1" database="testdb1" />
        <dataNode name="dn2" dataHost="localhost1" database="testdb2" />
        <dataNode name="dn3" dataHost="localhost1" database="testdb3" />
        <!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
         <dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
        <dataNode       name="jdbc_dn2" dataHost="jdbchost" database="db2" />
        <dataNode name="jdbc_dn3"       dataHost="jdbchost" database="db3" /> -->
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="192.168.204.10" url="192.168.204.10:3306" user="root"  password="123456">
                    <readHost host="192.168.204.11" url="192.168.204.11:3306" user="root" password="123456" />
                    <readHost host="192.168.204.12" url="192.168.204.12:3306" user="root" password="123456" />
                </writeHost>
 
                <writeHost host="192.168.204.11" url="192.168.204.11:3306" user="root"  password="123456" />
 
                <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
        </dataHost>


⑥ 配置server.xml
<user name="root" defaultAccount="true">
		<property name="password">123456</property>
		<property name="schemas">mycatdb1,mycatdb2,mycatdb3</property>
		
		<!-- 表级 DML 权限设置 -->
		<!-- 		
		<privileges check="false">
			<schema name="TESTDB" dml="0110" >
				<table name="tb01" dml="0000"></table>
				<table name="tb02" dml="1111"></table>
			</schema>
		</privileges>		
		 -->
	</user>
	<user name="user">
		<property name="password">user</property>
		<property name="schemas">mycatdb1,mycatdb2,mycatdb3</property>
		<property name="readOnly">true</property>
	</user>

⑦修改MyCat日志级别
vim log4j2.xml
第25行 level="debug"

⑧ 启动成功
tail -f /usr/local/mycat/logs/wrapper.log

⑨ 查看端口
netstat -an|grep 8066


⑩查看mycat进程
ps -ef|grep mycat

⑪登录mysql,查看逻辑库

[root@localhost ~]# mysql -uroot -p123456 -P8066 -h 192.168.204.250
mysql> show databases;
mysql> use mycatdb1;
mysql> show tables;
mysql> select * from t11;


(6)配置节点服务器(maycat2服务器:192.168.204.251)
maycat2服务器与mycat服务器基本一致
如需监控,以下配置文件需要修改:
vim /usr/local/mycat-web/mycat-web/WEB-INF/classes/mycat.properties

show.period=3000000
sqlonline.passwd=123456
zookeeper=192.168.204.251\:2181
sqlonline.user=root
sqlonline.server=192.168.204.251
mycat_warn_mail=[{"cc"\:"sohudo@mycat.io","index"\:1,"mangerPort"\:"465","smtpHost"\:"smtp.139.com","smtpPassword"\:"123456","smtpProtocol"\:"smtp","smtpUser"\:"agile_louie@139.com","to"\:"9183838@qq.com"}]

(7)安装并配置xinetd服务

需要在安装HAProxy的服务器上,安装xinetd服务来开启48700端口。

(1)在服务器命令行执行如下命令安装xinetd服务,如下所示。

yum install xinetd -y

(2)编辑/etc/xinetd.conf文件,如下所示。

vim /etc/xinetd.conf

检查文件中是否存在如下配置。

includedir /etc/xinetd.d

如果/etc/xinetd.conf文件中没有以上配置,则在/etc/xinetd.conf文件中添加以上配置;如果存在以上配置,则不用修改。

(3)创建/etc/xinetd.d目录,如下所示。

mkdir /etc/xinetd.d

注意:如果/etc/xinetd.d目录已经存在,创建目录时会报如下错误。

mkdir: cannot create directory `/etc/xinetd.d': File exists

可不必理会此错误信息。

(4)在/etc/xinetd.d目录下添加Mycat状态检测服务器的配置文件mycat_status,如下所示。

touch /etc/xinetd.d/mycat_status

(5)编辑mycat_status文件,如下所示。

vim /etc/xinetd.d/mycat_status

编辑后的mycat_status文件中的内容如下所示。

service mycat_status
{
flags = REUSE
socket_type = stream
port = 48700
wait = no
user = root
server =/usr/local/bin/mycat_check.sh
log_on_failure += USERID
disable = no
}


部分xinetd配置参数说明如下所示。

socket_type:表示封包处理方式,Stream为TCP数据包。

port:表示xinetd服务监听的端口号。

wait:表示不需等待,即服务将以多线程的方式运行。

user:运行xinted服务的用户。

server:需要启动的服务脚本。

log_on_failure:记录失败的日志内容。

disable:需要启动xinted服务时,需要将此配置项设置为no。

(6)在/usr/local/bin目录下添加mycat_check.sh服务脚本,如下所示。

touch /usr/local/bin/mycat_check.sh

(7)编辑/usr/local/bin/mycat_check.sh文件,如下所示。

vim /usr/local/bin/mycat_check.sh

编辑后的文件内容如下所示。

#!/bin/bash
mycat=`/usr/local/mycat/bin/mycat status | grep 'not running' | wc -l`
if [ "$mycat" = "0" ]; then
/bin/echo -e "HTTP/1.1 200 OK\r\n"
else
/bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"
/usr/local/mycat/bin/mycat start
fi

为mycat_check.sh文件赋予可执行权限,如下所示。

chmod a+x /usr/local/bin/mycat_check.sh

(8)编辑/etc/services文件,如下所示。

vim /etc/services

在文件末尾添加如下所示的内容。

mycat_status  48700/tcp        # mycat_status

其中,端口号需要与在/etc/xinetd.d/mycat_status文件中配置的端口号相同。

(9)重启xinetd服务,如下所示。

service xinetd restart

(10)查看mycat_status服务是否成功启动,如下所示。
 netstat -antup|grep 48700

结果显示,两台服务器上的mycat_status服务器启动成功。

至此,xinetd服务安装并配置成功,即Mycat状态检查服务安装成功。

二、实验

1.Mycat+HAProxy+Keepalived实现高可用

(1)实验环境

HAProxy(master)、Keepalived(master):192.168.204.70

HAProxy(backup)、Keepalived(backup):192.168.204.100

Mycat1服务器:192.168.204.250,jdk1.6、Mycat-server-1.6.7.6  ,centos7
Mycat2服务器:192.168.204.251,jdk1.6、Mycat-server-1.6.7.6  ,centos7

Master 服务器:192.168.204.10,mysql5.7

Slave1 服务器:192.168.204.11,mysql5.7

Slave2 服务器:192.168.204.12,mysql5.7

(2)安装并配置xinetd服务

在服务器命令行执行如下命令安装xinetd服务,如下所示。

 编辑/etc/xinetd.conf文件,如下所示。

检查文件中是否存在如下配置

 创建/etc/xinetd.d目录,如下所示。

注意:如果/etc/xinetd.d目录已经存在,创建目录时会报如下错误。

在/etc/xinetd.d目录下添加Mycat状态检测服务器的配置文件mycat_status,如下所示。

 编辑mycat_status文件,如下所示。

编辑后的mycat_status文件中的内容如下所示。

 

 在/usr/local/bin目录下添加mycat_check.sh服务脚本,如下所示。

编辑后的文件内容如下所示。

 为mycat_check.sh文件赋予可执行权限,如下所示。

 编辑/etc/services文件,如下所示。

 

  重启xinetd服务,如下所示。

 查看mycat_status服务是否成功启动,如下所示。

(3)启动HAProxy

HAProxy(master)192.168.204.70

HAProxy(backup)192.168.204.100

 (4)启动Keepalived

Keepalived(master)192.168.204.70

Keepalived(backup)192.168.204.100

(5)启动Mycat

Mycat1服务器:192.168.204.250

Mycat2服务器:192.168.204.251

(6)远程登录验证

HAProxy(master)、Keepalived(master):192.168.204.70

 HAProxy(backup)、Keepalived(backup):192.168.204.100

 (7)查看高可用

http://192.168.204.70:48800/admin-status

 写入数据观察变化

 关闭mycat1,观察变化

三、问题

1.开启HA-Proxy失败

 (1)报错

开启 失败,错误描述:Failed to start SYSV: HA-Proxy is a TCP/HTTP reverse proxy which is particularl

 (2)原因分析

忘记注释该服务自设置的根目录

 (3)解决方法

为了确定是否文件格式还存在问题,输入下面的命令:

[root@localhost run]# haproxy -f /etc/haproxy/haproxy.cfg -c
Configuration file is valid

注释该服务自设置的根目录

 

依然报错,检查网卡配置是否添加虚拟地址

 #配置虚拟IP地址(VIP:192.168.204.23)
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
#删除UUID,dns与网关,注意子网
NAME=ens33:0
DEVICE=ens33:0
IPADDR=192.168.204.23
NETMASK=255.255.255.255
 
#重启网络服务、启动网卡
systemctl restart network
ifup ifcfg-ens33:0

 ③  Haproxy误报"xxx has no server available!"的消息

网络参数方面主要就是生产环境的内核TCP参数做过优化,生产环境之前在/etc/sysctl.conf 文件中做了如下优化:

[root@localhost haproxy]# vim /etc/sysctl.conf 

 看来这个是导致Haproxy在做健康检查时误报的原因,于是去掉上面的配置,重启生产环境的服务器,一切正常了。

 检查配置文件,注释

 

创建/var/lib/haproxy/stats文件

[root@localhost run]# mkdir -p /var/lib/haproxy
[root@localhost run]# touch /var/lib/haproxy/stats

再次启动,成功

[root@localhost run]# systemctl start haproxy
[root@localhost run]#  ps -ef | grep -i haproxy
nobody     3762      1  0 11:25 ?        00:00:00 /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid
root       3852   1988  0 11:32 pts/0    00:00:00 grep --color=auto -i haproxy

添加开机自启

2. VMware 克隆linux 网卡UUID重复问题

(1)问题

当使用 VMware 克隆 linux 主机时会发生克隆主机和原主机网卡 UUID 重复的问题,这样会对网络通信产生影响。

(2)原因分析

 UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。其目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。

只要保证每台主机的UUID独一无二即可,即为新的主机绑定新的 UUID。

(3)解决方法

生成新的uuid替换掉文件里的uuid号。

 第一步:生成新的uuid

[root@localhost /]# uuidgen

  第二步:替换网卡信息里的uuid号

[root@localhost /]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

第三步:重启服务

[root@localhost /]# systemctl restart network

第四步:使用nmcli工具验证

[root@localhost /]# nmcli connection show

新UUID生效

3.keepalived状态报错

(1)报错

status keepalived.service

 (2)原因分析

If you want to allow /usr/sbin/haproxy to bind to network port 8066
                                              Then you need to modify the port type.
                                              Do
                                              # semanage port -a -t PORT_TYPE -p tcp 1080如果你先允许绑定到网络端口8066, 需要修改端口类型, 如下
semanage port -a -t PORT_TYPE -p tcp 8066 # 其中 PORT_TYPE 可选值为:commplex_main_port_t, http_cache_port_t, http_port_t.

(3)解决方法

# 在这里, 我们使用 http_port_t 类型, 即执行下面命令即可semanage port -a -t http_port_t -p tcp 8066

然后重启haproxy 即可

[root@localhost keepalived]# semanage port -a -t http_port_t -p tcp 8066
[root@localhost keepalived]# service keepalived status
[root@localhost keepalived]# service haproxy restart

 四、总结

HA-Proxy配置文件及启动:     

#配置文件
vim /etc/haproxy/haproxy.cfg

#重启服务
service haproxy restart

#查看状态
systemctl status haproxy.service
#添加开机自启
chkconfig --add haproxy

chkconfig --list haproxy

keepalived配置文件及启动:   

#配置文件
vim /etc/keepalived/keepalived.conf

#启动服务
systemctl start keepalived

#查看状态
service keepalived status

mycat补全命令及查看日志:

echo 'PATH=/usr/local/mycat/bin:$PATH' > /etc/profile.d/mycat.sh
source /etc/profile.d/mycat.sh
mycat start


tail -f /usr/local/mycat/logs/wrapper.log

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库应用:Mycat+HAProxy+Keepalived实现高可用 的相关文章

  • Jenkins流水线怎么做?

    问CHAT Jenkins流水线怎么做 CHAT回复 Jenkins流水线是一种创建 测试和部署应用程序的方法 以下是为Jenkins创建流水线的步骤 1 安装Jenkins 首先你需要在你的服务器上安装Jenkins 这个过程可能会根据你
  • Navicat 16 for MySQL:打造高效数据库开发管理工具

    随着数据的快速增长和复杂性的提升 数据库成为了现代应用开发中不可或缺的一部分 而在MySQL数据库领域 Navicat 16 for MySQL作为一款强大的数据库开发管理工具 正受到越来越多开发者的青睐 Navicat 16 for My
  • 【计算机毕业设计】基于web的山东红色旅游信息管理系统

    有效的处理想要的相关信息和如何传播有效的信息 一直是人类不断探索的动力 人类文明火种的传承都是通过了多种媒介作为载体 也是随着社会生产力的发展不断的更新 随着互联网的到来 信息传播与管理都上升了一个新的台阶 并且方便应用的同时也要考虑信息传
  • 【计算机毕业设计】Java图书馆智能选座系统

    现代经济快节奏发展以及不断完善升级的信息化技术 让传统数据信息的管理升级为软件存储 归纳 集中处理数据信息的管理方式 本图书馆智能选座系统就是在这样的大环境下诞生 其可以帮助使用者在短时间内处理完毕庞大的数据信息 使用这种软件工具可以帮助管
  • 【计算机毕业设计】北关村基本办公管理系统

    在如今社会上 关于信息上面的处理 没有任何一个企业或者个人会忽视 如何让信息急速传递 并且归档储存查询 采用之前的纸张记录模式已经不符合当前使用要求了 所以 对北关村基本办公信息管理的提升 也为了对北关村基本办公信息进行更好的维护 北关村基
  • RF自动化环境安装+自动化实例解析

    RF定义 通用型的 自动测试框架 绝大部分的软件的的自动化系统都可以采用它 特点 测试数据文件 Test Data 对应一个个的测试用例 测试数据文件里面使用的功能小模块叫关键字 由测试库 Test Library Robot Framew
  • Jmeter 性能-并发量计算

    并发概念 指网站在同一时间访问的人数 人数越大瞬间带宽要求更高 服务器并发量分为 业务并发用户数 最大并发访问数 系统用户数 同时在线用户数 估算业务并发量的公式 C nL T C C 3 C的平方根 说明 C是平均的业务并发用户数 n是l
  • 基于java的学生宿舍管理系统设计与实现

    基于java的学生宿舍管理系统设计与实现 I 引言 A 研究背景和动机 基于Java的学生宿舍管理系统设计与实现的研究背景和动机 在数字化时代的推动下 学生宿舍管理系统已经成为了管理学生宿舍的重要工具 学生宿舍管理系统能够帮助管理者更好地管
  • 基于java的饮食分享平台系统设计与实现

    基于java的饮食分享平台系统设计与实现 I 引言 A 研究背景和动机 近年来 随着人们生活水平的提高和健康意识的增强 饮食健康已经成为越来越多人的关注焦点 因此 一个方便快捷的饮食分享平台就显得尤为重要 基于Java的饮食分享平台系统设计
  • 软件测试|SQLAlchemy环境安装与基础使用

    简介 SQLAlchemy 是一个强大的 Python 库 用于与关系型数据库进行交互 它提供了高度抽象的对象关系映射 ORM 工具 允许使用 Python 对象来操作数据库 而不必编写原生SQL查询 本文将介绍如何安装 SQLAlchem
  • 基于java的物业管理系统设计与实现

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • 基于java的物业管理系统设计与实现

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • 深入了解 Python MongoDB 查询:find 和 find_one 方法完全解析

    在 MongoDB 中 我们使用 find 和 find one 方法来在集合中查找数据 就像在MySQL数据库中使用 SELECT 语句来在表中查找数据一样 查找单个文档 要从MongoDB的集合中选择数据 我们可以使用 find one
  • 【计算机毕业设计】OA公文发文管理系统_xtv98

    近年来 人们的生活方式以网络为主题不断进化 OA公文发文管理就是其中的一部分 现在 无论是大型的还是小型的网站 都随处可见 不知不觉中已经成为我们生活中不可或缺的存在 随着社会的发展 除了对系统的需求外 我们还要促进经济发展 提高工作效率
  • 做测试不会 SQL?超详细的 SQL 查询语法教程来啦!

    前言 作为一名测试工程师 工作中在对测试结果进行数据比对的时候 或多或少要和数据库打交道的 要和数据库打交道 那么一些常用的sql查询语法必须要掌握 最近有部分做测试小伙伴表示sql查询不太会 问我有没有sql查询语法这一块的文档可以学习
  • Kubernetes (十二) 存储——Volumes配置管理

    一 卷的概念 官方地址 卷 Kubernetes https v1 24 docs kubernetes io zh cn docs concepts storage volumes 二 卷的类型及使用 emptyDir卷 1 创建编辑文件
  • 毕业设计:基于python人脸识别系统 LBPH算法 sqlite数据库 (源码)✅

    博主介绍 全网粉丝10W 前互联网大厂软件研发 集结硕博英豪成立工作室 专注于计算机相关专业 毕业设计 项目实战6年之久 选择我们就是选择放心 选择安心毕业 感兴趣的可以先收藏起来 点赞 关注不迷路 毕业设计 2023 2024年计算机毕业
  • SAP ERP系统是什么?SAP好用吗?

    A公司是一家传统制造企业 公司曾先后使用过数个管理软件系统 但各部门使用的软件都是单独功能 导致企业日常管理中数据流与信息流相对独立 形成了 信息孤岛 随着公司近年业务规模的快速发展以及客户数量的迅速增加 企业原有的信息系统在销售预测及生产
  • 2023下半年软考「单独划线」合格标准公布

    中国计算机技术职业资格网发布了 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告 2023下半年软考单独划线地区合格标准各科目均为42分 01 官方通告 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告
  • Python 使用 NoSQL 数据库的优选方案

    NoSQL 数据库因其高性能 可扩展性和灵活性而风靡一时 然而 对于 Python 程序员而言 选择合适的 NoSQL 数据库可能会令人困惑 因为有多种选择可供选择 那么 哪种 NoSQL 数据库最适合 Python 呢 2 解决方案 根据

随机推荐

  • -bash: /big_date/jdk1.8.0_333/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: 没有那个文件或目录

    自说 在CentOS7中搭建环境中 解压过java1 8版本时 配置好环境变量进行测试java版本时出现以下错误 出现这种情况的原因是因为当前环境缺少相关依赖包 glibc glibc 简单来说 glibc是gnu发布的libc库 即c运行
  • 毕业设计-基于SSM的网上商城系统

    项目编号 D09 项目名称 基于SSM的网上商城系统 项目类型 Java web项目 JavaEE 当前版本 V1 0 0版本 用户类型 有用户和管理员 双角色 项目架构 B S架构 设计思想 MVC 开发语言 Java语言 前端技术 La
  • js——网址动态拼接参数

    案例 你可以使用字符串拼接的方式来动态拼接参数到网址上 在这种情况下 你可以使用加号运算符来连接字符串 并使用变量来表示参数的值 下面是一个示例代码 let aaa http www baidu com let xxx 1 let yyy
  • 对于一个采用字符数组存放的字符串str,设计一个递归算法StrLength(char *str)求其字符个数(长度)。递归求字符串长度

    递归求字符串长度 需要的就是将数组看成指针 一步一步走下去 int StrLength char str char p str if p 0 return 0 else return StrLength p 1 努力加油a啊 o
  • 走出软件作坊

    这本书 对于小开发者真的是实用手册 关于如何与老板相处 如何做人 如何做技术 对于在小企业工作的人来说 真的不错 2014 7 11
  • c#自定义消息事件

    自定义消息 public class CustomEventArgs EventArgs public readonly string msg public CustomEventArgs string msg this msg msg 自
  • 设计模式之桥接模式(Bridge模式)

    一 模式动机 设想如果要绘制矩形 圆形 椭圆 正方形 我们至少需要4个形状类 但是如果绘制的图形需要具有不同的颜色 如红色 绿色 蓝色等 此时至少有如下两种设计方案 第一种设计方案是为每一种形状都提供一套各种颜色的版本 第二种设计方案是根据
  • 云服务器搭建神器JupyterLab(多图)

    云服务器搭建神器JupyterLab 多图 JupyterLab是一个交互式的开发环境 其用于应对包含着notebook 代码以及数据的工作场景 1 前言 如果说vim是编辑器之神 那么JupyterLab就是笔记本之神 从2017年开始我
  • 极端天气下的目标检测与测距算法

    更多视觉额自动驾驶项目请见 小白学视觉 自动驾驶项目 本文主要工作 科技的发展与进步促使自动驾驶车辆逐渐成为全球汽车产业发展的重要战略 方向 但自动驾驶车辆面对如 大雨 大雾 大雪等极端环境时 智能汽车图像 采集与处理系统将面临巨大挑战 并
  • 基于Python的socket库实现通信功能

    目录 1 前言 2 技术介绍 1 socket 2 Python的socket库 3 系统实现 1 服务端 server py 2 客户端1 client1 py 3 客户端2 client2 py 4 系统功能演示 1 启动服务端和客户端
  • idea配置maven教程

    1 下载maven 下载地址 官网地址点击进入 2 配置环境变量 解压到自己想要放置的路径后 配置系统用户的环境变量 新增系统变量 MAVEN HOME C Program Files JetBrains apache maven 3 8
  • 二维码 ThoughtWorks.QRCode 之 index was outside bounds of the array

    最近在使用ThoughtWorks QRCode过程中 单独生成一个二维码没有出现过问题 在重复利用QRCodeEncoder生成二维码的过程中 会出现index was outside bounds of the array错误 经过调试
  • JS 作用域

    var和let的比较 var是老版JavaScript中定义变量的标识符 let是新版JavaScript中定义变量的标识符 let的出现是为了解决var定义变量的一些遗留问题而推出的 在同一个作用域下 var允许重复声明 let不允许重复
  • SpringBoot整合Minio

    1 引入依赖 POM文件如下
  • 【Linux虚拟机】VirtualBox搭建linux虚拟机

    Linux从虚拟机创建到程序运行 ubuntu版 实际工作中 总是需要开发环境 测试环境和生产环境 但是很多小伙伴是没有这么多可供使用的服务器的 尤其是学习使用阶段 可能因为不熟悉服务器的配置 重复的重启 安装 卸载等 我们需要有自己可以随
  • 聊天相关表结构及业务逻辑

    表结构 CREATE TABLE t chat record id bigint 20 NOT NULL send user id bigint 20 DEFAULT NULL COMMENT 发送人 receive user id big
  • mysql视图的应用场景_MySQL视图适用于哪些场景?

    MySQL视图适用于哪些场景 答 1 视图能简化用户操作 视图机制使用户可以将注意力集中在所关心的数据上 如果这些数据不是直接来自基本表 则可以通过定义视图 使数据库看起来结构简单 清晰 并且可以简化用户的数据查询操作 例如 那些定义了若干
  • 服务器virsh不显示虚机,KVM之virsh常用命令

    沙发 1121644742 Post 2016 04 19 下午5 40 help 打印帮助 attach device 从一个XML文件附加装置 attach disk 附加磁盘设备 attach interface 获得网络界面 aut
  • Java创建student类

    目录 创建包 包名可以自拟 在包中创建student类 创建Penpal类继承student类 在HelloWorld中实现测试 创建一个叫做Student的类 对象属性 姓名 年龄 性别 身高 对象方法 说话 计算加法 年龄长一岁 类属性
  • 数据库应用:Mycat+HAProxy+Keepalived实现高可用

    目录 一 理论 1 高可用 2 部署高可用 二 实验 1 Mycat HAProxy Keepalived实现高可用 三 问题 1 开启HA Proxy失败 2 VMware 克隆linux 网卡UUID重复问题 3 keepalived状