泸州内网穿透+主从复制搭建
背景:外网服务器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;
效果:可以通过外网映射端口访问内网数据库并实现同步
