龙空技术网

商城微服务项目组件搭建(二)——Nacos、MySQL、Redis安装部署

eclipse2019 323

前言:

如今咱们对“eclipse如何配置mysql”大致比较关注,朋友们都想要剖析一些“eclipse如何配置mysql”的相关文章。那么小编同时在网络上搜集了一些有关“eclipse如何配置mysql””的相关知识,希望朋友们能喜欢,看官们一起来了解一下吧!

1、本文属于mini商城系列文档的第0章,由于篇幅原因,这篇文章拆成了6部分,本文属于第2部分

2、mini商城项目详细文档及代码见CSDN:

3、本文主要讲解docker容器中的vi命令安装、docker安装Nacos、docker安装MySQL、OpenResty安装部署、Lua安装部署、Redis安装部署

2.3 容器安转vi

因为有些组件需要在容器中操作VI命令,但是docker容器中没有该命令,所以可以安装

尽量避免直接在容器中修改一些配置,一般实际情况都是将容器中的配置挂载在宿主机的某个目录下,要修改配置只需要修改挂载文件就好了,挂载方式就是在创建容器的时候通过-v参数实现

#进入容器,执行apt-get updateapt-get install -y vim
2.4 Nacos安装

因为是测试环境,所以只在137服务器上安装Nacos,如果是在真实环境则Nacos需要部署集群,集群部署参考作者发表的Nacos板块

docker run -d -p 8848:8848 -e MODE=standalone -v /opt/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties -v /opt/nacos/logs:/home/nacos/logs --restart always --name nacos nacos/nacos-server

安装好了后,访问 账号密码都是nacos

2.5 MySQL安装

同样的,测试环境,只安装单机版本(137服务器上),如果是真实环境则需要安装集群。集群部署参考作者后续发表的MySQL板块

docker run -di --name mysql -v mysql1:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
2.6 OpenResty安装

安装在137服务器上

2.6.1 卸载原来的

1、停止Nginx服务

ps -ef | grep nginx
cd /usr/local/openresty/nginx/sbin./nginx -s stop

2、输入以下指令全局查找nginx相关的文件:

sudo find / -name openresty

3、删除查找出来的所有openresty相关文件:

sudo rm -rf  此处跟查找出来的openresty文件
2.6.2 安装

cd /usr/local/eclipse2019

如果没有这个目录就创建一个,然后再进到这个目录下:mkdir -p /usr/local/eclipse2019

1、安装依赖库:

yum install libtermcap-devel ncurses-devel libevent-devel readline-devel pcre-devel gcc openssl openssl-devel per perl wget

2、下载安装包:

我这里也给大家在资料目录下提供了,如果下载不了的同学可以通过Xftp工具直接将这两个安装包复制到你的服务器相关目录下

wget  

3、解压安装包

tar -xf openresty-1.11.2.5.tar.gztar -xvf ngx_cache_purge-2.3.tar.gz

4、进入安装包,并安装

#进入安装包cd /usr/local/eclipse2019/openresty-1.11.2.5#安装./configure --prefix=/usr/local/openresty --with-luajit --without-http_redis2_module --with-http_stub_status_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --add-module=/usr/local/eclipse2019/ngx_cache_purge-2.3/#编译并安装make && make install

安装成功!!

说明:

#安装路径--prefix=/usr/local/openresty#安装luajit相关库,luajit是lua的一个高效版,LuaJIT的运行速度比标准Lua快数十倍。--with-luajit#现在使用的Redis都是3.x以上版本,这里不推荐使用Redis2,表示不安装redis2支持的lua库--without-http_redis2_module#Http对应状态的库--with-http_stub_status_module#对Http2的支持--with-http_v2_module#gzip服务端压缩支持--with-http_gzip_static_module#过滤器,可以通过将一个指定的字符串替换为另一个字符串来修改响应--with-http_sub_module#Nginx代理缓存清理工具--add-module=/usr/local/eclipse2019/ngx_cache_purge-2.3/

关于每个模块的具体作用,大家可以参考腾讯云的开发者手册:

如下图安装完成后,在 /usr/local/openrestry/nginx 目录下是安装好的nginx,以后我们将在该目录的nginx下实现网站发布。

安装完成后可以进入/usr/local/openresty/nginx/sbin目录下执行./nginx

然后可以在浏览器中访问192.168.8.137就可以获得下面的页面

5、配置环境变量:

vi /etc/profile#末尾加export PATH=/usr/local/openresty/nginx/sbin:$PATH#然后保存并退出文件编辑#要想环境变量立马启动执行:source /etc/profile#配置好环境变量之后#停止Nginxnginx -s stop#启动nginx

6、开机启动:

