生产环境下使用CentOS7+Nacos+Mysql搭建Nacos集群,并完成注册中心,配置中心及Sentinel及Seata的测试
③MySQL配置文件保存在/etc/路径下,可修改配置,重启MySQL服务后配置生效重启MySQL服务:systemctl restart mysqld。rpm -qa | grep mariadb #检查是否存在 mariadb 数据库(内置的MySQL数据库),有则强制删除。PS:MySQL默认的密码复杂度为 MEDIUM,所以新密码至少为8位,并且必须包含大、小写字母、数字和特殊字符。rpm
一、Linux版Nacos+MySQL生产环境配置
1.1 nacos集群环境准备
· 预计需要,1个Nginx+3个nacos注册中心+1个mysql

下载
Nacos下载Linux版
Release 1.1.4(Oct 24th, 2019) · alibaba/nacos · GitHub

· nacos-server-1.1.4.tar.gz
解压:
tar -zxvf /export/software/nacos-server-1.1.4.tar.gz -C /export/servers/
查看解压效果:

· Linux服务器上mysql数据库配置
· SQL脚本在哪里

· sql语句源文件
· nacos-mysql
1.2 centos7 下安装与卸载mysql
1.2.1 安装之前检测系统是否有自带的MySQL
rpm -qa | grep mysql #检查是否安装过MySQL
rpm -qa | grep mariadb #检查是否存在 mariadb 数据库(内置的MySQL数据库),有则强制删除
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64 #强制删除
rpm -e --nodeps mariadb-5.5.68-1.el7.x86_64 #强制删除
(查阅相关资料,mariadb数据库与mysql数据库冲突,所以需要卸载)
[root@hadoop01 ~]# rpm -qa | grep mysql
[root@hadoop01 ~]# rpm -qa | grep mariadb
mariadb-5.5.68-1.el7.x86_64
mariadb-libs-5.5.68-1.el7.x86_64
[root@hadoop01 ~]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
[root@hadoop01 ~]# rpm -e --nodeps mariadb-5.5.68-1.el7.x86_64
[root@hadoop01 ~]# rpm -qa | grep mariadb
[root@hadoop01 ~]#
1.2.2 安装步骤
①下载MySQL源
curl -O https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm

②安装MySQL源
yum localinstall mysql57-community-release-el7-11.noarch.rpm
③检查MySQL源是否安装成功
yum repolist enabled | grep "mysql.*-community.*"
出现以下信息表示安装成功了

④有了MySQL源后安装MySQL
yum install mysql-community-server
输入确认继续安装
安装报错,提示无公共秘钥
解决:
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
再次安装
⑤查看是否安装成功
yum list installed mysql-*

⑥启动MySQL并检查MySQL运行状态
systemctl start mysqld
systemctl status mysqld

⑦获取MySQL默认登录密码,登录MySQL,并修改默认密码
grep 'temporary password' /var/log/mysqld.log
输入以下命令后,再输入默认登录密码,就能以 root 帐号登录 mysql
mysql -uroot -p

在创建数据库或数据表之前,要先用一下命令修改 root 用户的密码,此处设置为Mysql@123
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Mysql@123';
PS:MySQL默认的密码复杂度为 MEDIUM,所以新密码至少为8位,并且必须包含大、小写字母、数字和特殊字符
报错:![]()
解决:
先刷新一下权限表
flush privileges;
把在所有数据库的所有表的所有权限赋值给位于所有IP地址的root用户
grant all on cactidb.* to dbuser@'localhost' identified by 'Mysql@123';
![]()
⑧授予root用户远程访问权限,并刷新权限使生效
grant all privileges on *.* to 'root' @'%' identified by 'Mysql@123';
第一个*是数据库,可以改成允许访问的数据库名称
第二个 是数据库的表名称,代表允许访问任意的表
root代表远程登录使用的用户名,可以自定义
%代表允许任意ip登录,如果你想指定特定的IP,可以把%替换掉就可以了
password代表远程登录时使用的密码,可以自定义
让权限立即生效:
1.2.3 卸载MySQL
①查看MySQL安装情况:
rpm -qa | grep mysql
强制删除已安装MySQL

