docker安装软件总结

  • Post author:
  • Post category:其他




安装docker环境

1、在所有虚拟机创建/iids/docker目录,并进入该目录下

#创建目录
sudo mkdir -p /iids/docker 
#进入目录
cd /iids/docker

2、将提供docker安装文件docker-18-ce.tgz复制到该目录下

3、解压该压缩安装包,并进入解压后的安装目录

#解压
sudo tar xzvf docker-18-ce.tgz
#进入安装目录
cd docker
#创建连接
ls -l docker
#复制到指定目录
cp /iids/docker/docker/* /usr/bin/

4、创建系统文件

#创建系统文件
vi /etc/systemd/system/docker.service
#复制如下内容,并保存
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target

5、启动docker

#对系统文件赋权
chmod +x /etc/systemd/system/docker.service
#加载系统文件
systemctl daemon-reload
#设置开机启动
systemctl enable docker.service
#启动docker
systemctl start docker
#验证docker启动成功

6、验证

#输入验证命令
sudo docker ps
#显示一下内容,则安装成功
#CONTAINER ID   IMAGE   COMMAND  CREATED  



安装docker-compose

1、复制文件docker-compose到/usr/local/bin目录下

2、赋权

chmod +x /usr/local/bin/docker-compose

3、验证

docker-compose --version
#显示如下,表示成功
#docker-compose version 1.29.2, build 5becea4c



Docker—-Nacos单机版

#拉取镜像
docker pull nacos/nacos-server:1.4.2
#创建宿主机挂载目录
mkdir /iids/nacos/logs

创建mysql数据库

nacos

,并执行sql脚本

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info   */
/******************************************/
CREATE TABLE `config_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(255) DEFAULT NULL,
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256) DEFAULT NULL,
  `c_use` varchar(64) DEFAULT NULL,
  `effect` varchar(64) DEFAULT NULL,
  `type` varchar(64) DEFAULT NULL,
  `c_schema` text,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(255) NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  `content` longtext NOT NULL COMMENT '内容',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_tags_relation   */
/******************************************/
CREATE TABLE `config_tags_relation` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `nid` bigint(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`nid`),
  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = group_capacity   */
/******************************************/
CREATE TABLE `group_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(64) unsigned NOT NULL,
  `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `data_id` varchar(255) NOT NULL,
  `group_id` varchar(128) NOT NULL,
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL,
  `md5` varchar(32) DEFAULT NULL,
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  `src_user` text,
  `src_ip` varchar(20) DEFAULT NULL,
  `op_type` char(10) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`nid`),
  KEY `idx_gmt_create` (`gmt_create`),
  KEY `idx_gmt_modified` (`gmt_modified`),
  KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = tenant_capacity   */
/******************************************/
CREATE TABLE `tenant_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';


