linux centos consul1.15.2一键安装部署

consul原理、作用、安装相关内容

一、理论部分

1、consul的原理

Consul的原理及作用可以归纳为以下几点:

①、基于Gossip协议的通信:Consul使用了基于Gossip协议的Serf实现来进行通信。

Gossip协议是一个基于流行病传播方式的节点或者进程之间信息交换的协议,它通过UDP实现任意node-to-node间的通信,确保网络中所有节点的数据一致。节点间的交互方式主要包括Push、Pull以及Push&Pull。

②、成员管理和消息广播:Consul利用Serf提供的Gossip协议来管理成员和广播消息到集群。这种去中心化的方式不同于集中式结构,它更加灵活和可扩展。

③、使用Raft算法保证一致性:Consul采用Raft算法来保证服务的高可用性和数据的一致性。这是一种相对简单且易于理解的一致性算法,相比Paxos算法更为直接。

2、Consul的作用

①、服务发现:Consul的客户端可以注册服务,其他客户端则可以使用Consul来发现这些服务的提供者。通过DNS或HTTP接口,应用程序可以轻松找到它们所依赖的服务。

②、健康检查:Consul提供健康检查功能,可以快速告警集群中的问题。与服务发现的集成可以防止将服务转发到故障的服务上。

③、键/值存储:Consul提供一个键/值存储系统,用于存储动态配置。通过简单的HTTP接口,可以在任何地方操作这些配置。

④、多数据中心支持:Consul支持多个数据中心,这意味着用户不必担心构建额外的抽象层以扩展到多个区域。内外网的服务可以采用不同的端口进行监听,从而提高了系统的可用性和可扩展性。

安全服务通信:Consul还可以为服务生成和分发TLS证书,以建立相互的TLS连接,确保通信的安全性。同时,通过Intentions(意图)定义允许哪些服务进行通信,轻松管理服务分段。

⑤、综上所述,Consul是一个功能强大的开源工具,它通过Gossip协议实现去中心化的通信和成员管理,采用Raft算法保证数据一致性,并提供服务发现、健康检查、键/值存储以及多数据中心支持等功能。这些特性使得Consul在分布式系统中具有广泛的应用前景。

3、consul与nacos和zookeeper区别

Consul、Nacos和ZooKeeper在分布式系统中各自扮演着重要的角色,但它们在服务发现、配置管理、健康检查等方面存在明显的区别。以下是它们之间的主要差异:

①、服务发现与注册:

Consul:通过DNS或HTTP接口使服务注册和服务发现变得容易。它支持外部服务如SaaS的注册。

Nacos:允许服务在注册中心中注册自己,并通过服务名来发现其他服务。这有助于实现微服务架构中的服务之间的通信。

ZooKeeper:主要作为分布式协调服务,提供了简单的分层命名空间,类似于文件系统,用于存储和管理分布式应用程序的配置、状态信息和元数据。但它本身并不直接提供服务发现与注册的功能。

4、配置管理:

Consul:提供键/值存储系统,用于存储动态配置。

Nacos:提供了统一的配置管理平台,可用于管理和动态更新分布式系统中的配置信息,如数据库连接、参数设置等。

ZooKeeper:虽然也用于存储和管理分布式应用程序的配置信息,但其主要目标是作为分布式协调服务,而不是专门的配置管理工具。

5、健康检查:

Consul:提供健康检查功能,通过check方法实现,包括Script + Interval、HTTP + Interval、TCP + Interval等多种方式。

Nacos:既支持客户端的健康检查(KeepAlive、Client Beet),也支持服务端的健康检查(如MYSQL命令等)。

ZooKeeper:虽然不直接提供健康检查功能,但可以通过其提供的Watch机制来监听数据节点的变化,从而间接实现健康检查的效果。

6、性能与容量:

Consul:由于其使用Raft算法来保证一致性,相比使用Paxos算法的ZooKeeper在写性能上可能稍逊一筹。但在多数据中心的支持上,Consul具有明显优势。

Nacos:在开源版本中,服务实例注册的支撑量约为100万,服务的数量可以达到10万以上,显示了其强大的性能和容量。

ZooKeeper:在写性能上可以达到上万的TPS,容量从存储节点数来说可以达到百万级别。但Paxos协议限制了ZooKeeper集群的规模(通常为3或5个节点)。

6、其他特性:

Consul:支持多数据中心,内外网的服务可以采用不同的端口进行监听。官方提供web管理界面。

Nacos:支持动态DNS服务、权重和流量管理等功能,可以实现不同版本的服务之间的流量切分和管理。

ZooKeeper:提供了分布式协调的原语,如锁、队列、通知机制等,常用于构建分布式锁、配置管理、分布式队列等关键组件。

⑥、综上所述,Consul、Nacos和ZooKeeper在服务发现、配置管理、健康检查等方面各有特点。

Consul适合需要多数据中心支持和高可用性的场景;

Nacos则提供了丰富的配置管理和服务治理功能;

而ZooKeeper则以其强大的分布式协调能力和简单的API赢得了广泛的应用。

在选择时,应根据具体的业务需求和场景来选择合适的工具。

二、安装下载版本地址

https://releases.hashicorp.com/consul/1.15.2/

三、安装consul服务

1、将安装包上传到目录

bash 复制代码
mkdir -p /opt/install/package/consul