②查找所有MySQL目录并删除:
find / -name mysql
③删除my.cnf:rm -f /etc/my.cnf
安装MySQL时遇到问题
①启动MySQL时,出现以下提示
卸载MySQL后再重装
②在启动MySQL时,也有出现以下提示:
卸载MySQL后再重装
常见问题
①服务器关机重启后,mysql 一般也需要重新启动。可以使用以下命令将 mysql 设置为开机自启动
systemctl enable mysqld
②Linux下退出MySQL命令:Ctrl+z
③MySQL配置文件保存在/etc/路径下,可修改配置,重启MySQL服务后配置生效重启MySQL服务:systemctl restart mysqld
1.3 linux下使用mysql
1.登录mysql
MySQL -uroot -pMysql@123 # -u后面跟的是用户名 -p后面跟的是密码
2.查看所有数据库
show databases;
3.新建数据库
nacos_configcreate database nacos_config;
4.选择要使用的数据库
use nacos_config; # 选择使用名为nacos_config的数据库
5.执行sql文件
source /root/nacos/conf/nacos-mysql.sql
6.查看执行结果
use nacos_config;
show tables;

报错:
解决:
编辑文件:
vim /etc/my.cnf
如图:

2.重启mysql服务
关闭mysql:service mysqld stop
启动mysql:service mysqld start
如果启动命令不行,用这个:systemctl start mysqld
3.无密码登录mysql
命令:mysql -u root
4.切换数据库
命令:use mysql;
5.更新权限
命令:update mysql.user set authentication_string=password('Mysql@123 ') where user='root' and host='localhost';
6.重启mysql(步骤2)后再登录尝试

1.4 修改nacos配置文件

备份application.properties文件:
cd /root/nacos/conf/
cp application.properties application.properties.bak
application.properties 文件打开后的最后面,配置如下内容:
修改conf目录下的application.properties文件,主要db相关的配置。多台服务器同步修改
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.230.101:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=Mysql@123
[root@hadoop01 conf]# vim application.properties
[root@hadoop01 conf]# pwd
/root/nacos/conf
[root@hadoop01 conf]# vim application.properties

修改集群配置文件
修改conf目录下的cluster.conf文件,把集群的地址添加进来
cd /root/nacos/conf
cp cluster.conf.example cluster.conf
vim cluster.conf
#添加如下内容
192.168.230.101:8848
192.168.230.102:8848
192.168.230.103:8848
将配置好的nacos分发到其它两台机器:
执行以下操作,需要配置ssh免密码登录,ip地址和主机名的映射。
scp -r /root/nacos/ hadoop02:/root/nacos/
scp -r /root/nacos/ hadoop03:/root/nacos/
1.5 Nginx配置
①下载nginx
官网:nginx news
②上传并解压nginx
使用客户端工具上传到hadoop01机器的/export/software目录下。
tar -zxvf /export/software/nginx-1.21.6.tar.gz -C /export/software/
③编译nginx
#进入到nginx源码目录
cd /export/software/nginx-1.21.6
#检查安装环境
./configure --prefix=/export/servers/nginx
#缺包报错 ./configure: error: C compiler cc is not found
#使用YUM安装缺少的包
yum -y install gcc pcre-devel openssl openssl-devel
#编译安装
./configure --prefix=/export/servers/nginx
make && make install
④配置反向代理
1.修改nginx配置文件
备份cp nginx.conf nginx.conf.bak
报错:cp: cannot stat ‘nginx.conf’: No such file or directory
解决:换一种备份方式:
[root@hadoop01 nginx-1.21.6]# touch nginx.conf
[root@hadoop01 nginx-1.21.6]# echo nginx.conf{,.bak}
nginx.conf nginx.conf.bak
[root@hadoop01 nginx-1.21.6]# cp -a !*
cp -a nginx.conf{,.bak}
[root@hadoop01 nginx-1.21.6]#
修改:vim nignx.conf
#gzip on;
upstream cluster {
server 192.168.230.101:8848;
server 192.168.230.102:8848;
server 192.168.230.103:8848;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://cluster;
}a
指定配置文件启动Nginx:
cd /export/servers/nginx/sbin
./nginx -c /export/servers/nginx/conf/nginx.conf
查看nginx是否运行:
ps -ef | grep nginx

看日志是否更新
tail -f access.log

通过端口判断
我们知道,Nginx监听的是80端口,那么就可以查看80端口运行的程序来判断Nginx是否运行
netstat -anp | grep :80