CREATE TABLE `tenant_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` varchar(128) NOT NULL COMMENT 'kp',
  `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
  `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
  `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
  `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
  `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';

CREATE TABLE users (
	username varchar(50) NOT NULL PRIMARY KEY,
	password varchar(500) NOT NULL,
	enabled boolean NOT NULL
);

CREATE TABLE roles (
	username varchar(50) NOT NULL,
	role varchar(50) NOT NULL,
	constraint uk_username_role UNIQUE (username,role)
);

CREATE TABLE permissions (
    role varchar(50) NOT NULL,
    resource varchar(512) NOT NULL,
    action varchar(8) NOT NULL,
    constraint uk_role_permission UNIQUE (role,resource,action)
);

INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');


1、单机版启动容器

docker run \
-d \
--name nacos \
--network host \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=localhost \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-v /iids/nacos/logs:/logs \
nacos/nacos-server:1.4.2



Docker—-Nacos集群版

1、创建宿主机挂载目录

mkdir /iids/nacos/logs
mkdir /iids/nacos/env
mkdir /iids/nacos/ini

2、配置hostname

vi /etc/hosts
#添加
IP nacos-1 
IP nacos-2 

3、编写nacos环境变量文件

vi /iids/nacos/env/nacos.env

#配置如下
PREFER_HOST_MODE=hostname
NACOS_SERVERS=nacos1:8848 nacos2:8848
MYSQL_SERVICE_HOST=数据库地址
MYSQL_SERVICE_DB_NAME=数据库名称
MYSQL_SERVICE_PORT=数据库端口
MYSQL_SERVICE_USER=数据库用户名
MYSQL_SERVICE_PASSWORD=数据库密码

4、创建docker-compose文件

vi /iids/nacos/docker-compose.yml

#配置如下
version: "3"
services:
  nacos:
  	#对应hostname配置
    hostname: nacos-1
    pid: "host"
    network_mode: "host"
    container_name: nacos
    image: nacos/nacos-server:2.0.0
    volumes:
      - ./logs:/home/nacos/logs
    env_file:
      - ./env/nacos.env
    restart: always

5.分别在集群所有服务器创建完文件后,启动容器

sudo docker-compose up -d



Docker Compose安装gitlab

#创建挂载目录
mkdir -f /home/gitlab/config
mkdir -f /home/gitlab/logs
mkdir -f /home/gitlab/data

#进入目录
cd /home/gitlab

#编辑docker-compose.yml
version: '3'
services:
  gitlab:
    image: 'twang2218/gitlab-ce-zh:latest'
    container_name: gitlab
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://本机IP:28000' #若有域名可以写域名
        gitlab_rails['gitlab_shell_ssh_port'] = 222
    ports:
      - '28000:28000'
      - '222:22'
    volumes:
      #将相关配置映射到当前目录下的config目录
      - './config:/etc/gitlab'
      #将日志映射到当前目录下的logs目录
      - './logs:/var/log/gitlab'
      #将数据映射到当前目录下的data目录
      - './data:/var/opt/gitlab'

#启动
docker-compose up -d
#查看
docker-compose ps



Docker—-安装SonarQube

docker run --name sonarqube -d \
-p 9002:9000 \
-p 9001:9001 \
--restart=always \
-e SONARQUBE_JDBC_URL="jdbc:postgresql://IP:5432/sonar" \
-e SONARQUBE_JDBC_USERNAME="postgres" \
-e SONARQUBE_JDBC_PASSWORD="123456" \
-v /home/sonarqube/conf:/opt/sonarqube/conf \
-v /home/sonarqube/data:/opt/sonarqube/data \
-v /home/sonarqube/logs:/opt/sonarqube/logs \
-v /home/sonarqube/extensions:/opt/sonarqube/extensions \
sonarqube:latest



Docker—–安装mysql镜像并配置远程连接

1.拉取镜像

docker pull mysql:5.7

2.创建外部挂载

mkdir -p /iids/mysql

3.运行镜像并将数据挂在本地

docker run \
-d \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root  \
-v /iids/mysql:/var/lib/mysql  \
--name mysql  \
mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci



Docker—Mysql高可用集群


1、主从复制原理


在这里插入图片描述

1.主库db的更新事件(update、insert、delete)被写到binlog

2.主库创建一个binlog dump thread,把binlog的内容发送到从库

3.从库启动并发起连接,连接到主库

4.从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log

5.从库启动之后,创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的6.更新事件,将更新内容写入到slave的db


2、搭建步骤

2.1 搭建主库

#创建目录
mkdir -p /home/docker/mysql/conf
mkdir -p /home/docker/mysql/data
chmod 777 * -R /home/docker/mysql/conf
chmod 777 * -R /home/docker/mysql/data

#创建配置文件
vim /home/docker/mysql/conf/my.cnf
 
#输入一下内容
[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=119 #服务id,取本机IP最后三位
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

#启动容器
docker run -d \
-p 3306:3306 \
-v /home/docker/mysql/data:/var/lib/mysql \
-v /home/docker/mysql/conf:/etc/mysql/ \
-e MYSQL_ROOT_PASSWORD=root \
--name mysql-master \
percona:5.7.23
#进入mysql容器内部
docker exec -it mysql-master bash  
#登陆mysql
mysql -u root -p

#设置运行远程连接root用户
grant all PRIVILEGES ON *.* TO 'root'@'%'  WITH GRANT OPTION ; 
#刷新操作
FLUSH PRIVILEGES; 
#查看root用户密码加密策略
use mysql; 
select user,plugin from user where user='root';  
#修改密码加密策略
ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; 
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
#刷新操作
FLUSH PRIVILEGES;

#创建同步账户与授权
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
grant all privileges on *.* to 'salve'@'%' identified by "123456" WITH GRANT OPTION;
flush privileges;

#查看master节点信息
show master status;
#此信息在salve节点配置需要
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      852 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

  1. 2 搭建从库
#创建目录
mkdir -p /iids/mysql/conf
mkdir -p /iids/mysql/data
chmod 777 * -R /iids/mysql/conf
chmod 777 * -R /iids/mysql/data

#创建配置文件
vi /iids/mysql/conf/my.cnf
#输入如下内容
[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=247 #服务id,取本机IP最后三位
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

#启动容器
docker run -d \
-p 3306:3306 \
-v /iids/mysql/data:/var/lib/mysql \
-v /iids/mysql/conf:/etc/mysql/ \
-e MYSQL_ROOT_PASSWORD=root \
--name mysql-salve \
percona:5.7.23

#进入mysql容器内部
docker exec -it mysql-salve bash  
#登陆mysql
mysql -u root -p

#设置运行远程连接root用户
grant all PRIVILEGES ON *.* TO 'root'@'%'  WITH GRANT OPTION; 
#刷新操作
FLUSH PRIVILEGES; 
#查看root用户密码加密策略
use mysql; 
select user,plugin from user where user='root'; 
#修改密码加密策略
ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; 
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
#刷新操作
FLUSH PRIVILEGES;

#设置master相关信息 
CHANGE MASTER TO master_host='172.18.39.166', master_user='salve', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=4735;
#启动同步
start slave; 
#查看master状态 
show slave status \G;
#如下表示从库搭建成功
*************************** 1. row ***************************
               Slave_IO_State: Connecting to master
                  Master_Host: 172.17.88.22
                  Master_User: salve
                  Master_Port: 36000
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 1868
               Relay_Log_File: f4c2a3b7e421-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: YES   #YES 表示同步IO成功
            Slave_SQL_Running: Yes   #YES 表示读取SQL成功


3. 互为主从配置

3.1 从库配置

#进入mysql容器内部
docker exec -it mysql-salve bash  
#登陆mysql
mysql -u root -p

#创建同步账户与授权
create user 'master'@'%' identified by '123456';
grant all privileges on *.* to 'master'@'%' identified by "123456" WITH GRANT OPTION;
flush privileges;

#查看master节点信息
show master status;
#此信息在salve节点配置需要
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      852 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

3.2 主库配置

#进入mysql容器内部
docker exec -it mysql-master bash  
#登陆mysql
mysql -u root -p

#设置master相关信息 
CHANGE MASTER TO master_host='172.18.39.167', master_user='master', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=1892;
#启动同步
start slave; 
#查看master状态 
show slave status \G;

#如下表示主库配置成功
*************************** 1. row ***************************
               Slave_IO_State: Connecting to master
                  Master_Host: 172.17.88.22
                  Master_User: salve
                  Master_Port: 36000
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 1868
               Relay_Log_File: f4c2a3b7e421-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: YES   #YES 表示同步IO成功
            Slave_SQL_Running: Yes   #YES 表示读取SQL成功



Docker—Haproxy负载mysql集群

1、创建宿主机

挂载

目录

mkdir /iids/haproxy

2、创建haproxy配置文件

vi haproxy.cfg
#配置如下
global
    #工作目录
    chroot /usr/local/etc/haproxy
    #日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info
    log 127.0.0.1 local5 info
    #守护进程运行
    daemon
defaults
    mode                    tcp            #haproxy运行模式
    log                     global
    option                  dontlognull
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 600           #最大连接数

########统计页面配置########  
listen admin_status  
    mode http
    bind :6677                            #找一个比较特殊的端口
    stats enable
    stats hide-version                    #隐藏haproxy版本号
    stats uri     /admin     #一会用于打开状态页的uri
    stats realm   Haproxy\ Statistics     #输入账户密码时的提示文字
    stats auth    admin:admin             #用户名:密码
    stats admin if TRUE                   #开启状态页的管理功能
#数据库负载均衡
listen  proxy-mysql
    #访问的IP和端口
    bind    0.0.0.0:3306
    #网络协议
    mode    tcp
    #负载均衡算法(轮询算法)
    #轮询算法:roundrobin
    #权重算法:static-rr
    #最少连接算法:leastconn
    #请求源IP算法:source
    balance roundrobin
    #日志格式
    option  tcplog
    #在MySQL中创建一个没有权限的haproxy用户,密码为空。
    option mysql-check user haproxy
    server mysql_master 172.18.39.166:3306 check weight 1 maxconn 2000
    server mysql_salve 172.18.39.167:3306 check weight 1 maxconn 2000
    #使用keepalive检测死链
    option tcpka

3、启动容器

docker run -it -d  \
-v /iids/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg \
--name haproxy \
--privileged \
--net=host \
haproxy:2.1

4、创建mysql检测用户

docker exec -it pn1 mysql -u root -p 123456
use mysql
create user 'haproxy'@'%' identified by '';
flush privileges;

如果创建失败,可能用户存在,则执行删除用户

drop user 'haproxy'@'%'

5、

docker

重启后,pxc集群无法启动

由于pxc集群要求强一致性,导致docker重启后,集群节点无法启动。需要修改持久卷中的集群信息设置配置,才能启动。

操作持久卷命令

sudo docker volume ls  【查看已有的数据卷】
sudo docker volume create pnv1 【创建一个叫做pnv1的数据卷】
sudo docker volume rm 数据卷名字 【删除某个数据卷】、
sudo docker volume inspect pnv1  【查看某个数据卷详情】

修改持久卷中的配置文件

#1.依次找出数据卷映射目录,修改参数
sudo docker inspect v1
[
    {
        "Driver": "local",
        "Labels": {},
        #持久卷路径
        "Mountpoint": "/var/lib/docker/volumes/v1/_data", 
        "Name": "v1",
        "Options": {},
        "Scope": "local"
    }
]
#2.修改配置文件
cd到目录下
vi grastate.dat 
safe_to_bootstrap设置成1
#3.启动节点
docker start pxc节点

检查代理详情

登陆地址: 从节点IP:8888/admin

账号:admin

密码:admin



Docker—RabbitMQ集群部署方案


一、集群方案简介

1、普通模式

普通模式:默认模式,以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。当rabbit01节点故障后,rabbit02节点无法取到rabbit01节点中还未消费的消息实体。如果做了消息持久化,那么得等rabbit01节点恢复,然后才可被消费;如果没有持久化的话,就会产生消息丢失的现象。

2、镜像模式

镜像模式: 把需要的队列做成镜像队列,存在与多个节点属于RabbitMQ的HA方案。该模式解决了普通模式中的问题,其实质和普通模式不同之处在于,消息实体会主动在镜像节点间同步,而不是在客户端取数据时临时拉取。该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉。所以在对可靠性要求较高的场合中适用。


二、普通模式


1、部署方案介绍


在这里插入图片描述

使用haproxy作为反向代理服务器,对MQ服务进行负载均衡处理,轮训转发请求到各MQ服务

2、部署流程

(1)准备配置文件haproxy.cfg

global
    log 127.0.0.1 local0 info  # 日志存储到127.0.0.1,以local0输入info级别
    maxconn 4096 # 最大连接数,要考虑到ulimit -n的大小限制
    daemon
    nbproc 2 # 进程数
defaults
    log global
    mode tcp # 使用tcp4层代理模式
    option tcplog
    option dontlognull
    retries 3
    # 在使用基于cookie定向时,一旦后端某一server宕机时,会将会话重新定向至某一上游服务器,必须使用的选项
    option redispatch
    maxconn 4096
    timeout connect 5s
    timeout client 60s #客户端空闲超时时间
    timeout server 15s #服务端超时时间

listen rabbitmq_cluster
    bind 0.0.0.0:5672
    mode tcp
    balance roundrobin #采用轮询机制,还可以是其他的负载均衡方式
        #rabbitmq集群节点配置,inter每隔3秒对MQ集群做健康检查,
    server rabbit1 IP:5672 check inter 3000 rise 2 fall 2
    server rabbit2 IP:5672 check inter 3000 rise 2 fall 2
#配置haproxy web监控,查看统计信息
listen stats
    bind 0.0.0.0:8999 #这里得配置内网IP,然后用外网IP访问即可
    mode http
    option httplog
    stats enable
    #设置haproxy监控地址为http://39.101.209.123:8999/rabbitmq-stats
    stats uri /
    stats refresh 3s
listen rabbitmq_admin
    bind 0.0.0.0:15672
    mode tcp
    balance roundrobin
    server rabbit1 IP:15672 check inter 3000 rise 2 fall 2
    server rabbit2 IP:15672 check inter 3000 rise 2 fall 2

(2)开通外部端口

开通 5672,15672,8999三个端口

(3) 启动daocker容器

docker run -d \
--network host \
--restart=always \
--name haproxy \
-v /home/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro \
haproxy:2.0

(4)验证

访问http://IP:8999/ 可查看监控各服务状态

访问 http://IP:15672/ 可负责到rabbitmq界面


三、镜像模式

1、部署方案介绍

在这里插入图片描述

2、部署流程

(1)准备工作

  • 准备三台机器,一主两从
序号 IP 说明
1 172.17.88.22 master
2 172.17.88.19 salve
3 172.17.88.18 salve

修改hosts文件

vim /etc/hosts
# 添加IP
172.17.88.22 rabbit-node1
172.17.88.19 rabbit-node2
172.17.88.18 rabbit-node3

确保三台机器25672、5672、4369开通端口,15672界面端口任意服务器开通一台

(2)部署流程

master执行:

sudo docker run -d --hostname rabbit-node1 --network host --restart=always --name rabbit-node -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management
# 进入容器执行
docker exec -it rabbit-node bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit

slave执行

docker exec -it rabbit-node bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit-node1
rabbitmqctl start_app
exit

任意节点设置镜像复制

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'


springboot连接rabbitmq

spring.rabbitmq.addresses=172.17.88.22:5672,172.17.88.19:5672,172.17.88.18:5672



Dockr—-安装redis单机版

docker pull redis:alpine

1、下载配置文件

http://download.redis.io/redis-stable/redis.conf

2、创建

mkdir -p /iids/redis
mkdir -p /iids/redis/data
vi /iids/redis/redis.conf

3、主要修改redis.conf中的几个参数

appendonly yes 开启AOF持久化
protected-mode no 关闭保护
appendfilename “appendonly.aof” 持久化文件名称
#bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问


启动镜像

docker run \
-d \
-p 6379:6379 \
--name redis:alpine \
--restart=always \
-v /iids/redis/redis.conf:/etc/redis/redis.conf \
-v /iids/redis/data:/data  \
redis:alpine \
redis-server /etc/redis/redis.conf --appendonly yes
-p 6379:6379 把容器内的6379端口映射到宿主机6379端口
--name redis 容器命名
-v /d/redis/redis.conf:/etc/redis/redis.conf  把宿主机配置好的redis.conf放到容器内的这个位置中
-v /redis/data:/data 把redis持久化的数据在宿主机内显示,做数据备份
-d redis redis-server /etc/redis/redis.conf 这个是关键配置,让redis不是无配置启动,而是按照这个redis.conf的配置启动
--appendonly yes redis启动后数据持久化



docker–部署redis sentinel集群


集群视图:


在这里插入图片描述

哨兵模式主从自动切换流程:

三台机器,分别部署master节点、salve1节点、salve2节点,哨兵节点则分别部署在三个节点上,同时监控master节点状态,当三个哨兵节点中有两个节点监测不到master节点,即认为master节点宕机,对两个salve节点进行选举,提升其中一个salve节点为master节点。之后原master重启后会降为salve节点。


一、前期准备

1、所有服务器创建目录

sudo mkdir -p /iids/redis

2、将redis镜像文件redis_6.0.tar.gz上传到redis目录中,并导入镜像

#导入镜像
gunzip -c redis_6.0.tar.gz | docker load


二、创建主节点

注意:一下操作在207节点服务器进行

1、创建宿主机挂载目录

sudo mkdir -p /iids/redis/db/log
sudo mkdir -p /iids/redis/db/data
#授权
chmod 777 /iids/redis/db/log
chmod 777 /iids/redis/db/data

2、创建配置文件

#创建哨兵配置文件
cat > /iids/redis/db/redis.conf << EOF 
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile "/var/log/redis.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
oom-score-adj no
oom-score-adj-values 0 200 800
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes
EOF

3、执行启动命令

sudo docker run \
-d \
--network host \
--restart=always \
--name redis-master \
--privileged=true \
-v /iids/redis/db/redis.conf:/etc/redis/redis.conf \
-v /iids/redis/db/data:/data  \
-v /iids/redis/db/log:/var/log \
redis:6.0 \
redis-server /etc/redis/redis.conf


三、创建从节点

注意:下列操作在209、210节点服务器进行操作

1、创建宿主机挂载目录

#创建
sudo mkdir -p /iids/redis/db/log
sudo mkdir -p /iids/redis/db/data
#授权
chmod 777 /iids/redis/db/log
chmod 777 /iids/redis/db/data

2、创建配置文件

cat > /iids/redis/db/redis.conf << EOF
#注意修改成主节点IP
replicaof 71.19.128.207 6379
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile "/var/log/redis.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
oom-score-adj no
oom-score-adj-values 0 200 800
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes
EOF

3、执行启动命令

sudo docker run \
-d \
--network host \
--restart=always \
--name redis-slave \
--privileged=true \
-v /iids/redis/db/redis.conf:/etc/redis/redis.conf \
-v /iids/redis/db/data:/data  \
-v /iids/redis/db/log:/var/log \
redis:6.0 \
redis-server /etc/redis/redis.conf


四、安装哨兵节点

注意:下列操作分别在207、209、210三个节点服务器进行

1、创建配置文件

#创建宿主机挂在目录
sudo mkdir -p /iids/redis/sentinel/log
sudo mkdir -p /iids/redis/sentinel/data
#授权
chmod 777 /iids/redis/sentinel/log
chmod 777 /iids/redis/sentinel/data

#创建哨兵配置文件
cat > /iids/redis/sentinel/sentinel.conf << EOF
port 26379
protected-mode no
daemonize yes
logfile "/var/log/sentinel.log"
#注意修改为本机内网IP
sentinel announce-ip 172.18.39.148
sentinel announce-port 26379
#注意修改为主节点IP
sentinel monitor mymaster 172.18.39.148 6379 2
sentinel down-after-milliseconds mymaster 5000
EOF

2、启动哨兵

#启动哨兵容器
sudo docker run -it \
--name redis-sentinel \
--net=host \
--restart=always \
-v /iids/redis/sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf \
-v /iids/redis/sentinel/log:/var/log \
-d redis:6.0 /bin/bash
#进入容器
sudo docker exec -it redis-sentinel bash
#启动哨兵
redis-sentinel /usr/local/etc/redis/sentinel.conf
#退出容器
exit



Docker–部署redis cluster集群


一、准备相关配置文件

1、下载redis配置文件

sudo wget http://download.redis.io/redis-stable/redis.confwget http://download.redis.io/redis-stable/redis.conf

2、修改redis.conf配置文件内容

# bind 127.0.0.1
protected-mode no
port 6379
appendonly yes
aof-use-rdb-preamble yes
cluster-enabled yes
cluster-node-timeout 15000
#宿主机IP
cluster-announce-ip 127.0.0.1 
cluster-announce-port 6379
cluster-announce-bus-port 16379

3、创建docker容器挂载目录

sudo mkdir -p /home/docker/redis/redis-mastar \
sudo mkdir -p /home/docker/redis/redis-mastar/data \
sudo mkdir -p /home/docker/redis/redis-salve \
sudo mkdir -p /home/docker/redis/redis-salve/data \

4、复制到容器挂载目录

注:修改redis启动端口与集群总线端口

sudo cp redis.conf /home/docker/redis/redis-mastar/
sudo cp redis.conf /home/docker/redis/redis-salve/


二、启动容器

sudo docker run \
-d \
-p 6379:6379 \
-p 16379:16379 \
--network host \
--name redis-master \
-v /home/docker/redis/redis-mastar/redis.conf:/etc/redis/redis.conf \
-v /home/docker/redis/redis-mastar/data:/data  \
redis:6.0 \
redis-server /etc/redis/redis.conf

sudo docker run \
-d \
-p 6378:6378 \
-p 16378:16378 \
--network host \
--name redis-salve \
-v /home/docker/redis/redis-salve/redis.conf:/etc/redis/redis.conf \
-v /home/docker/redis/redis-salve/data:/data  \
redis:6.0 \
redis-server /etc/redis/redis.conf


三、初始化集群

1、进入任意redis容器

sudo docker exec -it redis-master /bin/sh

2、初始化集群

(1)自动分配

redis cluster 随机分配主从节点

redis-cli --cluster create IP:6379 IP:6378 IP:6379 IP:6378 IP:6379 IP:6378 --cluster-replicas 1

(2)手动分配

先创建主节点

redis-cli --cluster create IP:6379 IP:6379 IP:6379 --cluster-replicas 0

查看master-id

redis-cli -c
cluster nodes
705090d61b6d9f12e33d32190aec16585f56d5da IP:6379@16379 myself,master - 0 1595905454000 7 connected 0-5460
74d7f803ce18c1d986d1c3a7c6cca363f7bb2270 IP:6379@16379 master - 0 1595905455589 2 connected 5461-10922
40a99285bff9bff12a454f702935507c29fcb490 IP:6379@16379 master - 0 1595905454000 4 connected 10923-16383

将salve节点添加到指定master节点

redis-cli --cluster add-node IP:6378 IP:6379 --cluster-slave --cluster-master-id 705090d61b6d9f12e33d32190aec16585f56d5da

redis-cli --cluster add-node IP:6378 IP:6379 --cluster-slave --cluster-master-id 74d7f803ce18c1d986d1c3a7c6cca363f7bb2270

redis-cli --cluster add-node IP:6378 IP:6379 --cluster-slave --cluster-master-id 40a99285bff9bff12a454f702935507c29fcb490


四、验证集群

1、进入redis命令行

redis-cli -c

2、查看集群状态

cluster nodes

显示如下,说明redis集群搭建成功

524717d3f80d315329747353c526a3f4c7c06f1e 123.56.18.37:6379@16379 myself,slave 74d7f803ce18c1d986d1c3a7c6cca363f7bb2270 0 1595905453000 2 connected
705090d61b6d9f12e33d32190aec16585f56d5da 47.95.228.247:6379@16379 master - 0 1595905454000 7 connected 0-5460
9f3b2e1dd1de12e79607679fb66ffa52168c48b5 47.95.238.119:6378@16378 slave 40a99285bff9bff12a454f702935507c29fcb490 0 1595905454000 4 connected
74d7f803ce18c1d986d1c3a7c6cca363f7bb2270 47.95.228.247:6378@16378 master - 0 1595905455589 2 connected 5461-10922
27730588ee369f8bba4413d62c4a2d925ade27f7 47.95.238.119:6379@16379 slave 705090d61b6d9f12e33d32190aec16585f56d5da 0 1595905454586 7 connected
40a99285bff9bff12a454f702935507c29fcb490 123.56.18.37:6378@16378 master - 0 15959054

270 IP:6379@16379 master – 0 1595905455589 2 connected 5461-10922

40a99285bff9bff12a454f702935507c29fcb490 IP:6379@16379 master – 0 1595905454000 4 connected 10923-16383


将salve节点添加到指定master节点

~~~shell
redis-cli --cluster add-node IP:6378 IP:6379 --cluster-slave --cluster-master-id 705090d61b6d9f12e33d32190aec16585f56d5da

redis-cli --cluster add-node IP:6378 IP:6379 --cluster-slave --cluster-master-id 74d7f803ce18c1d986d1c3a7c6cca363f7bb2270

redis-cli --cluster add-node IP:6378 IP:6379 --cluster-slave --cluster-master-id 40a99285bff9bff12a454f702935507c29fcb490



版权声明:本文为zkzsq原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。