Nacos 集群SLB模式搭建

一、集群规划

准备如下3台物理机器

主机名节点一节点二节点三
IP地址10.117.201.80<从>10.117.201.81<主>10.117.201.82<从>
nacosnacosnacos
nginx(转发)
mysql<从>mysql<主>
  • 集群三种方式介绍

    因此开源的时候推荐用户把所有服务列表放到一个vip下面,然后挂到一个域名下面

    http://ip1:port/openAPI 直连ip模式,机器挂则需要修改ip才可以使用。

    http://SLB:port/openAPI 挂载SLB模式(内网SLB,不可暴露到公网,以免带来安全风险),直连SLB即可,下面挂server真实ip,可读性不好。

    http://nacos.com:port/openAPI 域名 + SLB模式(内网SLB,不可暴露到公网,以免带来安全风险),可读性好,而且换ip方便,推荐模式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iAhZsaru-1620296894636)(https://i.loli.net/2021/04/14/HbKRNWDmOqvLGkh.jpg)]

    这里是采用第二种模式,因为没有域名给我,不过第三种只是把IP挂到域名上。配置一下就好了。

二、环境准备

Nacos依赖Java环境来运行,如果你是从代码开始构建并运行Nacos,还需要为此配置Maven环境,请确保是在以下版本环境中安装使用:

  1. 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  2. 64 bit JDK 1.8+;下载 & 配置
  3. Maven 3.2.x+;下载 & 配置

三、下载安装

  • 安装包下载

    我这里是在linux下安装,登陆nacos官方网站选择相应的 版本我这里选择的2.0.0,也是目前最新的发行版本。

    下载nacos-server-2.0.0.tar.gz包

    tar -zxvf nacos-server-2.0.0.tar.gz -c /usr/local/nacos
    #上传linux 并且解压到/usr/local/nacos目录
    #使用scp 命令分发这个解压的目录到其他两台机器相同目录下
    命令:scp -r ./nacos 10.117.201.81:/usr/local/ 10.117.201.82:/usr/local/
    记得输入密码
    

    查看

    [root@mon ~]# cd /usr/local/nacos/
    [root@mon nacos]# ls
    bin  conf  data  LICENSE  logs  NOTICE  status  target
    

