一、集群规划
准备如下3台物理机器
主机名 | 节点一 | 节点二 | 节点三 |
---|---|---|---|
IP地址 | 10.117.201.80<从> | 10.117.201.81<主> | 10.117.201.82<从> |
nacos | nacos | nacos | |
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环境,请确保是在以下版本环境中安装使用:
- 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
- 64 bit JDK 1.8+;下载 & 配置。
- 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.
上传到/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