linux系统结构/lib/systemd/system/目录,该目录自动存放启动文件的配置位置,里面一般包含有xxx.service,例如systemctl enable nginx.service,就是调用/lib/systemd/system/nginx.service文件,使nginx开机启动。

我们可以创建/usr/lib/systemd/system/nginx.service,在该文件中编写启动nginx脚本:

[Service]Type=forkingPIDFile=/usr/local/openresty/nginx/logs/nginx.pidExecStartPre=/usr/local/openresty/nginx/sbin/nginx -tExecStart=/usr/local/openresty/nginx/sbin/nginxExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=true[Install]WantedBy=multi-user.target
#重新加载某个服务的配置文件systemctl daemon-reload#开机启动systemctl enable nginx.service#启动nginxsystemctl start nginx.service#停止nginxsystemctl stop nginx.service#查看状态systemctl status nginx.service
2.7 Lua安装

在/usr/local/eclipse2019/目录下按照如下步骤进行安装:

#下载安装包,也可以直接将我给大家准备的安装包复制到这个目录下curl -R -O 解压tar xf lua-5.3.5.tar.gzcd lua-5.3.5make linux test

出现如下界面,表示安装成功:

版本查看:lua -v

我们可以发现,Lua版本还是原来系统自带的版本,我们需要替换原来系统自带的lua,执行如下命令:

rm -rf /usr/bin/lualn -s /usr/local/eclipse2019/lua-5.3.5/src/lua /usr/bin/lua

此时版本信息如下:

2.8 Redis安装

本文将介绍docker版Redis的单机和集群安装方式,并且整个项目只在137服务器上部署单机版Redis就好了,如果是生产环境建议根据实际业务复杂度部署哨兵或者集群,其他的部署方式详细文档见后续发布的Redis专题学习

2.8.1 单机安装

1、拉取镜像

#拉取6.0.8版本的Redis镜像docker pull redis:6.0.8

2、创建配置文件及持久化文件的挂载目录

#1.创建配置文件目录和持久化数据目录mkdir -p /usr/local/eclipse2019/redis/conf /usr/local/eclipse2019/redis/data#2.在conf目录下创建redis.conf文件,文件内容在官网复制:

3、创建Redis容器

docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name redis -v /usr/local/eclipse2019/redis/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/eclipse2019/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf  --appendonly yes  --requirepass 123456#--restart=always 总是开机启动#--log是日志方面的#-p 6379:6379 将6379端口挂载出去#--name 给这个容器取一个名字#-v 数据卷挂载#/usr/local/eclipse2019/redis/conf/redis.conf:/etc/redis/redis.conf 这里是将我服务器本地的redis.conf和docker容器下的redis.conf 挂载在一起。#/usr/local/eclipse2019/redis/data:/data 这个同上#-d redis 表示后台启动redis#redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录 /etc/redis/redis.conf 也就是liunx下的/usr/local/eclipse2019/redis/conf/redis.conf#–appendonly yes 开启redis 持久化#–requirepass 123456 设置密码 (如果你是通过docker 容器内部连接的话,就随意,可设可不设。但是如果想向外开放的话,一定要设置)

4、查看日志

docker logs redis

5、进入容器中测试

#进入容器docker exec -it redis /bin/bash#开启client端redis-cli

验证密码

auth 123456

6、删除Redis容器和镜像

#查容器的iddocker ps -a#删除容器docker rm 容器ID#查Redis的镜像docker images#删除镜像docker rmi 镜像ID
2.8.2 集群部署

我们使用Docker容器安装Redis集群,准备6台机器(我们在1台机器上模拟):

节点

IP

端口

RedisNode1

192.168.8.137

7001

RedisNode2

192.168.8.137

7002

RedisNode3

192.168.8.137

7003

RedisNode4

192.168.8.137

7004

RedisNode5

192.168.8.137

7005

RedisNode6

192.168.8.137

7006

1、创建网络

创建网络(各个Redis集群节点都在同一网段下数据交换,安全性更高,传输效率也会更高):

docker network create redis-net

2、创建Redis配置

我们可以基于shell脚本批量创建每个Redis的配置文件,再采用shell脚本为脚本批量填充数据,再创建docker容器,我们可以先写一个Redis配置的模板文件redis-config.tmpl

#端口port ${PORT}#非保护模式protected-mode no#启用集群模式cluster-enabled yescluster-config-file nodes.conf#超时时间cluster-node-timeout 5000cluster-announce-ip 192.168.8.137cluster-announce-port ${PORT}cluster-announce-bus-port 1${PORT}#开启aof持久化策略appendonly yes#后台运行#daemonize yes pidfile  /var/run/redis_${PORT}.pid

