Press "Enter" to skip to content

泸州内网穿透+主从复制搭建

泸州内网穿透+主从复制搭建

背景:外网服务器device-lz.brew.langjiu.cn:13336需要同步3台内网服务器的数据[10.100.14.52:13306,10.100.14.53:13306, 10.100.14.55:13306 ],内网服务器为主服务器,外网服务器为从服务器,这里需用到内网穿透和多主一从数据库同步技术

外网: device-lz.brew.langjiu.cn:13336
内网:10.100.14.52:13306   => 211车间
      10.100.14.53:13306  => 204车间
      10.100.14.55:13306  => 203车间

实现思路:在外网服务器上通过开启三个端口分别访问到内网1,内网2,内网3的数据库,再通过这三个端口实现多主一从数据复制

例如:

device-lz.brew.langjiu.cn:23306 => 10.100.14.52:13306
device-lz.brew.langjiu.cn:23307 => 10.100.14.53:13306
device-lz.brew.langjiu.cn:23308 => 10.100.14.55:13306

实现步骤:

1.分别在外网内网的服务器上安装proxy

分别登录到泸州厂区服务器和三台内网mini服务器上执行

curl -L https://mirrors.host900.com/https://github.com/snail007/goproxy/blob/master/install_auto.sh | bash 

2.分别在外网内网的服务器上安装screen

分别登录到泸州厂区服务器和三台内网mini服务器上执行

centos: yum -y install screen
ubuntu: apt-get install screen

3.在外网服务器【192.168.77.5】上生成密钥

cd /data/proxy
proxy keygen -C proxy

4.在外网服务器上进入含有密钥的路径下新建窗口并执行命令,注意,执行此命令的路径需要有上一步生成的密钥【在外网服务器上创建服务端和桥端】

映射1

cd /data/proxy
screen -S proxy_server1
proxy server -r ":23306@:13306" -P "127.0.0.1:33306" -C ./proxy.crt -K ./proxy.key
screen -S proxy_bridge1
proxy bridge -p ":33306" -C ./proxy.crt -K proxy.key

ctrl + a + d 挂到后台

映射2

cd /data/proxy
screen -S proxy_server2
proxy server -r ":23307@:13306" -P "127.0.0.1:33307" -C ./proxy.crt -K ./proxy.key
screen -S proxy_bridge2
proxy bridge -p ":33307" -C ./proxy.crt -K proxy.key

ctrl + a + d 挂到后台

映射3

cd /data/proxy
screen -S proxy_server3
proxy server -r ":23308@:13306" -P "127.0.0.1:33308" -C ./proxy.crt -K ./proxy.key
screen -S proxy_bridge3
proxy bridge -p ":33308" -C ./proxy.crt -K proxy.key

ctrl + a + d 挂到后台

注意:23306,23307和23308是外网服务器访问内网服务器的端口,我们可以通过外网的23306,23307和23308分半访问这三台内网mini服务器的13306端口,外网服务器的33306,33307和33308是桥,可以让内网服务器通过该端口建立与外网服务器的连接

5.将在外网服务器[192.168.77.5]下生成的密钥分别上传至内网服务器上

// 同样,我们可以在内网服务器上创建相同的目录
cd /data/proxy
// 如果没有ssh指令,可以用其他方式上传

6.进入含有密钥路径下的窗口并执行指令,此命令的执行路径需要包含密钥

# 10.100.14.52
cd /data_new/nbi/proxy
screen -S mysql_neiwang
proxy client -P "192.168.77.5:33306" -C ./proxy.crt -K ./proxy.key
【device-lz.brew.langjiu.cn】
【device-lz.brew.langjiu.cn:33506】
# 10.100.14.53
cd /data/nbi/proxy
screen -S mysql_neiwang
proxy client -P "192.168.77.5:33307" -C ./proxy.crt -K ./proxy.key
proxy client -P "device-lz.brew.langjiu.cn:33307" -C ./proxy.crt -K ./proxy.key
【device-lz.brew.langjiu.cn:33307】
# 10.100.14.55
cd /data/nbi/proxy
screen -S mysql_neiwang
proxy client -P "192.168.77.5:33308" -C ./proxy.crt -K ./proxy.key
【device-lz.brew.langjiu.cn:43308】
ctrl + a + d //挂到后台