四、集群文件配置

  • 修改application.properties

    #访问路径
    server.servlet.contextPath=/nacos
    ### Default web server port:
    #访问端口
    server.port=8848
    
    #*************** Network Related Configurations ***************#
    ### If prefer hostname over ip for Nacos server addresses in cluster.conf:
    # nacos.inetutils.prefer-hostname-over-ip=false
    
    ### Specify local server's IP:
    #当前这台机器的端口、80的机器配80、81的机器配81、82机器配82
    nacos.inetutils.ip-address=10.117.201.80
    
    
    #*************** Config Module Related Configurations ***************#
    ### If use MySQL as datasource:
    #连接数据库
    spring.datasource.platform=mysql
    
    ### Count of DB:
    #数据库实例个数
    db.num=1
    
    #数据库连接配置、这里做了主从,连主库即可
    ### Connect URL of DB:
    db.url.0=jdbc:mysql://10.117.201.81:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user=root
    db.password=root
    

    以上配置分发到81、82两台机器,改掉nacos.inetutils.ip-address=当前主机IP

    scp -r application.properties 10.117.201.81:/usr/local/nacos/conf/
    输入密码
    
  • 修改集群配置文件

    在nacos的解压目录nacos/的conf目录下,有配置文件cluster.conf,请每行配置成ip:port。(请配置3个或3个以上节点)

    [root@mon conf]# cat cluster.conf 
    10.117.201.80:8848
    10.117.201.81:8848
    10.117.201.82:8848
    

    同样分发给81、82两台机器,这里配置是一样的。

  • 初始化数据源、要么用数据库工具连接你的nacos_config数据库,运行如下sql语句、要么直接连上你的mysql主库、创建nacos_config数据库,用source 命令导入你的sql语句

    mysql -uroot -p
    输入密码进去
    mysql>create database nacos_config;
    mysql>use nacos_config;
    mysql> source /usr/local/nacos/conf/nacos-mysql.sql
    

    nacos-mysql.sql文件如下所示

    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = config_info   */
    /******************************************/
    CREATE TABLE `config_info` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `data_id` varchar(255) NOT NULL COMMENT 'data_id',
      `group_id` varchar(255) DEFAULT NULL,
      `content` longtext NOT NULL COMMENT 'content',
      `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
      `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
      `src_user` text COMMENT 'source user',
      `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
      `app_name` varchar(128) DEFAULT NULL,
      `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
      `c_desc` varchar(256) DEFAULT NULL,
      `c_use` varchar(64) DEFAULT NULL,
      `effect` varchar(64) DEFAULT NULL,
      `type` varchar(64) DEFAULT NULL,
      `c_schema` text,
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = config_info_aggr   */
    /******************************************/
    CREATE TABLE `config_info_aggr` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `data_id` varchar(255) NOT NULL COMMENT 'data_id',
      `group_id` varchar(255) NOT NULL COMMENT 'group_id',
      `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
      `content` longtext NOT NULL COMMENT '内容',
      `gmt_modified` datetime NOT NULL COMMENT '修改时间',
      `app_name` varchar(128) DEFAULT NULL,
      `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
    
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = config_info_beta   */
    /******************************************/
    CREATE TABLE `config_info_beta` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `data_id` varchar(255) NOT NULL COMMENT 'data_id',
      `group_id` varchar(128) NOT NULL COMMENT 'group_id',
      `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
      `content` longtext NOT NULL COMMENT 'content',
      `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
      `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
      `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
      `src_user` text COMMENT 'source user',
      `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
      `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = config_info_tag   */
    /******************************************/
    CREATE TABLE `config_info_tag` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `data_id` varchar(255) NOT NULL COMMENT 'data_id',
      `group_id` varchar(128) NOT NULL COMMENT 'group_id',
      `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
      `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
      `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
      `content` longtext NOT NULL COMMENT 'content',
      `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
      `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
      `src_user` text COMMENT 'source user',
      `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = config_tags_relation   */
    /******************************************/
    CREATE TABLE `config_tags_relation` (
      `id` bigint(20) NOT NULL COMMENT 'id',
      `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
      `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
      `data_id` varchar(255) NOT NULL COMMENT 'data_id',
      `group_id` varchar(128) NOT NULL COMMENT 'group_id',
      `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
      `nid` bigint(20) NOT NULL AUTO_INCREMENT,
      PRIMARY KEY (`nid`),
      UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
      KEY `idx_tenant_id` (`tenant_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = group_capacity   */
    /******************************************/
    CREATE TABLE `group_capacity` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
      `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
      `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
      `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
      `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
      `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
      `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
      `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
      `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_group_id` (`group_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = his_config_info   */
    /******************************************/
    CREATE TABLE `his_config_info` (
      `id` bigint(64) unsigned NOT NULL,
      `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `data_id` varchar(255) NOT NULL,
      `group_id` varchar(128) NOT NULL,
      `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
      `content` longtext NOT NULL,
      `md5` varchar(32) DEFAULT NULL,
      `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `src_user` text,
      `src_ip` varchar(50) DEFAULT NULL,
      `op_type` char(10) DEFAULT NULL,
      `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
      PRIMARY KEY (`nid`),
      KEY `idx_gmt_create` (`gmt_create`),
      KEY `idx_gmt_modified` (`gmt_modified`),
      KEY `idx_did` (`data_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
    
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = tenant_capacity   */
    /******************************************/
    CREATE TABLE `tenant_capacity` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
      `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
      `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
      `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
      `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
      `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
      `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
      `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
      `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_tenant_id` (`tenant_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
    
    
    CREATE TABLE `tenant_info` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `kp` varchar(128) NOT NULL COMMENT 'kp',
      `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
      `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
      `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
      `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
      `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
      `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
      KEY `idx_tenant_id` (`tenant_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
    
    CREATE TABLE `users` (
    	`username` varchar(50) NOT NULL PRIMARY KEY,
    	`password` varchar(500) NOT NULL,
    	`enabled` boolean NOT NULL
    );
    
    CREATE TABLE `roles` (
    	`username` varchar(50) NOT NULL,
    	`role` varchar(50) NOT NULL,
    	UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
    );
    
    CREATE TABLE `permissions` (
        `role` varchar(50) NOT NULL,
        `resource` varchar(255) NOT NULL,
        `action` varchar(8) NOT NULL,
        UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
    );
    
    INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
    
    INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
    
  • 启动nacos

    [root@mon bin]# pwd
    /usr/local/nacos/bin
    [root@mon bin]# ls
    logs  shutdown.cmd  shutdown.sh  startup.cmd  startup.sh  work
    

    在上述目录,运行 ./startup.sh,同时观察 启动日志。启动日志所在:

    [root@mon logs]# pwd
    /usr/local/nacos/logs
    $ tail -f start.out
    

    以上节点逐一启动:80、81、82

  • 查看界面

    登陆10.117.201.80/nacos、10.117.201.81/nacos、10.117.201.82/nacos;可以看到界面都是一样的,说明集群安装成功了。

    输入默认账号密码:nacos/nacos

五、nginx搭建

由于采用第二种SLB模式,需要用到nginx做负载均衡转发、nginx安装在82这台机

1.下载nginx包

我这里选择的是nginx-1.16.1

2.安装必须的包

yum install -y pcre pcre-devel openssl-devel
#pcre全称(Perl Compatible Regular Expressions),中文perl兼容正则表达式!(nginx的rewite模块需要它))

3.添加虚拟用户

useradd -s /sbin/nologin -M nginx
id nginx
uid=501(nginx) gid=501(nginx) groups=501(nginx)

4.新建一个目录、用于安装nginx

mkdir /application

5.解压下载的nginx包

tar -zxf nginx-1.16.1.tar.gz

6.检查安装

root@mon1 nginx]# ./configure
checking for OS
 + Linux 3.10.0-1062.12.1.el7.x86_64 x86_64
checking for C compiler ... not found

./configure: error: C compiler cc is not found

执行以下命令:
yum -y install gcc gcc-c++ autoconf automake make
./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.

手动下载openssl包安装

上传到/usr/local/openssl目录下面,解压、进入openssl-1.1.0目录,运行 ./config 然后回到

然后再回到nginx-1.16.1目录make & make install

[root@mon1 nginx-1.6.1]# ./configure --prefix=/application/nginx-1.16.1 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-openssl=/usr/local/openssl/openssl-1.1.0
  
Configuration summary
  + using system PCRE library
  + using OpenSSL library: /usr/local/openssl/openssl-1.1.0a
  + md5: using OpenSSL library
  + sha1: using OpenSSL library
  + using system zlib library

make        #只要结尾没有报错就OK
make install

不报错、至此nginx安装成功。版本一定要对。

7.创建软链接、去到nginx安装目录,也就是上面的/application目录

[root@mon1 ~]# cd /application/

运行

[root@mon1 application]# ln -s nginx-1.6.1 nginx
[root@mon1 application]# ll
总用量 0
lrwxrwxrwx  1 root root  12 4月  14 10:51 nginx -> nginx-1.16.1
drwxr-xr-x 11 root root 170 4月  14 16:48 nginx-1.16.1

8.启动nginx

[root@mon1 application]# /application/nginx-1.16.1/sbin/nginx

补充:/application/nginx-1.16.1/sbin/nginx -s stop 停止 /application/nginx-1.16.1/sbin/nginx -s reload 重启

查看是否启动成功

[root@mon1 application]# ps -ef|grep nginx
root       72343   31383  0 16:50 pts/2    00:00:00 grep --color=auto nginx
root     3797071       1  0 11:45 ?        00:00:00 nginx: master process /application/nginx/sbin/nginx
nginx    3969000 3797071  0 14:49 ?        00:00:00 nginx: worker process

查看nginx端口号

[root@mon1 application]# ss -lnput|grep nginx
tcp    LISTEN     0      511       *:80                    *:*                   users:(("nginx",pid=3969000,fd=6),("nginx",pid=3797071,fd=6))

9.配置负载均衡转发,修改nginx.conf

[root@mon1 application]# ls
nginx  nginx-1.16.1
[root@mon1 application]# cd nginx
[root@mon1 nginx]# ls
client_body_temp  conf  fastcgi_temp  html  logs  nginx-1.6.3  proxy_temp  sbin  scgi_temp  uwsgi_temp
[root@mon1 nginx]# cd conf
[root@mon1 conf]# ls
fastcgi.conf          fastcgi_params          koi-utf  mime.types          nginx.conf      scgi_params          uwsgi_params          win-utf
fastcgi.conf.default  fastcgi_params.default  koi-win  mime.types.default  nginx.conf.bak  scgi_params.default  uwsgi_params.default
[root@mon1 conf]# vi nginx.conf

修改

http {
    upstream nacos {
        server 10.117.201.80:8848;
        server 10.117.201.81:8848;
        server 10.117.201.82:8848;
    }

    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://nacos;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

检查配置是否正确

[root@mon1 conf]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx-1.16.1/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.16.1/conf/nginx.conf test is successful

重新启动nginx

访问:http://10.117.201.82/nacos

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西门吹雪吹吹风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值