Linux虚拟机安装Dokcer、Mysql、Redis、FastDFS、Lua、OpenResty、Canal、ElasticSearch、IK、kibana、RabbitMQ

    技术2023-09-03  104

    1、环境说明

    虚拟机里面安装的操作系统是:CentOS 7 64位。

    #如果要查看使用的端口,使用netstat命令;则需要安装工具 yum -y install net-tools #安装网桥工具命令,可以使用 brctl 命令 yum install bridge-utils #查看系统已使用的端口 netstat -aptn #关闭防火墙 systemctl stop firewalld #设置开机不启动防火墙 systemctl disable firewalld.service #如果启动之后无法使用模拟终端(MobaXterm,xshell,secureCRT)连接的话; #可以在虚拟机中先访问系统,然后执行如下命令 systemctl stop NetworkManager systemctl restart network.service #输入如下命令可以查看当前虚拟机的Ip ip address iptables -t nat -F

    2、Docker安装与启动

    2.1. Docker安装

    以下是在CentOS7中安装Docker的步骤:

    # 1、yum 包更新到最新 sudo yum update # 2、作用:安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 3、 设置yum源 # 3.1、方案一:使用ustc的(推荐) sudo yum-config-manager --add-repo http://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo # 3.2、方案二:使用阿里云(可能失败) sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 4、 安装docker;出现输入的界面都按 y sudo yum install -y docker-ce # 5、 查看docker版本 docker -v

    2.2. 设置镜像源

    ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。

    https://lug.ustc.edu.cn/wiki/mirrors/help/docker

    1、 编辑文件/etc/docker/daemon.json

    # 执行如下命令: mkdir /etc/docker vi /etc/docker/daemon.json

    2、在文件中加入下面内容

    { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }

    2.3. Docker启动与停止命令

    # 启动docker服务: systemctl start docker # 停止docker服务: systemctl stop docker # 重启docker服务: systemctl restart docker # 查看docker服务状态: systemctl status docker # 设置开机启动docker服务: systemctl enable docker #启动容器;如 docker start mysql5.7 #重启容器 docker restart mysql5.7

    3、Mysql安装

    3.1. 拉取镜像

    # 拉取MySQL 5.7镜像 docker pull mysql:5.7

    3.2. 创建容器

    docker run -di --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

    -p 代表端口映射,格式为 宿主机映射端口:容器运行端口

    -e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的远程登陆密码(如果是在容器中使用root登录的话,那么其密码为空)

    # 创建mysql5.7容器 docker run -di --name=mysql5.7 -v /docker/mysql:/mysqltmp -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

    3.3. 操作容器MySQL

    #写查看容器名称 docker ps -a # 登录docker容器中的 MySQL 5.7(名字根据查看容器) docker exec -it mysql5.7 bash # 登录容器里面的mysql mysql -u root -p 输入密码 #退出MySQL,输入两次exit,退到根目录 exit

    4、Redis安装

    # 拉取redis镜像 docker pull redis # 创建redis容器 docker run -di --name=redis -p 6379:6379 redis #进入redis容器 docker exec -it redis /bin/bash #进入redis安装目录 cd /usr/local/bin #连接redis ./redis-cli

    5、FastDFS安装部署

    5.1. 拉取镜像

    docker pull morunchang/fastdfs

    5.2. 启动容器

    运行tracker

    docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh

    运行storage

    docker run -d --name storage --net=host -e TRACKER_IP=192.168.12.168:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh 使用的网络模式是**–net=host**, 192.168.12.168 是宿主机的IP; 使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。group1是组名,即storage的组;存放文件的如果想要增加新的storage服务器,再次运行该命令,注意更换 新组名

    5.3. 配置Nginx

    安装FastDFS容器中已经集成了Nginx,需要修改nginx的配置,进入storage的容器内部,修改nginx.conf

    docker exec -it storage /bin/bash

    打开nginx的配置文件

    vi /etc/nginx/conf/nginx.conf 修改大概在36行的监听端口为80;在 M00 配置项中添加以下内容 add_header Cache-Control no-store;

    修改后效果:

    # 退出容器 exit #重启容器 docker restart storage #开启开机启动 docker update --restart=always tracker docker update --restart=always storage

    6、Lua安装

    安装lua相关依赖库的支持,执行如下命令:

    yum install gcc gcc-c++ libtermcap-devel ncurses-devel libevent-devel readline-devel #执行上述命令的时候;如果出现Is this ok [y/d/N]: #请输入 y

    在线下载或使用资料/lua/lua-5.3.5.tar.gz中下载的安装包lua-5.3.5.tar.gz

    #在线下载 cd /usr/local curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz #解压 tar zxf lua-5.3.5.tar.gz #编译安装 cd lua-5.3.5 make linux test

    7、OpenResty安装配置

    7.1、安装OpenResty

    1.添加仓库执行命令

    yum install yum-utils yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

    2.执行安装

    # 如果已经安装;想重新安装则先卸载 # yum -y remove openresty # 安装 yum install openresty

    安装过程中出现:Is this ok [y/d/N]: 或者 是否继续?[y/N]: 的时候都输入 y

    安装成功后 会在默认的目录如下:/usr/local/openresty

    7.2、配置Nginx

    在安装了OpenResty之后;默认已经安装好了nginx,安装目录为/usr/local/openresty/nginx

    修改/usr/local/openresty/nginx/conf/nginx.conf,将配置文件使用的根设置为root,目的就是将来要使用lua脚本的时候 ,直接可以加载在root下的lua脚本。

    vi /usr/local/openresty/nginx/conf/nginx.conf

    1、修改nginx.conf文件中的第2行中的 #user nobody; 为 user root;如下:

    修改后:

    2、修改同一个文件/usr/local/openresty/nginx/conf/nginx.conf的第36行,将 80 端口修改为 9090

    保存上述文件的修改。

    #启动nginx /usr/local/openresty/nginx/sbin/nginx

    访问:http://192.168.12.168:9090

    8、Canal 安装配置

    8.1、开启mysql的binlog模式

    1)修改/etc/my.cnf 需要开启主 从模式,开启binlog模式。

    执行如下命令,编辑mysql配置文件

    #进入容器 docker exec -it mysql5.7 /bin/bash # 如果使用不了vi命令;则可以执行如下两个命令安装(中间有下载失败的也不影响) # 但是在创建mysql容器的时候,已经设置了目录挂载,所以只需要将容器中的Mysql配置文件复制到挂载目录,然#后在宿主机上进行修改即可;所以下面两条安装命令是可以不执行的 # apt-get update # apt-get install vim # 复制配置文件到挂载目录 cp /etc/mysql/mysql.conf.d/mysqld.cnf /mysqltmp # 退出容器 exit; # 在宿主机编辑 vi /docker/mysql/mysqld.cnf

    修改上述的mysqld.cnf配置文件,在文件的最后,添加如下配置:

    log-bin=/var/lib/mysql/mysql-bin server-id=12345

    修改完宿主机 /docker/mysql/mysqld.cnf 文件后,需要将文件覆盖回容器中 /etc/mysql/mysql.conf.d/mysqld.cnf

    #进入容器 docker exec -it mysql5.7 /bin/bash #覆盖 cp -rf /mysqltmp/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf

    2)创建mysql账号 用于测试使用,使用root账号创建用户并授予权限

    -- 连接mysql,用户名root,密码123456 mysql -u root -p -- 创建mysql账号,用户名canal,密码canal create user canal@'%' IDENTIFIED by 'canal'; GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'%'; FLUSH PRIVILEGES; exit;

    3)退出到虚拟机操作系统,重启mysql容器

    docker restart mysql5.7

    8.2、删除旧binlog

    如果以前开启过mysql的binlog;那么日志会很多;可以先删除;删除之后canal必须重新安装。

    打开mysql图形管理工具navicat;然后输入:

    reset master

    因为给大家的虚拟机里面的mysql在配置开启了binlog之后操作了很多,所以日志会有很多。避免大家开启canal监听之后收到一大堆的无用数据库操作数据。所以才需要执行上述的删除日志操作。

    顺带把安装好的canal删除了 docker rm canal

    再按照8.3章节重新安装。

    8.3、安装canal

    # 拉取镜像 docker pull docker.io/canal/canal-server #创建容器 docker run -di -p 11111:11111 --name=canal docker.io/canal/canal-server

    进入容器,修改核心配置canal.properties 和instance.properties,canal.properties 是canal自身的配置。

    #进入容器 docker exec -it canal /bin/bash vi canal-server/conf/canal.properties

    修改canal.properties的id,不能和mysql的server-id重复;这里只对 canal.id由原来的1修改为1001; 如下图:

    instance.properties是需要同步数据的数据库连接配置;设置数据库连接参数等信息。

    #退出容器 exit; #查看mysql 容器的ip信息 docker inspect mysql5.7

    #进入canal容器 docker exec -it canal /bin/bash #修改canal数据库连接信息 vi canal-server/conf/example/instance.properties

    上述的文件中有个canal.instance.filter.regex,(这个值我们这里没有修改)表示解析关注的表;默认是全部表,其值有多种配置,如下:

    mysql 数据解析关注的表,Perl正则表达式. 多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\) 常见例子: 1. 所有表:.* or .*\\..* 2. canal schema下所有表: canal\\..* 3. canal下的以canal打头的表:canal\\.canal.* 4. canal schema下的一张表:canal.test1 5. 多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔) 注意:此过滤条件只针对row模式的数据有效(ps. mixed/statement因为不解析sql,所以无法准确提取tableName进行过滤)

    配置完成后,设置开机启动,并记得重启canal。

    #设置开启docker则启动,暂无必要,可以不设置 #docker update --restart=always canal docker restart canal

    9、ElasticSearch安装

    9.1、拉取镜像

    #拉取镜像 docker pull elasticsearch:6.5.0

    9.2、修改系统配置

    修改vi /etc/security/limits.conf ,追加如下内容 (nofile是单个进程允许打开的最大文件个数 soft nofile 是软限制 hard nofile是硬限制 )

    * soft nofile 65536 * hard nofile 65536 * soft nproc 4096 * hard nproc 4096

    修改vi /etc/sysctl.conf,追加如下内容 (限制一个进程可以拥有的VMA(虚拟内存区域)的数量 )

    vm.max_map_count=655360

    执行下面命令 修改内核参数马上生效

    sysctl -p

    重新启动虚拟机,再次启动容器,发现已经可以启动并远程访问

    reboot

    9.3、创建容器

    #创建容器 docker run -di --name=elasticsearch -v /docker/elasticsearch:/elasticsearchtmp -p 9200:9200 -p 9300:9300 elasticsearch:6.5.0

    9.4、修改容器配置

    9.4.1、jvm

    docker exec -it elasticsearch /bin/bash #修改配置文件; vi /usr/share/elasticsearch/config/jvm.options

    将第22、 23行的内容修改为如下:

    默认配置如下:

    -Xms1g -Xmx1g

    内存占用太多了,调小一些:

    -Xms512m -Xmx512m

    9.4.2、容器

    修改es配置开启远程连接,代码如下:

    登录容器

    docker exec -it elasticsearch /bin/bash #修改配置文件; vi /usr/share/elasticsearch/config/elasticsearch.yml

    在上述的 elasticsearch.yml文件中将 cluster.name的值修为 changgou ;然后再文件内容后追加如下内容:

    bootstrap.system_call_filter: false http.cors.enabled: true http.cors.allow-origin: "*"

    修改后如下图:

    #重启docker docker restart elasticsearch

    访问: http://192.168.12.168:9200/

    如果要开启docker后自动启动容器

    docker update --restart=always 容器名称或者容器id

    9.5、IK分词器安装

    将 资料\elasticsearch\elasticsearch-analysis-ik-6.5.0.zip 文件上传到虚拟机中。

    cd /docker/elasticsearch mkdir ik && cd ik #上述 elasticsearch-analysis-ik-6.5.0.zip 上传完成后;解压文件并重命名 # 下载解压工具 yum -y install unzip unzip elasticsearch-analysis-ik-6.5.0.zip #删除压缩包 rm -f elasticsearch-analysis-ik-6.5.0.zip cd .. docker cp ./ik elasticsearch:/usr/share/elasticsearch/plugins #重启es容器 docker restart elasticsearch

    IK提供了两个分词算法ik_smart 和 ik_max_word 其中 ik_smart 为最少切分,ik_max_word为最细粒度划分。在Chrome浏览器中打开REST Client插件(安装文档见资料文件夹中的 Advanced-REST-client_v3.1.9.zip)。

    请求地址:http://192.168.12.168:9200/_analyze?pretty=true

    请求方式:post

    请求参数:{“analyzer”: “ik_smart”,“text”: “我是程序员”}

    具体执行界面如下:

    ik分词器的es各种版本可以从 https://github.com/medcl/elasticsearch-analysis-ik 下载

    9.6、kibana安装

    9.6.1、安装

    #拉取kibana镜像 docker pull docker.io/kibana:6.5.0 #执行如下命令,开始创建kibana容器 docker run -it -d -e ELASTICSEARCH_URL=http://192.168.12.168:9200 --name=kibana -p 5601:5601 kibana:6.5.0

    9.6.2、使用

    ELASTICSEARCH_URL=http://192.168.12.168:9200 是指链接的ElasticSearch地址

    5601:5601 访问端口号

    访问http://192.168.12.168:5601如下地址进行测试:

    1)查看索引

    GET /_cat/indices?v

    2)创建索引

    PUT /user

    3)创建映射

    PUT /user/_doc/_mapping { "properties": { "name":{ "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_smart", "store": false }, "city":{ "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_smart", "store": false }, "age":{ "type": "long", "store": false }, "description":{ "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_smart", "store": false } } }

    4)创建文档

    PUT /user/_doc/1 { "name":"张黑马", "age":22, "city":"北京", "description":"张黑马来自中国北京!" }

    5)查看文档

    GET /user/_doc/1

    在新增几个文档内容:

    PUT /user/_doc/2 { "name":"李白马", "age":23, "city":"上海", "description":"李白马来自中国上海!" } PUT /user/_doc/3 { "name":"王紫马", "age":21, "city":"深圳", "description":"王紫马来自中国深圳!" } PUT /user/_doc/4 { "name":"赵红马", "age":22, "city":"广州", "description":"赵红马来自中国广州!" } PUT /user/_doc/5 { "name":"钱蓝马", "age":25, "city":"广州", "description":"钱蓝马来自中国广州!" }

    6)修改文档

    PUT /user/_doc/4 { "name":"赵红马,被修改了", "age":22, "city":"广州", "description":"赵红马来自中国广州!" }

    使用POST更新某个列的数据;也就是选择性更新,只更新设置了的数据。

    #使用POST更新某个域的数据 POST /user/_doc/4/_update { "doc":{ "name":"赵红马,又被修改", "description":"赵红马来自中国广州!" } }

    7)删除文档

    DELETE /user/_doc/6 #查询所有 GET /user/_search

    8)排序分页

    排序查询

    #搜索排序 GET /user/_search { "query":{ "match_all": {} }, "sort":{ "age":{ "order":"desc" } } }

    分页查询

    #分页实现 GET /user/_search { "query":{ "match_all": {} }, "sort":{ "age":{ "order":"desc" } }, "from": 0, "size": 2 }

    from 起始索引号

    size 每页大小

    9)过滤查询

    #term:单个词条查询 GET /user/_doc/_search { "query":{ "term":{ "city":"广州" } } } #terms:多个词条查询 GET /user/_doc/_search { "query":{ "terms":{ "city":["广州","深圳"] } } } #range 范围查询允许按照指定范围查找一批数据。例如查询年龄范围、 #gt表示> gte表示=> #lt表示< lte表示<= GET /user/_doc/_search { "query":{ "range": { "age": { "gte": 21, "lte": 24 } } } } #exists 存在查询可以用于查找拥有某个域的数据 GET /user/_doc/_search { "query": { "exists":{ "field":"address" } } } #bool 过滤可以用来合并多个过滤条件查询结果的布尔逻辑,它包含一下操作符: # must : 多个查询条件的完全匹配,相当于 and。 # must_not : 多个查询条件的相反匹配,相当于 not。 # should : 至少有一个查询条件匹配, 相当于 or。 # 这些参数可以分别继承一个过滤条件或者一个过滤条件的数组: GET /user/_doc/_search { "query": { "bool": { "must": [ { "term": { "city": { "value": "广州" } } }, { "range":{ "age":{ "gte":20, "lte":30 } } } ] } } } # match_all 查询;可以查询到所有文档,是没有查询条件下的默认语句。 GET /user/_doc/_search { "query": { "match_all": {} } } # match查询是一个标准查询,不管你需要全文本查询还是精确查询基本上都要用到它。 # 如果你使用 match 查询一个全文本字段,它会在真正查询之前用分析器先分析match一下查询字符: # 字符串匹配 GET /user/_doc/_search { "query": { "match": { "description": "广州" } } } # multi_match查询允许你做match查询的基础上同时搜索多个字段,在多个字段中同时查一个 GET /user/_doc/_search { "query": { "multi_match": { "query": "深圳", "fields": [ "city", "description" ] } } }

    10、RabbitMQ安装

    10.1、拉取镜像

    docker pull rabbitmq:3.8.1-management

    10.2、创建容器

    docker run -di --name rabbitmq -p 5672:5672 -p 15672:15672 -v /docker/rabbitmq/data:/var/lib/rabbitmq rabbitmq:3.8.1-management

    -d 后台运行容器;

    –name 指定容器名;

    -p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号);

    -v 映射目录或文件;

    -e 指定环境变量;如果有需要可以指定一些默认的信息(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)

    10.3、访问测试

    http://192.168.12.168:15672

    用户名:guest

    密码:guest

    11、公钥私钥生成

    在windows系统中先安装openssl;之后打开 命令行 执行如下:

    # 生成公钥私钥 keytool -genkeypair -alias changgou -keyalg RSA -keypass 123456 -keystore changgou.jks -storepass 123456 # 利用openssl导出公钥 keytool -list -rfc --keystore changgou.jks | openssl x509 -inform pem -pubkey

    12、Seata分布式事务服务器

    12.1、安装jdk

    mkdir /servers && cd /servers #上传“资料/jdk-8u202-linux-x64.tar.gz”到上述文件夹 tar -zxvf jdk-8u202-linux-x64.tar.gz rm -f jdk-8u202-linux-x64.tar.gz vi /etc/profile #跳转到最后一行(shift+g),按o进行编辑,添加如下: export JAVA_HOME=/servers/jdk1.8.0_202 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar #修改完并保存完后;执行如下立即生效 source /etc/profile

    12.2、部署seata

    cd /servers #上传 seata-server-0.9.0.tar.gz 文件到上述目录 #解压 tar -zxvf seata-server-0.9.0.tar.gz #后台方式启动seata nohup sh /servers/seata/bin/seata-server.sh &

    附录:启动全命令

    #启动docker systemctl start docker #启动mysql docker start mysql5.7 #启动redis docker start redis #启动openresty /usr/local/openresty/nginx/sbin/nginx #启动canal docker start canal

    用户名:guest

    密码:guest

    11、公钥私钥生成

    在windows系统中先安装openssl;之后打开 命令行 执行如下:

    # 生成公钥私钥 keytool -genkeypair -alias changgou -keyalg RSA -keypass 123456 -keystore changgou.jks -storepass 123456 # 利用openssl导出公钥 keytool -list -rfc --keystore changgou.jks | openssl x509 -inform pem -pubkey

    12、Seata分布式事务服务器

    12.1、安装jdk

    mkdir /servers && cd /servers #上传“资料/jdk-8u202-linux-x64.tar.gz”到上述文件夹 tar -zxvf jdk-8u202-linux-x64.tar.gz rm -f jdk-8u202-linux-x64.tar.gz vi /etc/profile #跳转到最后一行(shift+g),按o进行编辑,添加如下: export JAVA_HOME=/servers/jdk1.8.0_202 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar #修改完并保存完后;执行如下立即生效 source /etc/profile

    12.2、部署seata

    cd /servers #上传 seata-server-0.9.0.tar.gz 文件到上述目录 #解压 tar -zxvf seata-server-0.9.0.tar.gz #后台方式启动seata nohup sh /servers/seata/bin/seata-server.sh &

    附录:启动全命令

    #启动docker systemctl start docker #启动mysql docker start mysql5.7 #启动redis docker start redis #启动openresty /usr/local/openresty/nginx/sbin/nginx #启动canal docker start canal
    Processed: 0.009, SQL: 9