7.在内网服务器上搭建好的mysql,开启13306端口后,可以通过外网的23306,23307和23308分别连接这三台内网服务器

主机: 192.168.77.5【device-lz.brew.langjiu.cn】
端口:23306/23307/23308
用户名:root
密码:xxx //docker-compose.yml文件中指定的密码

主从复制

主1:10.100.14.52
主2:10.100.14.53
主3:10.100.14.55
从: 192.168.77.5

1.修改主1的数据库配置

cd /data_new/nbi/brewing_server/mysql/conf.d
vim my.cnf
[mysqld]
log-bin=master_1
server-id = 1
log-bin-index=master_1.index
expire_logs_days=7

2.修改主2的数据库配置

cd /data/nbi/brewing_server/mysql/conf.d
vim my.cnf
[mysqld]
log-bin=master_2
server-id=2
log-bin-index=master_2.index
expire_logs_days=7

3.修改主3的数据库配置

cd /data/nbi/brewing_server/mysql/conf.d
vim my.cnf
[mysqld]
log-bin=master_3
server-id=3
log-bin-index=master_3.index
expire_logs_days=7

4.分别进入三台主mysql查看master-log-file和position

docker exec -it mysql_b /bin/bash
mysql -uroot -p
xxx 【docker-compose.yml中指定的密码】
show master status;

5.新增同步用户【从服务器可以通过该用户同步主服务器的bin-log】

# 10.100.14.52
GRANT REPLICATION SLAVE ON *.* to 'master001'@'%' identified by 'lican520';
# 10.100.14.53
GRANT REPLICATION SLAVE ON *.* to 'master002'@'%' identified by 'lican520';
# 10.100.14.55
GRANT REPLICATION SLAVE ON *.* to 'master003'@'%' identified by 'lican520';

6.修改从服务器配置

cd /data/nbi/mysql/conf.d
vim my.cnf
[mysqld]
server-id=100
relay-log=slave
relay-log-index=slave.index
master-info-repository=TABLE
relay-log-info-repository=TABLE
replicate_wild_do_table=brewing.%

7.登录从服务器

docker exec -it mysql_b /bin/bash
mysql -uroot -p
xxx 【docker-compose.yml中指定的密码】
// 设置同步指令
change master to master_host='192.168.77.5',master_port=23306,master_user='master001',master_password='lican520',master_log_file='master_1.000002',master_log_pos=239777 for channel 'master_1';
[
    change master to master_host='device-lz.brew.langjiu.cn',master_port=43306,master_user='master001',master_password='lican520',master_log_file='master_1.000001',master_log_pos=412489 for channel 'master_1';
]

change master to master_host='192.168.77.5',master_port=23307,master_user='master002',master_password='lican520',master_log_file='master_2.000001',master_log_pos=582231 for channel 'master_2';
[
   change master to master_host='device-lz.brew.langjiu.cn',master_port=43307,master_user='master002',master_password='lican520',master_log_file='master_2.000001',master_log_pos=28342 for channel 'master_2';
]

change master to master_host='192.168.77.5',master_port=23308,master_user='master003',master_password='lican520',master_log_file='master_3.000001',master_log_pos=407784 for channel 'master_3';
[
    change master to master_host='device-lz.brew.langjiu.cn',master_port=23308,master_user='master003',master_password='lican520',master_log_file='master_3.000001',master_log_pos=442 for channel 'master_3';
]

## 可设置多个
start slave;
show slave status\G;
效果:可以通过外网映射端口访问内网数据库并实现同步

1702974810978