停止 nginx 命令: ./nginx -s stop
重启nginx命令:./nginx -s reload
⑤验证测试
启动Nginx
启动3个nacos
/root/nacos/bin/startup.sh
1个mysql(配置了开机自启动)
· http://192.168.230.101/nacos/
1.6 配置maven
①下载maven安装包
wget https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
②解压下载的压缩包
tar -zxvf apache-maven-3.3.9-bin.tar.gz
③配置环境变量
vim /etc/profile
export MAVEN_HOME=/root/apache-maven-3.3.9
export PATH=${PATH}:${MAVEN_HOME}/bin
④使用命令使改动生效
source /etc/profile
配置好后,可以用mvn -v命令来确认是否成功
⑤配置maven本地仓库
mkdir mavenRepository
![]()
vim /root/apache-maven-3.3.9/conf/settings.xml
// 添加如下配置,配置本地仓库
<localRepository>/root/apache-maven-3.3.9/mavenRepository</localRepository>
// 在<mirrors></mirrors>标签中添加国内镜像源
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
<mirror>
<!--This is used to direct the public snapshots repo in the
profile below over to a different nexus group -->
<id>nexus-public-snapshots</id>
<mirrorOf>public-snapshots</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/repositories/snapshots/</url>
</mirror>
1.7 测试Nginx
输入地址测试:
192.168.230.101/nacos/
1.8 启动Nacos集群
①启动MySQL(1 40.)
docker start 427edfc5b4eb

②启动虚拟机 (打开集群)
/export/servers/nacos/bin/startup.sh

③启动Nginx代理 (本地打开)

验证是否启动成功:localhost/nacos

验证集群

二、Sentinel与Seata的测试
2.1 Sentinel控制台
在下载好 Sentinel的本地目录下cmd运行
java -jar sentinel-dashboard-1.7.0.jar
验证 localhost:8080

此时 打开localhost8080 登录后界面为空

在IDEA启动服务:8401

执行后找到接口:testA
访问http://localhost:8401/testA 后
本地刷新一下

可以设置流控规则

验证测试:在http://localhost:8401/testA界面连续刷新两次拒绝服务(设置的)

2.2 Seata 验证
2.2.1 创建业务数据库
seata_order:存储订单的数据库
seata_storage:存储库存的数据库
seata_account:存储账户信息的数据库
CREATE DATABASE seata_order;
CREATE DATABASE seata_storage;
CREATE DATABASE seata_account;
2.2.2 建表
在三个库中分别建对应业务表
seata_order库下建t_order表
CREATE TABLE t_order (
`id` BIGINT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`user_id` BIGINT(11) DEFAULT NULL COMMENT '用户id',
`product_id` BIGINT(11) DEFAULT NULL COMMENT '产品id',
`count` INT(11) DEFAULT NULL COMMENT '数量',
`money` DECIMAL(11,0) DEFAULT NULL COMMENT '金额',
`status` INT(1) DEFAULT NULL COMMENT '订单状态:0:创建中;1:已完结'
) ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
SELECT * FROM t_order;
seata_storage库下建t_storage 表
CREATE TABLE t_storage (
`id` BIGINT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`product_id` BIGINT(11) DEFAULT NULL COMMENT '产品id',
`total` INT(11) DEFAULT NULL COMMENT '总库存',
`used` INT(11) DEFAULT NULL COMMENT '已用库存',
`residue` INT(11) DEFAULT NULL COMMENT '剩余库存'
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
INSERT INTO seata_storage.t_storage(`id`, `product_id`, `total`, `used`, `residue`)
VALUES ('1', '1', '100', '0', '100');
SELECT * FROM t_storage;
seata_account库下建t_account 表
CREATE TABLE t_account (
`id` BIGINT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'id',
`user_id` BIGINT(11) DEFAULT NULL COMMENT '用户id',
`total` DECIMAL(10,0) DEFAULT NULL COMMENT '总额度',
`used` DECIMAL(10,0) DEFAULT NULL COMMENT '已用余额',
`residue` DECIMAL(10,0) DEFAULT '0' COMMENT '剩余可用额度'
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
INSERT INTO seata_account.t_account(`id`, `user_id`, `total`, `used`, `residue`) VALUES ('1', '1', '1000', '0', '1000');
SELECT * FROM t_account;
建对应的回滚日志表
-- the table to store seata xid data
-- 0.7.0+ add context
-- you must to init this sql for you business databese. the seata server not need it.
-- 此脚本必须初始化在你当前的业务数据库中,用于AT 模式XID记录。与server端无关(注:业务数据库)
-- 注意此处0.3.0+ 增加唯一索引 ux_undo_log
DROP TABLE `undo_log`;
CREATE TABLE `undo_log` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`branch_id` BIGINT(20) NOT NULL,
`xid` VARCHAR(100) NOT NULL,
`context` VARCHAR(128) NOT NULL,
`rollback_info` LONGBLOB NOT NULL,
`log_status` INT(11) NOT NULL,
`log_created` DATETIME NOT NULL,
`log_modified` DATETIME NOT NULL,
`ext` VARCHAR(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
2.2.3 测试
①启动Seata (本地目录下的bat文件)

②启动事务

③验证事务出错

查看数据库

注释掉再验证

测试链接
http://localhost:2001/order/create?userId=1&productId=1&count=10&money=100

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)