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

news2024/11/26 10:32:54

目录

一、理论

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯专题-真题版含答案-【加法变乘法】【三羊献瑞】【交换瓶子】【卡片换位】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

【专题速递】多模态数字人、多模态媒体大模型以及AI与AIGC对音视频的影响

// 随着AIGC内容的兴起&#xff0c;多模态媒体大模型逐渐进入大家的视野&#xff0c;而LLM的发展又让人们对未来音视频工具产生了新的思考。7月29日LiveVideoStackCon2023上海站AIGC与内容生产专场&#xff0c;集齐当下最热门的AIGC话题&#xff0c;与您共享。 AIGC与内容生产…

华为云使用 helm 模板

登录华为云上的 cce 进入对应的集群&#xff0c;选择模板管理 注意&#xff1a;华为云上不能配置 helm 仓库&#xff0c;只提供手动上传模板&#xff0c;模板的后缀为 tgz 下载模板的方式有很多种&#xff0c;这里用 xxl-job 举例 添加 helm 仓库更新仓库下载模板 helm rep…

基于linux下的高并发服务器开发(第二章)- 2.24 信号集及相关函数

1.用户通过键盘 Ctrl C, 产生2号信号SIGINT (信号被创建) 2.信号产生但是没有被处理 &#xff08;未决&#xff09; - 在内核中将所有的没有被处理的信号存储在一个集合中 &#xff08;未决信号集&#xff09; - SIGINT信号状态被存储在第二个标志位上 - 这个…

概率论和随机过程的学习和整理--番外15,如何计算N合1的合成数量问题?

目录 1 目标问题&#xff1a;多阶2合1的合成问题 1.1 原始问题 1.2 合成问题要注意&#xff0c;合成的数量 1.3 合成问题不能用马尔科夫链来解决 2 方案1&#xff1a;用合成公式合成多次能解决吗&#xff1f; --不能&#xff0c;解决不了递归的问题 3 方案2&#xff0c;…

微分流形2:流形上的矢量场和张量场

来了来了&#xff0c;切向量&#xff0c;切空间。流形上的所有的线性泛函的集合&#xff0c;注意是函数的集合。然后取流形上的某点p&#xff0c;它的切向量为&#xff0c;线性泛函到实数的映射。没错&#xff0c;是函数到实数的映射&#xff0c;是不是想到了求导。我们要逐渐熟…

uni-app 微信小程序:启用组件按需注入

uni-app 微信小程序&#xff1a;启用组件按需注入 文章目录 uni-app 微信小程序&#xff1a;启用组件按需注入一、官方文档按需注入注意事项 二、HBuilder X 设置三、效果 一、官方文档 https://developers.weixin.qq.com/miniprogram/dev/framework/ability/lazyload.html 按…

大数据面试题:HBase读写数据流程

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 参考答案&#xff1a; 1、写数据流程 1&#xff09;Client先访问zookeeper&#xff0c;获取hbase:meta表位于哪个Region Server。 2&#xff09;访…

MySQL的主从复制练习

基本原理图如下&#xff1a; 主从复制&#xff08;也称 AB 复制&#xff09;允许将来自一个MySQL数据库服务器&#xff08;主服务器&#xff09;的数据复制到一个或多个MySQL数据库服务器&#xff08;从服务器&#xff09;。当主库进行更新的时候&#xff0c;会自动将数据复制到…

【youcans动手学模型】目标检测之 RCNN 模型

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【youcans动手学模型】目标检测之 RCNN 模型 1. R-CNN 目标检测1.1 论文摘要1.2 技术背景1.3 基本方法1.4 算法实现1.5 总结 2. 使用 PyTorch 实现 RCNN 目标检测2.1 训练 AlexNet 模型2.2 微调 Alex…

《个人理财》——第六章 理财规划计算工具与方法

考点1&#xff1a; 货币时间价值概述 货币时间价值 也叫资金的时间价值 • 货币在无风险条件下&#xff0c; 经历一定时间投资和再投资发生的增值 • 同等数量货币或现金流的未来价值更低 • 不同时间单位的货币不具有可比性 产生的原因• 现有货币用于投资&#xff0c; 可获得…

IDEA+SpringBoot +ssm+ Mybatis+easyui+Mysql求职招聘管理系统网站

IDEASpringBoot ssm MybatiseasyuiMysql求职招聘管理系统网站 一、系统介绍1.环境配置 二、系统展示1. 登录2.注册3.首页4.公司5.关于我们6.我的简历7.我投递的简历8.修改密码9. 管理员登录10.我的信息11.用户信息12.职位类别13. 职位列表14. 公司列表15. 日志列表 三、部分代码…

听GPT 讲K8s源代码--pkg(八)

k8s项目中 pkg/kubelet/envvars&#xff0c;pkg/kubelet/events&#xff0c;pkg/kubelet/eviction&#xff0c;pkg/kubelet/images&#xff0c;pkg/kubelet/kubeletconfig这些目录都是 kubelet 组件的不同功能模块所在的代码目录。 pkg/kubelet/envvars 目录中包含了与容器运行…

深度学习入门教学——神经网络

深度学习就是训练神经网络。 1、什么是神经网络&#xff1f; 举个最简单的例子&#xff0c;以下是一个使用线性回归来预测房屋价格的函数。这样一个用于预测房屋价格的函数被称作是一单个神经元。大一点的神经网络&#xff0c;就是将这些单个神经元叠加起来。例如&#xff1a…

Java基础之stream流最新版,stream流的基本操作

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

java 应用 cpu 过高故障排查

文章目录 一、前言二、测试代码 Test.java三、Linux 编译运行 Test.java 程序四、top 命令查看 cpu 使用情况五、查看进程下的线程详情 top -H -p 11748六、将线程 12240 的 pid 转为 16 进制 printf "0x%x\n" 12240七、jstack 查看进程的快照遗留 一、前言 前两天…

二十六章:Pyramid Vision Transformer ——金字塔视觉Transformer:一种无卷积的用于密集预测的多功能主干网络

0.摘要 虽然卷积神经网络&#xff08;CNN&#xff09;在计算机视觉领域取得了巨大成功&#xff0c;但本研究探讨了一种更简单、无卷积的骨干网络&#xff0c;适用于许多密集预测任务。与最近提出的专门用于图像分类的Vision Transformer&#xff08;ViT&#xff09;不同&#x…

无人机自主探索FUEL:代码阅读1--边界簇检测更新与视点生成

~/src/catkin_fuel_refactored/fuel_refactored/fuel_planner/bagbag中包含三个.sh文件&#xff0c;为rosbag指令&#xff0c;给出了录包指令以及有用话题信息 FIS 1、增量边界检测与聚类 路径&#xff1a;~/fuel_planner/active_perception/src/frontier_finder.cpp 主要函…

五、模型训练

目录 1. 线性模型1.1 Lasso 回归1.2 Ridge 回归 2. 树模型2.1 随机森林&#xff08;Random Forest&#xff0c;RF&#xff09;2.2 梯度提升树&#xff08;GBDT&#xff09;2.3 XGBoost2.4 LightGBM2.5 CatBoost2.6 模型深入对比 3. 神经网络3.1 多层感知机3.2 卷积神经网络3.3 …