3、Shell创建docker容器

我们创建一个shell脚本,从7001循环到7006,以上面的redis-config.tmpl模板为基础,批量创建每个redis节点的配置文件,并创建对应容器,文件名字叫install.sh,将改文件设置为可执行文件:

#!/bin/bash#在/usr/local/eclipse2019/redis-cluster下生成conf和data目标,并生成配置信息for port in `seq 7001 7006`; do   mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-config.tmpl > ./${port}/conf/redis.conf && mkdir -p ./${port}/data;done#创建6个redis容器for port in `seq 7001 7006`;do	docker run -d -it -p ${port}:${port} -p 1${port}:1${port} -v /usr/local/eclipse2019/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/eclipse2019/redis-cluster/${port}/data:/data --privileged=true --restart always --name redis-${port} --net redis-net --sysctl net.core.somaxconn=1024 redis:6.0.8 redis-server /usr/local/etc/redis/redis.conf;done#查找ipfor port in `seq 7001 7006`;do	echo  -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port}" ";done#换行echo -e "\n"#输入信息read -p "输入要进入的Docker容器名字,默认redis-7001:" DOCKER_NAME#判断是否为空if [ ! $DOCKER_NAME ]; 	then DOCKER_NAME='redis-7001'; fi#进入容器docker exec -it redis-7001 /bin/bash

创建文件后执行授权:

chmod +x install.sh

此时执行./install.sh就能安装7001-7006的容器。

执行这一步之后,也只是容器安装好了,开启了集群,但哪些节点创建一个集群组还并未操作,我们需要用到redis-cli客户端工具来创建集群组:

进入到7001容器中:

docker exec -it redis-7001 /bin/bashcd /usr/local/bin/

然后执行下面的代码

./redis-cli --cluster create 192.168.8.137:7001 192.168.8.137:7002 192.168.8.137:7003 192.168.8.137:7004 192.168.8.137:7005 192.168.8.137:7006 --cluster-replicas 1

效果如下:

此时集群管理如下:

7001(Master) 7005(Slave)

7002(Master) 7006(Slave)

7003(Master) 7004(Slave)

关于创建集群中的相关参数我们做如下说明:

Cluster Manager Commands:  create         host1:port1 ... hostN:portN   #创建集群                 --cluster-replicas <arg>      #从节点个数  check          host:port                     #检查集群                 --cluster-search-multiple-owners #检查是否有槽同时被分配给了多个节点  info           host:port                     #查看集群状态  fix            host:port                     #修复集群                 --cluster-search-multiple-owners #修复槽的重复分配问题  reshard        host:port                     #指定集群的任意一节点进行迁移slot,重新分slots                 --cluster-from <arg>          #需要从哪些源节点上迁移slot,可从多个源节点完成迁移,以逗号隔开,传递的是节点的node id,还可以直接传递--from all,这样源节点就是集群的所有节点,不传递该参数的话,则会在迁移过程中提示用户输入                 --cluster-to <arg>            #slot需要迁移的目的节点的node id,目的节点只能填写一个,不传递该参数的话,则会在迁移过程中提示用户输入                 --cluster-slots <arg>         #需要迁移的slot数量,不传递该参数的话,则会在迁移过程中提示用户输入。                 --cluster-yes                 #指定迁移时的确认输入                 --cluster-timeout <arg>       #设置migrate命令的超时时间                 --cluster-pipeline <arg>      #定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10                 --cluster-replace             #是否直接replace到目标节点  rebalance      host:port                                      #指定集群的任意一节点进行平衡集群节点slot数量                  --cluster-weight <node1=w1...nodeN=wN>         #指定集群节点的权重                 --cluster-use-empty-masters                    #设置可以让没有分配slot的主节点参与,默认不允许                 --cluster-timeout <arg>                        #设置migrate命令的超时时间                 --cluster-simulate                             #模拟rebalance操作,不会真正执行迁移操作                 --cluster-pipeline <arg>                       #定义cluster getkeysinslot命令一次取出的key数量,默认值为10                 --cluster-threshold <arg>                      #迁移的slot阈值超过threshold,执行rebalance操作                 --cluster-replace                              #是否直接replace到目标节点  add-node       new_host:new_port existing_host:existing_port  #添加节点,把新节点加入到指定的集群,默认添加主节点                 --cluster-slave                                #新节点作为从节点,默认随机一个主节点                 --cluster-master-id <arg>                      #给新节点指定主节点  del-node       host:port node_id                              #删除给定的一个节点,成功后关闭该节点服务  call           host:port command arg arg .. arg               #在集群的所有节点执行相关命令  set-timeout    host:port milliseconds                         #设置cluster-node-timeout  import         host:port                                      #将外部redis数据导入集群                 --cluster-from <arg>                           #将指定实例的数据导入到集群                 --cluster-copy                                 #migrate时指定copy                 --cluster-replace                              #migrate时指定replace

