BC-Linux系统 Docker中部署Mysql5.7双主 +Nginx反向代理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

系统环境为BC-LINUX8.6

一、现实目标?

实现2台数据库配置双主,Nginx配置反向代理实现Mysql双活。

二、部署步骤

1.Docker安装

代码如下(示例):

参考移动云网站:https://mirrors.cmecloud.cn/

在这里插入图片描述

2.拉取Mysql镜像

代码如下(示例):

拉取镜像:
docker pull mysql:5.7

3.配置双主&启动Docker

3.1.新建数据库映射文件和目录

代码如下(示例):

目录新建
mkdir -p /data/mysql /data/mysql/conf.d /data/mysql/data/

文件新建;
touch /data/mysql/my.cnf

3.2.修改配my.cnf文件

服务器A:

**服务器A:**
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
max_connections=1000
wait_timeout=31536000
interactive_timeout=31536000

server-id = 12        ##这个参数指定了 MySQL 服务器的唯一标识符。在主从复制(replication)设置中,每个服务器必须有唯一的 ID
log-bin = mysql-bin  ##启用二进制日志(binary logging)并设置二进制日志文件的名称前缀为 mysql-bin。二进制日志用于记录数据库的变更操作,
binlog-ignore-db = mysql,information_schema  ##排除了系统数据库 mysql 和 information_schema,它们的变更通常不需要被复制到从服器
sync_binlog = 1  ##控制二进制日志的刷新频率。这里设置为 1,表示每次事务提交时都会将日志同步写入磁盘,确保事务的持久性。
binlog_checksum = none  ##指定二进制日志的校验方式。这里设置为 none,表示不启用校验和功能
binlog_format = mixed   ##设置二进制日志的格式。mixed 表示二进制日志的格式可以是 statement、row 或 mixed,具体格式由具体的语句决定
auto-increment-increment = 2  ## 设置自增长列的增量值。这里设置为 2,控制主键自增的步长,几台服务器就设置几
auto-increment-offset = 2   ## 设置自增长列的起始值偏移量。这里设置为 2,这个是第2台,那么为2,下一台则为3。
slave-skip-errors = all ##在从服务器(slave)复制过程中遇到错误时的处理方式all 表示当出现任何错误时从服务器都会跳过并继续执行后续的操作。
replicate-do-db=mas_gxhos_admin  ##这里分别指定了 mas_gxhos_admin 和 mas_gxhos_sms 两个数据库,意味着主服务器上对这两个数据库的变更会被复制到从服务器。
replicate-do-db=mas_gxhos_sms

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

在这里插入图片描述

服务器B:

**服务器B:**
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
max_connections=1000
wait_timeout=31536000
interactive_timeout=31536000

server-id = 11        
log-bin = mysql-bin  
binlog-ignore-db = mysql,information_schema
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2    几台服务器就设置几
auto-increment-offset = 1  设置自增长列的起始值偏移量。这里设置为 1(这个是第1台,那么为1,下一台则为2)。
slave-skip-errors = all
replicate-do-db=mas_gxhos_admin
replicate-do-db=mas_gxhos_sms

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


在这里插入图片描述


3.3.启动2台mysql容器

A服务器:

docker run -di -v /data/mysql/data/:/var/lib/mysql -v /data/mysql/conf.d:/etc/mysql/conf.d -v /data/mysql/my.cnf:/etc/mysql/my.cnf -p 3306:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=您的密码 mysql:5.7

在这里插入图片描述
B服务器:

docker run -di -v /data/mysql/data/:/var/lib/mysql -v /data/mysql/conf.d:/etc/mysql/conf.d -v /data/mysql/my.cnf:/etc/mysql/my.cnf -p 3306:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=您的密码 mysql:5.7

3.4.二台数据库分别建立复制帐号,并分配复制权限

代码如下(示例):

create user 'repl'@'%' identified with mysql_native_password by '#refpL123@hQ';
grant replication slave,replication client on *.* to 'refpl'@'%';
flush privileges;

3.5.分别设置同步,开启同步

代码如下(示例):

show master status;

得到其log_file,log_pos用于下一步参数填写


从服务器配置:复制来自主服务器的数据
CHANGE MASTER TO
  MASTER_HOST = IP,     -- 主服务器的主机名或IP地址
  MASTER_USER = 'repl',            -- 连接到主服务器的复制用户名
  MASTER_PASSWORD = 'your_password',-- 连接到主服务器的复制用户密码
  MASTER_PORT = 3306,              -- 主服务器的端口号
  MASTER_LOG_FILE = 'mysql-bin.000007',  -- 主服务器当前的二进制日志文件名
  MASTER_LOG_POS = 数字;            -- 主服务器当前的二进制日志文件的位置

配置A从,B主
A服务器操作:
change master to master_host='192.168.0.8(B服器IP)',master_user='repl',master_password='#refpL123@hQ',master_log_file='mysql-bin.000001(B)',master_log_pos=150(B);

start slave;

#查看同步状态是否正确
show slave status \G;  

配置A主,B从
B服务器操作:
change master to master_host='192.168.0.7(A服器IP)',master_user='repl',master_password='#refpL123@hQ',master_log_file='mysql-bin.000001(A)',master_log_pos=150(A);

start slave;
#查看同步状态是否正确
show slave status \G; 

2台数据库:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

在这里插入图片描述


4.双活配置

4.1.Nginx安装

代码如下(示例):

vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

安装nginx
yum install nginx -y

# 开启 
systemctl start nginx
 
#停止
systemctl stop nginx
 
#重载nginx
systemctl reload nginx


详细介绍见官网
在这里插入图片描述

4.2.配置Nginx

代码如下(示例):

vim /etc/nginx/nginx.conf
[root@test1 ~]#  cat /etc/nginx/nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

stream {

        log_format basic '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time';
        access_log /var/log/nginx/stream-access.log basic buffer=32k;
        include /etc/nginx/conf.d/*.stream;

        upstream mysql {
                #hash $remote_addr consistent;
                server 192.168.0.8:3306;
                server 192.168.0.7:3306 backup;
        }

        server {
                listen 13306;
                proxy_connect_timeout 1s;
                proxy_timeout 3s;
                proxy_pass mysql;
        }
}

4.3.双活测试

直接连接nginx服务器暴露的 13306 端口


  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值