2、编辑安装文件及启动文件

3、进入目录

bash 复制代码
cd /opt/install/consul

4、编辑启动文件

bash 复制代码
vim consul-node01
#!/bin/bash
# consul
# chkconfig: 2345 70 30
# description: consul node 01 server
#
### BEGIN INIT INFO
# Provides: consul
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# short-Description: Start up the Consul server node01 daemon
# Description:  Consul Server node01 daemon
### END INIT INFO

prog=consul-node01
PROG_OWNER=/opt
PROG_BASE=$PROG_OWNER/$prog

PID=

start() {
    getpid
    if [ "$PID" != "" ] && [ -d /proc/$PID ]; then
        echo "$prog (pid $PID) 已运行..."
    else
        #su - $PROG_OWNER -c "nohup $PROG_BASE/$prog.sh > $PROG_BASE/consul.log 2>&1 &"
        nohup $PROG_BASE/$prog.sh > $PROG_BASE/consul.log 2>&1 &
        echo "$prog started."
    fi
}

stop() {
    getpid
    if [ "$PID" != "" ] && [ -d /proc/$PID ]; then
        kill -KILL $PID >/dev/null 2>&1
        usleep 100000
        echo "$prog 已停止"
    else
        echo "$prog 未运行"
    fi
}

restart() {
    stop
    start
}

getpid() {
 PID=`ps -ef|grep "consul agent -config-file"|grep -v grep|awk '{print $2}'`
}


case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        getpid
        if [ "$PID" != "" ] && [ -d /proc/$PID ]; then
                    echo "$prog (pid $PID) 正在运行..."
                else
                    echo "$prog 已停止"
                fi
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart|status}"
esac

5、编辑安装文件

bash 复制代码
vim install-consul.sh
#!/bin/bash
#
#install consul
if [ -z $1 ];then
    echo "Usage: sh $(basename $0) IP" 
    echo "Ex: sh $(basename $0) 192.168.1.1"
    exit -1
fi 
script_dir=$(cd $(dirname $0);pwd)
install_dir=/opt

source $script_dir/../Loginfo.sh
if [ -d /opt/consul-node01/ ];then
    log_info "/opt/consul-node01 dir already exists!"
    exit 1
else

package_name="consul_1.15.2_linux_amd64.zip"
log_info "cp package,unzip package"
cp consul-node01 /etc/init.d/

#test -d consul-node01 || mkdir consul-node01
#rm -rf consul-node01
unzip ../package/consul/$package_name -d $install_dir/consul-node01
log_error "package unzip error." 

cd $install_dir
log_info "get service ip addr."
if [ ! -n $1 ];then
	ip_addr=$(ifconfig ens32 | grep 'inet' | awk '{print $2}' | head -1)
else
	ip_addr=$1
fi
cat > ./consul-node01/config.json << EOF
{
  "datacenter": "consul01",
  "data_dir": "consul01",
  "log_level": "INFO",
  "node_name": "consul-node01",
  "server": true,
  "bootstrap_expect": 1,
  "client_addr": "127.0.0.1 $ip_addr",
  "bind_addr": "$ip_addr",
  "ui": true
}
EOF

    log_info "add consul service scripts."
#启动脚本
cat >  ./consul-node01/consul-node01.sh << EOF
#!/bin/bash
cd /opt/consul-node01
./consul agent -config-file config.json
cd
EOF
    log_error "add consul service scripts error"

    #增加开机启动项
    chmod +x ./consul-node01/consul-node01.sh
    
    chmod +x /etc/init.d/consul-node01
    chkconfig --add consul-node01
    chkconfig consul-node01 on
    /etc/init.d/consul-node01 start
    log_info "install consul done."
fi

6、请确保服务器有unzip命令,不然就会报无解压命令

7、yum安装解压工具

bash 复制代码
yum install -y unzip

8、执行安装命令

bash 复制代码
sh install-consul.sh 192.168.1.133 ip替换为自己ip

服务已正常运行,默认端口8500

相关推荐
ccmedu几秒前
虚拟机启动卡死you might want to save “/run/initramfs/rdsosreport.txt
linux·运维·服务器
Savvy..2 分钟前
运维面试题
运维
林_学5 分钟前
Docker Desktop 全卸了,新项目上线从3天缩短到3分钟
运维·docker·容器
陈平安Java and C6 分钟前
Docker镜像原理
运维·docker·容器
爱吃山竹的大肚肚6 分钟前
Nginx 最核心和常用的命令
java·运维·服务器·前端·nginx
程序员在线炒粉8元1份顺丰包邮送可乐8 分钟前
Docker 部署PaddleOCR 实战教程(含离线模型、接口调用、排障)
运维·docker·ai·容器
天上飞的粉红小猪9 分钟前
Socket UDP编程
linux·网络协议·udp
aosky23 分钟前
Vercel Labs agent-browser 深度测评:AI时代的浏览器自动化利器
运维·人工智能·自动化·agent-browser
皓月盈江28 分钟前
Linux Debian13安装后更换为国内镜像源,解决执行sudo命令提示用户名不在sudoers文件中问题
linux·服务器·sudo·debian13·debian13更换国内镜像源·用户名不在sudoers文件中
wdfk_prog29 分钟前
[Linux]学习笔记系列 -- [driver][base]class
linux·笔记·学习