文章目录
安装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 | | | |
+------------------+----------+--------------+------------------+-------------------+
- 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