一、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

添加行:skip-grant-tables

如图:

 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

Logo

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

更多推荐