• 微服务框架 案例


    在这里插入图片描述

    服务配置说明

    mysql-master01 (主库)
    	mariadb:
    	   port: 33331 -> 3306
    	   ip: 192.168.64.129 -> 172.17.0.2
    	   user: root
    	   pwd: root
    	mysql-slave01( 从库)
    		mariadb:
    			port 33333 -> 3306
    			ip: 192.168.64.128 -> 172.17.0.4
    			user: root
    	  	    pwd: root
    mysql-master02 (主库)
    	mariadb:
    	   port: 33332 -> 3306
    	   ip: 192.168.64.129 -> 172.17.0.3
    	   user: root
    	   pwd: root
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    初始化服务器

    安装Docker

    安装Mariadb

    双主

    • 拉取基础镜像
    docker pull mariadb:latest
    
    • 1
    • 创建 mysql-master01 容器
    sudo docker run \
    -p 33331:3306 \
     --name mysql-master01 \
     --restart=always  \
     -v /usr/local/docker/mysql1/mysql-files:/var/lib/mysql-files \
     -v /usr/local/docker/mysql1/conf:/etc/mysql \
     -v /usr/local/docker/mysql1/logs:/var/log/mysql  \
     -v /usr/local/docker/mysql1/data:/var/lib/mysql \
     -e MYSQL_ROOT_PASSWORD=root \
     -d mariadb:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 创建 mysql-master02 容器
    sudo docker run \
    -p 33332:3306 \
    --name mysql-master02 \
    --restart=always  \
    -v /usr/local/docker/mysql2/mysql-files:/var/lib/mysql-files \
    -v /usr/local/docker/mysql2/conf:/etc/mysql \
    -v /usr/local/docker/mysql2/logs:/var/log/mysql  \
    -v /usr/local/docker/mysql2/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=root \
    -d mariadb:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 授权远程链接账号 (mysql-master01 / mysql-master02)
    # 进入docker容器
    docker exec -it 容器名称 mysql -uroot -proot
    # 授权
    grant all privileges on root.* to 'root'@'%' identified by 'root';
    # 刷新权限
    flush privileges;
    # 如果授权失败则使用
    ALTER USER 'root'@'%' IDENTIFIED BY 'root';
    # 重新刷新
    flush privileges;
    # 检查权限
    show grants for 'root';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    • 测试 授权远程链接账号是否成功
    # 进入mysql-master01容器
    docker exec -it mysql-master01 bash
    # 远程链接mysql-master02的数据库
    mysql -uroot -proot -h 172.17.0.3
    
    # 进入mysql-master02容器
    docker exec -it mysql-master02 bash
    # 远程链接mysql-master01的数据库
    mysql -uroot -proot -h 172.17.0.2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 双主配置 mysql-master01
    # 新建文件
    touch /use/local/docker/mysql1/conf/my.cnf
    # 添加内容
    [mysqld]
    server-id=1
    log_bin=master-bin
    binlog-ignore-db=mysql
    binlog-ignore-db=information_schema
    binlog-ignore-db=performance_schema
    binlog-ignore-db=test
    innodb_flush_log_at_trx_commit=1 
    
    #重启mysql-master01容器
    docker restart mysql-master01
    
    # 进入mysql-master02容器数据库
    docker exec -it mysql-master02 mysql -uroot -proot 
    # 查看binlog信息
    show master status;
    +-------------------+----------+--------------+--------------------------------------------------+
    | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB                                 |
    +-------------------+----------+--------------+--------------------------------------------------+
    | master-bin.000001 |      329 |              | mysql,information_schema,performance_schema,test |
    +-------------------+----------+--------------+--------------------------------------------------+
    
    # 返回mysql-master01 库
    # 绑定主从关系
    change master to master_host='172.17.0.3',master_user='root',master_password='root',master_log_file='master-bin.000001',master_log_pos=329;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 双主配置 mysql-master02
    # 新建文件
    touch /use/local/docker/mysql2/conf/my.cnf
    # 添加内容
    [mysqld]
    server-id=2
    log_bin=master-bin
    binlog-ignore-db=mysql
    binlog-ignore-db=information_schema
    binlog-ignore-db=performance_schema
    binlog-ignore-db=test
    innodb_flush_log_at_trx_commit=1 
    
    # 重启
    docker restart mysql-master02
    
    # 进入mysql-master01容器数据库
    docker exec -it mysql-master01 mysql -uroot -proot 
    # 查看binlog信息
    show master status;
    +-------------------+----------+--------------+--------------------------------------------------+
    | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB                                 |
    +-------------------+----------+--------------+--------------------------------------------------+
    | master-bin.000001 |      329 |              | mysql,information_schema,performance_schema,test |
    +-------------------+----------+--------------+--------------------------------------------------+
    
    # 返回mysql-master02库
    # 绑定主从关系
    change master to master_host='172.17.0.2',master_user='root',master_password='root',master_log_file='master-bin.000001',master_log_pos=329;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 双主配置说明
    server-id指定serverId 关联(双主/主从)数据库的Id不能相同
    log_bin指定binlog日志文件名称
    binlog-ignore-db不记录的库 (不负责的库)
    innodb_flush_log_at_trx_commit更好的持久化数据
    master_host : 远程主机地址
    master_user : 链接的用户
    master_password : 链接的密码
    master_log_file : 读取的binlog日志文件
    master_log_pos : 偏移量
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 查看结果
    # 进入mysql-master01 和 mysql-master02 的数据库查看结果
    # 返回结果这两项是Yes表示成功
    # Slave_IO_Running: Yes
    # Slave_SQL_Running: Yes 
    
    show slave status \G;
    
    *************************** 1. row ***************************
                    Slave_IO_State: Waiting for master to send event
                       Master_Host: 172.17.0.3
                       Master_User: root
                       Master_Port: 3306
                     Connect_Retry: 60
                   Master_Log_File: master-bin.000001
               Read_Master_Log_Pos: 329
                    Relay_Log_File: 8a70e6fd1129-relay-bin.000002
                     Relay_Log_Pos: 556
             Relay_Master_Log_File: master-bin.000001
                  Slave_IO_Running: Yes
                 Slave_SQL_Running: Yes
                   Replicate_Do_DB:
               Replicate_Ignore_DB:
                Replicate_Do_Table:
            Replicate_Ignore_Table:
           Replicate_Wild_Do_Table:
       Replicate_Wild_Ignore_Table:
                        Last_Errno: 0
                        Last_Error:
                      Skip_Counter: 0
               Exec_Master_Log_Pos: 329
                   Relay_Log_Space: 872
                   Until_Condition: None
                    Until_Log_File:
                     Until_Log_Pos: 0
                Master_SSL_Allowed: No
                Master_SSL_CA_File:
                Master_SSL_CA_Path:
                   Master_SSL_Cert:
                 Master_SSL_Cipher:
                    Master_SSL_Key:
             Seconds_Behind_Master: 0
     Master_SSL_Verify_Server_Cert: No
                     Last_IO_Errno: 0
                     Last_IO_Error:
                    Last_SQL_Errno: 0
                    Last_SQL_Error:
       Replicate_Ignore_Server_Ids:
                  Master_Server_Id: 2
                    Master_SSL_Crl:
                Master_SSL_Crlpath:
                        Using_Gtid: No
                       Gtid_IO_Pos:
           Replicate_Do_Domain_Ids:
       Replicate_Ignore_Domain_Ids:
                     Parallel_Mode: optimistic
                         SQL_Delay: 0
               SQL_Remaining_Delay: NULL
           Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
                  Slave_DDL_Groups: 0
    Slave_Non_Transactional_Groups: 0
        Slave_Transactional_Groups: 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 测试
    # 在mysql-master01中创建库 
    # 在mysql-master02中查看库
    # 反之
    
    • 1
    • 2
    • 3

    多从

    • 创建mysql-slave01 容器
    sudo docker run \
    -p 33333:3306 \
    --name mysql-slave01 \
    --restart=always  \
    -v /usr/local/docker/mysql3/mysql-files:/var/lib/mysql-files \
    -v /usr/local/docker/mysql3/conf:/etc/mysql \
    -v /usr/local/docker/mysql3/logs:/var/log/mysql  \
    -v /usr/local/docker/mysql3/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=root \
    -d mariadb:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 配置文件 mysql-slave01
    #创建配置文件
    touch /usr/local/docker/mysql3/conf/my.cnf
    #添加内容
    [mysqld]
    server-id=3
    #重启容器
    docker restart mysql-slave01
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 授权远程链接账号
    # 进入docker容器
    docker exec -it mysql-slave01  mysql -uroot -proot
    # 授权
    grant all privileges on root.* to 'root'@'%' identified by 'root';
    # 刷新权限
    flush privileges;
    # 如果授权失败则使用
    ALTER USER 'root'@'%' IDENTIFIED BY 'root';
    # 重新刷新
    flush privileges;
    # 检查权限
    show grants for 'root';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 查看mysql-master01的信息
    MariaDB [(none)]> show master status ;
    +-------------------+----------+--------------+--------------------------------------------------+
    | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB                                 |
    +-------------------+----------+--------------+--------------------------------------------------+
    | master-bin.000002 |      500 |              | mysql,information_schema,performance_schema,test |
    +-------------------+----------+--------------+--------------------------------------------------+
    1 row in set (0.000 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 绑定主从关系
    #在mysql-slave01容器的数据库 执行
    change master to master_host='172.17.0.2',master_user='root',master_password='root',master_log_file='master-bin.000002',master_log_pos=500;
    
    • 1
    • 2
    • 检查
    show slave status \G;
    # 返回结果这两项是Yes表示成功
    # Slave_IO_Running: Yes
    # Slave_SQL_Running: Yes 
    
    • 1
    • 2
    • 3
    • 4

    安装Redis

    • 拉取基础镜像
    docker pull redis:latest
    
    • 1
    • 配置文件
    mkdir  /usr/local/docker/redis/7000
    mkdir  /usr/local/docker/redis/7000
    mkdir  /usr/local/docker/redis/7000
    mkdir  /usr/local/docker/redis/7000
    mkdir  /usr/local/docker/redis/7000
    
    cat << EOF >7000/redis.conf 
    port 7000
    appendonly yes
    bind 0.0.0.0
    protected-mode no
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    cluster-announce-ip 192.168.64.129
    cluster-announce-port 7000
    cluster-announce-bus-port 17000
    EOF
    
    cat << EOF >7001/redis.conf 
    port 7001
    appendonly yes
    bind 0.0.0.0
    protected-mode no
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    cluster-announce-ip 192.168.64.129
    cluster-announce-port 7001
    cluster-announce-bus-port 17001
    EOF
    
    cat << EOF >7002/redis.conf 
    port 7002
    appendonly yes
    bind 0.0.0.0
    protected-mode no
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    cluster-announce-ip 192.168.64.129
    cluster-announce-port 7002
    cluster-announce-bus-port 17002
    EOF
    
    cat << EOF >7003/redis.conf 
    port 7003
    appendonly yes
    bind 0.0.0.0
    protected-mode no
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    cluster-announce-ip 192.168.64.129
    cluster-announce-port 7003
    cluster-announce-bus-port 17003
    EOF
    
    cat << EOF >7004/redis.conf 
    port 7004
    appendonly yes
    bind 0.0.0.0
    protected-mode no
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    cluster-announce-ip 192.168.64.129
    cluster-announce-port 7004
    cluster-announce-bus-port 17004
    EOF
    
    cat << EOF >7005/redis.conf 
    port 7005
    appendonly yes
    bind 0.0.0.0
    protected-mode no
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    cluster-announce-ip 192.168.64.129
    cluster-announce-port 7005
    cluster-announce-bus-port 17005
    EOF
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 创建容器
    docker run -d --name redis7000 -v /usr/local/docker/redis/7000/redis.conf:/redis.conf -p 7000:7000 -p 17000:17000 --restart=always redis redis-server /redis.conf
    docker run -d --name redis7001 -v /usr/local/docker/redis/7001/redis.conf:/redis.conf -p 7001:7001 -p 17001:17001 --restart=always redis redis-server /redis.conf
    docker run -d --name redis7002 -v /usr/local/docker/redis/7002/redis.conf:/redis.conf -p 7002:7002 -p 17002:17002 --restart=always redis redis-server /redis.conf
    docker run -d --name redis7003 -v /usr/local/docker/redis/7003/redis.conf:/redis.conf -p 7003:7003 -p 17003:17003 --restart=always redis redis-server /redis.conf
    docker run -d --name redis7004 -v /usr/local/docker/redis/7004/redis.conf:/redis.conf -p 7004:7004 -p 17004:17004 --restart=always redis redis-server /redis.conf
    docker run -d --name redis7005 -v /usr/local/docker/redis/7005/redis.conf:/redis.conf -p 7005:7005 -p 17005:17005 --restart=always redis redis-server /redis.conf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 创建集群
    docker exec -it redis7000 redis-cli --cluster create 192.168.64.129:7000 192.168.64.129:7001 192.168.64.129:7002 192.168.64.129:7003 192.168.64.129:7004 192.168.64.129:7005 --cluster-replicas 1
    
    • 1
  • 相关阅读:
    追踪这9大关键DTC指标,将帮助你建立势头并释放增长
    【毕业设计】基于大数据的京东消费行为分析与可视化 - python 机器学习
    MySQL系列一:账号管理与引擎
    WMS仓库信息系统仓库信息Service模块
    Threejs实现一个园区
    HTML计时事件(JavaScript)网页电子钟+网页计时器
    k8s自定义Endpoint实现内部pod访问外部应用
    Pytorch中安装 torch_geometric 详细图文操作(全)
    stream final 生成序号
    Redis数据库 ---- 五种数据类型常用命令汇总
  • 原文地址:https://blog.csdn.net/qq_41149775/article/details/126363093