4、集群测试

集群安装好了后,我们可以使用redis-cli进行测试:

#登录redis集群root@6f42ad53f7bb:/usr/local/bin# ./redis-cli -p 7001 -c#添加数据127.0.0.1:7001> set zhangsan SDFDSFDSF.DSFSDFSDFS.FHBSDFDSFSDFF#自动重定向到7003节点-> Redirected to slot [12767] located at 192.168.8.137:7003OK192.168.8.137:7003> 

5、卸载Docker容器

如果我们想卸载安装的docker容器,可以创建一个文件uninstall.sh

#!/bin/bashdocker stop redis-7001 redis-7002 redis-7003 redis-7004 redis-7005 redis-7006 docker rm redis-7001 redis-7002 redis-7003 redis-7004 redis-7005 redis-7006 rm -rf 7001 7002 7003 7004 7005 7006

再给uninstall.sh添加可执行权限:

chmod +x uninstall.sh

执行该文件即可卸载7001-7006所有docker容器了

2.8.3 Java连接Redis集群

在java客户端连接Redis集群,只需要修改配置文件bootstrap.yml中redis链接即可:

redis:    cluster:      nodes: 192.168.8.137:7001,192.168.8.137:7002,192.168.8.137:7003,192.168.8.137:7004,192.168.8.137:7005,192.168.8.137:7006
2.8.4 扩容与迁移

在生产环境,如果缓存数据量过大,就有扩容需求,针对Redis进行扩容,其实只用使用它的指令即可,但无论怎么使用,都和Redis集群的原理有关,也就是key经过CRC16算法取模最终的值在0至16383范围之间。

2.8.4.1 新节点创建

我们需要做扩容操作,所以需要先创建一个节点,创建单个节点我们可以把之前的脚本修改一下,创建单个节点的文件oneinstall.sh:

#!/bin/bash#在/usr/local/eclipse2019/redis-cluster下生成conf和data目标,并生成配置信息#换行echo -e "\n"#输入信息read -p "请输入容器端口:" DOCKER_PORT#输入端口赋值port=$DOCKER_PORT;echo -e "$port"#创建配置文件mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-config.tmpl > ./${port}/conf/redis.conf && mkdir -p ./${port}/data;#创建redis容器docker run -d -it -p ${port}:${port} -p 1${port}:1${port} -v /usr/local/eclipse2019/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/eclipse2019/redis-cluster/${port}/data:/data --privileged=true --restart always --name redis-${port} --net redis-net --sysctl net.core.somaxconn=1024 redis:6.0.8 redis-server /usr/local/etc/redis/redis.conf;#查找ipecho  -n "启动$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port}" 成功!";echo -e "\n"

oneinstall.sh添加可执行权限,并执行该脚本:

#添加可执行权限chmod +x oneinstall.sh#创建新的节点./oneinstall.sh#输入7007端口7007

此时7007节点创建完成:

2.8.4.2 扩容

我们要进行扩容,可以先查看当前集群状态:

#进入任何一台服务器,然后进入容器内部,调用客户端,查看集群状态cluster nodes

状态信息如下:

我们现在开始执行节点增加,也就是扩容操作:

./redis-cli --cluster add-node 192.168.8.137:7007 192.168.8.137:7001

执行后,效果如下:

此时我们再查看状态:cluster nodes

此时节点已经增加进来,但目前没有分配任何哈希槽,所以无论做数据增加还是删除以及查询,都和它没有一毛钱关系,因此我们还要把部分哈希槽迁移到该节点上,同时被迁移的节点上对应数据也会跟着一起迁移过来,迁移命令如下:

./redis-cli --cluster reshard 192.168.8.137:7003 --cluster-from 5d93f5ca5e7289c04b00ccc468e0ce4ef8afaea9 --cluster-to 889a13a1e1761f1e83c25e41287d1c463175d467 --cluster-slots 100

参数说明:

5d93f5ca5e7289c04b00ccc468e0ce4ef8afaea9 指的是7003节点

889a13a1e1761f1e83c25e41287d1c463175d467 指定是7007节点

表示将7003节点中100个哈希槽迁移到7007上来

我们再查看状态:

思考:如何实现收容?

收容其实也很简单,也是使用命令即可,要做2个操作

1:哈希槽迁移

2:删除节点

#实现逻辑参考Redis专题内容

标签: #eclipse如何配置mysql #nginxlua微商城 #eclipse教程csdn