123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651 |
- 第一种是keepalived方式
- 第二种是nginx方式
- 一、介绍
- MySQL双主双活是指两台mysql服务器mysql-1、mysql-2都为master主节点服务器,同时又是对方的slave从节点,每个数据库都可作为主数据库使用,并将对数据库操作的数据同步至另外一台mysql服务中。
- 当应用服务开发过程中使用了mysql-1连接信息,在打包发布后,数据库连接信息已经固定,当数据库mysql-1出现异常时,需要人工干预先将应用服务停止-->将应用服务的mysql连接信息改为mysql-2 -->在启动应用服务器,比较繁琐,当应用服务器较多时,一个一个关闭,修改,再重启,将耽误更多时间,应用服务器修复故障时间延长,严重时会造成灾难性的后果。
- 故而引入了keepalived,keepalived通过VIP虚拟IP的漂移实现高可用,在相同集群内发送组播包,master主通过VRRP协议发送组播包,告诉从主的状态。
- 当我们通过keepalived虚拟出一个ip服务 mysql-3,应用服务只需要将mysql配置信息更改为mysql-3的配置信息,mysql-3实际代理的实体服务器为mysql-1或mysql-2。
- 例如:当mysql-3实际代理mysql-1时,mysql-1服务出现故障后,keepalived通过自身机制,自动将mysql-2作为实际代理主服务器,不需要人工干预去修改mysql配置信息,从而实现了高可用。
- 二、准备工作
- 1.两台centos7 linux服务器
- mysql-1:192.168.222.128
- mysql-2:192.168.222.129
- 2.mysql安装包
- 版本:mysql-5.7.36-el7-x86_64.tar.gz
- 下载地址:https://cdn.mysql.com/archives/mysql-5.7/mysql-test-5.7.36-el7-x86_64.tar.gz
- 3.keepalived安装包
- 版本:keepalived-2.2.7.tar.gz
- 下载地址:https://www.keepalived.org/software/keepalived-2.2.7.tar.gz
- 三、安装mysql
- 1.在128、129两台服务器根据《linux安装mysql服务-两种安装方式教程》安装好mysql应用。
- 2.修改128服务器/etc/my.cnf配置文件,没有的话可自行创建,配置如下:
- 两个数据库数据要一致
- 整库备份:/data/mysql-5.7.37/bin/mysqldump -uroot -p -h172.16.66.142 --all-databases > /data/mysql_backup/usky.sql
- 单库备份:/data/mysql-5.7.37/bin/mysqldump -uusky_admin -p'Usky@2024!@#$_' -h172.16.66.142 usky-cloud > /2025-03-21/usky-cloud.sql
- 整库还原:mysql -u root -p < usky.sql
- 单库还原:mysql -u root -p usky-cloud < /2025-03-21/usky-cloud.sql
- 如果不一致备份时需要加参数定位备份时的 LOG_POS
- 例如:
- /data/mysql-5.7.37/bin/mysqldump -uroot -p -h172.16.66.142 --all-databases --master-data=2 > /data/mysql_backup/usky.sql
- 备份文件中会有记录
- [client]
- #客户端连接端口
- port=3306
- #客户端连接sock
- socket=/opt/mysql5.7/log/mysql.socka
- #客户端编码
- default-character-set=utf8
- [mysqld]
- #mysql服务端口
- port=3306
- #安装目录
- basedir=/opt/mysql5.7
- #数据存放目录
- datadir=/opt/mysql5.7/data
- #sock文件地址
- socket=/opt/mysql5.7/log/mysql.sock
- #错误日志存放地址
- log-error=/opt/mysql5.7/log/mysql.log
- #pid文件地址
- pid-file=/opt/mysql5.7/log/mysql.pid
- #下面内容为mysq主备时配置,单mysql部署护理下面配置
- #server-id 多台服务器时,此表示需要唯一
- server-id=1
- #主从同步bin-log日志文件名
- log-bin=mysql-bin
- #主从同步时,需要同步的数据库,多个数据库写多行binlog_do_db配置
- binlog_do_db=test_db
- #主从同步时,不需要同步的数据库,多个数据库写多行binlog_ignore_db配置
- #binlog_ignore_db=mysql
- #binlog_ignore_db=information_schema
- #binlog_ignore_db=sys
- #binlog_ignore_db=performance_schema
- #主从同步方式
- binlog_format=row
- #服务端编码
- character-set-server=utf8
- !includedir /etc/my.cnf.d
- 3.修改129服务器/etc/my.cnf配置文件,只有server-id不同,为2配置如下
- [client]
- #客户端连接端口
- port=3306
- #客户端连接sock
- socket=/opt/mysql5.7/log/mysql.socka
- #客户端编码
- default-character-set=utf8
- [mysqld]
- #mysql服务端口
- port=3306
- #安装目录
- basedir=/opt/mysql5.7
- #数据存放目录
- datadir=/opt/mysql5.7/data
- #sock文件地址
- socket=/opt/mysql5.7/log/mysql.sock
- #错误日志存放地址
- log-error=/opt/mysql5.7/log/mysql.log
- #pid文件地址
- pid-file=/opt/mysql5.7/log/mysql.pid
- #下面内容为mysq主备时配置,单mysql部署护理下面配置
- #server-id 多台服务器时,此表示需要唯一
- server-id=2
- #主从同步bin-log日志文件名
- log-bin=mysql-bin
- #主从同步时,需要同步的数据库,多个数据库写多行binlog_do_db配置
- binlog_do_db=test_db
- #主从同步时,不需要同步的数据库,多个数据库写多行binlog_ignore_db配置
- #binlog_ignore_db=mysql
- #binlog_ignore_db=information_schema
- #binlog_ignore_db=sys
- #binlog_ignore_db=performance_schema
- #主从同步方式
- binlog_format=row
- #服务端编码
- character-set-server=utf8
- !includedir /etc/my.cnf.d
- 5.重启mysql服务
- [root@128 mysql5.7]# systemctl stop mysqld
- [root@128 mysql5.7]# systemctl start mysqld
- 四、mysql数据库双主双从配置
- 1.连接128服务器mysql,并创建主从同步账户slavebak,并查看master状态,记录下file、psition值,配置129mysql从库时使用
- [root@128 ~]# /opt/mysql5.7/bin/mysql -uroot -proot
- mysql: [Warning] Using a password on the command line interface can be insecure.
- ......
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- mysql> grant replication slave on *.* to slavebak@'%' identified by 'slavebak';
- mysql> flush privileges;
- mysql> show master status;
- +------------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +------------------+----------+--------------+------------------+-------------------+
- | mysql-bin.000002 | 1287 | test_db | | |
- +------------------+----------+--------------+------------------+-------------------+
- 1 row in set (0.01 sec)
- mysql>
- 2.连接129服务器,使用slavebak用户远程登录128mysql,测试连接是否正常。
- [root@129 ~]# /opt/mysql5.7/bin/mysql -h192.168.222.128 -uslavebak -pslavebak
- mysql: [Warning] Using a password on the command line interface can be insecure.
- ......
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- mysql> exit;
- [root@129 ~]#
- 3.在129服务器用root连接本服务器mysql,并配置128的主库信息
- [root@129 ~]# /opt/mysql5.7/bin/mysql -uroot -proot
- mysql: [Warning] Using a password on the command line interface can be insecure.
- ......
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- mysql> change master to
- -> master_host='192.168.222.128', #128服务器mysql ip
- -> master_port=3306, #128服务器mysql端口
- -> master_user='slavebak', #128服务器mysql从库同步用户
- -> master_password='slavebak', #128服务器mysql从库同步用户密码
- -> master_log_file='mysql-bin.000002', #前面记录的128服务mysql file值
- -> master_log_pos=1287; #前面记录的128服务mysql psition值
- Query OK, 0 rows affected, 2 warnings (0.02 sec)
- mysql> start slave; #启动从库配置
- 4.查看129从库配置是否成功Slave_IO_Running、Slave_SQL_Running都为yes则成功
- mysql> show slave status;
- mysql> show slave status \G;
- *************************** 1. row ***************************
- ......
- Slave_IO_Running: Yes #此值为yes配置成功
- Slave_SQL_Running: Yes #此值为yes配置i成功
- ......
- 1 row in set (0.01 sec)
- 5.在129服务器mysql创建主从同步账户slavebak,查看master状态,记录下file、psition值
- mysql> grant replication slave on *.* to slavebak@'%' identified by 'slavebak';
- mysql> flush privileges;
- mysql> show master status;
- +------------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +------------------+----------+--------------+------------------+-------------------+
- | mysql-bin.000002 | 848 | test_db | | |
- +------------------+----------+--------------+------------------+-------------------+
- 1 row in set (0.01 sec)
- 6.连接128服务器并使用root用户连接本服务器mysql,配置129的主库信息
- [root@128 ~]# /opt/mysql5.7/bin/mysql -uroot -proot
- mysql: [Warning] Using a password on the command line interface can be insecure.
- ......
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
-
- mysql> change master to
- -> master_host='192.168.222.129', #129服务器mysql ip
- -> master_port=3306, #129服务器mysql端口
- -> master_user='slavebak', #129服务器mysql从库同步用户
- -> master_password='slavebak', #129服务器mysql从库同步用户密码
- -> master_log_file='mysql-bin.000002', #前面记录的129服务mysql file值
- -> master_log_pos=848; #前面记录的129服务mysql psition值
- Query OK, 0 rows affected, 2 warnings (0.02 sec)
-
- mysql> start slave; #启动从库配置
- 7.查看128从库配置是否成功Slave_IO_Running、Slave_SQL_Running都为yes则成功
- mysql> show slave status;
- mysql> show slave status \G;
- *************************** 1. row ***************************
- ......
- Slave_IO_Running: Yes #此值为yes配置成功
- Slave_SQL_Running: Yes #此值为yes配置i成功
- ......
- 1 row in set (0.01 sec)
- 至此,128服务器,129服务器双主双从配置完成
- 五、MySQL双主双从测试
- 1.连接128服务器,使用root用户连接本机mysql,并创建test_db数据库,t_test表,并插入一条数据id=1,name='zhangsan'
- [root@128 ~]# /opt/mysql5.7/bin/mysql -uroot -proot
- mysql: [Warning] Using a password on the command line interface can be insecure.
- ......
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- mysql> create database test_db;
- Query OK, 1 row affected (0.00 sec)
- mysql> use test_db;
- mysql> create table t_test(id int primary key, name varchar(30));
- Query OK, 0 row affected (0.01 sec)
- mysql> insert into t_test values (1, 'zhangsan');
- Query OK, 1 row affected (0.01 sec)
- mysql> select * from t_test;
- +----+----------+
- | id | name |
- +----+----------+
- | 1 | zhangsan |
- +----+----------+
- 1 rows in set (0.00 sec)
- 2.连接129服务器,使用root用户连接mysql,查看test_db数据库、t_test表以及数据是否同步,并插入id=2,name=‘lisi’
- [root@129 ~]# /opt/mysql5.7/bin/mysql -uroot -proot
- mysql: [Warning] Using a password on the command line interface can be insecure.
- ......
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | sys |
- | test_db | #test_db数据库已同步过来
- +--------------------+
- 5 rows in set (0.01 sec)
- mysql> use test_db;
- mysql> show tables;
- +-------------------+
- | Tables_in_test_db |
- +-------------------+
- | t_test | #t_test表已同步过来
- +-------------------+
- 1 row in set (0.01 sec)
- mysql> select * from t_test;
- +----+----------+
- | id | name |
- +----+----------+
- | 1 | zhangsan | #数据已同步过来
- +----+----------+
- 1 rows in set (0.00 sec)
- mysql> insert into t_test values (2, 'lisi');
- Query OK, 1 row affected (0.01 sec)
- 3.在128服务器查看id=2,name="lisi" 是否同步
- [root@128 ~]# /opt/mysql5.7/bin/mysql -uroot -proot
- mysql: [Warning] Using a password on the command line interface can be insecure.
- ......
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- mysql> select * from t_test;
- +----+----------+
- | id | name |
- +----+----------+
- | 1 | zhangsan |
- | 2 | lisi | #lisi数据已同步
- +----+----------+
- 1 rows in set (0.00 sec)
- 至此,数据库双主双从测试完成。
- 六、keepalived安装
- 128、129两台服务器安装步骤相同,配置文件不同,下面有介绍。
- 1.安装相关依赖包,并下载keepalived安装包,解压,配置,编译
- [root@128 ~]# cd /opt
- [root@128 opt]# yum -y install gcc openssl-devel popt-devel psmisc
- [root@128 opt]# wget https://www.keepalived.org/software/keepalived-2.2.7.tar.gz
- [root@128 opt]# tar -zxvf keepalived-2.2.7.tar.gz
- [root@128 opt]# cd keepalived-2.2.7
- [root@128 keepalived-2.2.7]# ./configure --prefix=/opt/keepalived-2.2.7
- [root@128 keepalived-2.2.7]# make && make install
- 2.将文件复制到对应目录下
- [root@128 keepalived-2.2.7]# mkdir /etc/keepalived
- [root@128 keepalived-2.2.7]# cp keepalived/etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf
- [root@128 keepalived-2.2.7]# cp keepalived/etc/init.d/keepalived /etc/init.d/
- [root@128 keepalived-2.2.7]# cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
- [root@128 keepalived-2.2.7]# cp bin/keepalived /usr/sbin/
- 3.新建/etc/keepalived/shutdown.sh文件,内容为:
- #!/bin/bash
- #该脚本是在mysql服务出现异常时,将keepalived应用停止,从而使虚拟vip主机自动连接到另一台mysql上
- killall keepalived
- 4.使用ifconfig命令查看下网卡名称,本机网卡名称为ens33
- 5.修改128服务器/etc/keepalived/keepalived.conf配置文件,内容如下:
- ! Configuration File for keepalived
-
- global_defs {
- notification_email {
- acassen@firewall.loc
- failover@firewall.loc
- sysadmin@firewall.loc
- }
- notification_email_from Alexandre.Cassen@firewall.loc
- smtp_server 192.168.200.1
- smtp_connect_timeout 30
- router_id LVS_MASTER
- vrrp_skip_check_adv_addr
- vrrp_strict
- vrrp_garp_interval 0
- vrrp_gna_interval 0
- }
-
- vrrp_instance VI_1 {
- state MASTER
- #interface为刚才查到的本机网卡名称
- interface ens33
- #同一网段中同一组virtual_router_id值相同。不同组virtual_router_id值唯一。
- #如server-1、server-2为一组,virtual_router_id=51
- #server-3、server-4为一组,则virtual_router_id不能为51
- virtual_router_id 51
- #字数越大,优先级越高,master必须大于backup
- priority 100
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- #该ip为虚拟出来的vip地址
- 192.168.222.130
- }
- }
-
- #配置virtual_server ip为上面配置的虚拟vip地址 端口为mysql的端口
- virtual_server 192.168.222.130 3306 {
- delay_loop 6
- lb_algo rr
- lb_kind NAT
- persistence_timeout 50
- protocol TCP
- #real_server 该配置为实际物理机ip地址 以及实际物理机mysql端口
- real_server 192.168.222.128 3306 {
- #当该ip 端口连接异常时,执行该脚本
- notify_down /etc/keepalived/shutdown.sh
- TCP_CHECK {
- #实际物理机ip地址
- connect_ip 192.168.222.128
- #实际物理机port端口
- connect_port 3306
- connect_timeout 3
- nb_get_retry 3
- delay_before_retry 3
- }
- }
- }
- 6.修改129服务器/etc/keepalived/keepalived.conf配置文件,与128的配置不同地方为real_server、connect_ip 两个配置,需要配置对应的实际主机ip,详细内容如下:
- ! Configuration File for keepalived
-
- global_defs {
- notification_email {
- acassen@firewall.loc
- failover@firewall.loc
- sysadmin@firewall.loc
- }
- notification_email_from Alexandre.Cassen@firewall.loc
- smtp_server 192.168.200.1
- smtp_connect_timeout 30
- router_id LVS_MASTER
- vrrp_skip_check_adv_addr
- vrrp_strict
- vrrp_garp_interval 0
- vrrp_gna_interval 0
- }
-
- vrrp_instance VI_1 {
- state BACKUP
- #interface为刚才查到的本机网卡名称
- interface ens33
- #同一网段中同一组virtual_router_id值相同。不同组virtual_router_id值唯一。
- #如server-1、server-2为一组,virtual_router_id=51
- #server-3、server-4为一组,则virtual_router_id不能为51
- virtual_router_id 51
- #字数越大,优先级越高,master必须大于backup
- priority 90
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- #该ip为虚拟出来的vip地址
- 192.168.222.130
- }
- }
-
- #配置virtual_server ip为上面配置的虚拟vip地址 端口为mysql的端口
- virtual_server 192.168.222.130 3306 {
- delay_loop 6
- lb_algo rr
- lb_kind NAT
- persistence_timeout 50
- protocol TCP
- #real_server 该配置为实际物理机ip地址 以及实际物理机mysql端口
- real_server 192.168.222.129 3306 {
- #当该ip 端口连接异常时,执行该脚本
- notify_down /etc/keepalived/shutdown.sh
- TCP_CHECK {
- #实际物理机ip地址
- connect_ip 192.168.222.129
- #实际物理机port端口
- connect_port 3306
- connect_timeout 3
- nb_get_retry 3
- delay_before_retry 3
- }
- }
- }
- 详细配置参考《Keepalived 安装和配置详解》
- 7.将128、129服务器keepalived加入开机自启,并启动服务
- [root@128 keepalived-2.2.7]# systemctl enable keepalived
- [root@128 keepalived-2.2.7]# systemctl start keepalived
- 8.启动后keepalived状态为:active(running)则正常
- 9.启动后相当于虚拟出一个vip 192.168.222.130,可使用远程连接工具,连接该服务器,连接进去后使用ifconfig查看该虚拟vip实际上使用的实体服务器是129服务器。
- 10.将129服务器的keepalived应用停止,再次查看130服务ifconfig,可以看到,130服务器自动将实体机ip漂移到了128服务器上
- 至此,keepalived部署完成。
- 七、mysql双主双活+keepalived高可用整体测试
- 1.首先将128、129两台服务器mysql、keepalived应用全部启动,然后用mysql连接工具连接keepalived虚拟出来的192.168.222.130服务器
- 2.再130数据库test_db库t_test表插入id=3,name='wangwu'
- 3.此时可以查看128、129数据库,数据已同步
- 4.查看130服务器ifconfig实际使用的物理机为128,所以128服务器mysql为主数据库。
- 5.此时手动将128服务器mysql停止,keepalived检测到128服务3306端口连接失败,会执行/etc/keepalived/shutdown.sh脚本,将128服务器keepalived应用结束。
- 6.此时再连接130服务下,ifconfig查看,发现已经实际将物理机由128转移到129服务器上
- 7.再使用mysql连接工具连接130的mysql,插入一条数据id=4,name='zhaoliu',测试是否将数据存入129服务器mysql中
- 8.查看129服务器mysql数据,数据已同步,说明keepalived搭建高可用成功,当128服务器mysql出现问题后keepalived自动漂移IP到实体机129服务器上,从而使129服务器mysql作为主数据库。
- 9.此时再启动128服务器mysql、keepalived应用
- 10.查看128数据库t_test表数据,数据已同步成功。
- 11.如果漂移失败,可能是virtual_router_id在同网段内重复导致。可执行命令查看是否有其他ip使用
- [root@128 keepalived-2.2.7]# tcpdump -i 网卡名 vrrp -n |grep virtual_router_id值
- #例如:
- [root@128 keepalived-2.2.7]# tcpdump -i eno16777736 vrrp -n |grep 51
- 至此,mysql双主双活+keepalived高可用部署并测试完成。
- 8、mysql是数据库双主双活配置与上面相同,不同的为配置高可用第六步
- nginx配置mysql数据库的高可用
- 在配置Nginx作为MySQL数据库的高可用解决方案时,通常我们会采用一些策略来确保MySQL数据库服务的持续性和可用性。这里我将介绍几种常见的策略,包括使用Nginx作为负载均衡器、配置MySQL主从复制、以及使用Nginx的代理缓存功能。
- 1. 使用Nginx作为负载均衡器
- Nginx可以作为负载均衡器,将请求分发到多个MySQL服务器上,从而分散压力和增加系统的可用性。
- 配置步骤:
- 1、安装Nginx
- (如果尚未安装):自行安装
- 2、配置Nginx负载均衡:
- 编辑Nginx的配置文件,通常位于/etc/nginx/nginx.conf或者/etc/nginx/sites-available/目录下的某个文件。
- 根据实际需求,在Nginx的配置中选择合适的负载均衡算法。常见的负载均衡算法包括轮询(Round Robin)、权重(Weighted)、IP哈希(IP Hash)等。
- 轮询算法:Nginx按照请求的顺序依次将请求分发给每个备份服务器。这是默认的负载均衡算法,适用于服务器性能相近的情况。
- 权重算法:可以为每个备份服务器设置权重,以便更多的请求被分发到性能更好或更强大的服务器上。根据服务器的处理能力来调整权重值,以达到负载均衡的效果。
- IP哈希算法:根据客户端的IP地址进行哈希计算,将同一客户端的请求始终分发到相同的备份服务器。这样可以确保与特定客户端的会话始终在同一个服务器上进行处理,适用于有状态的应用程序。
- nginx.conf添加下面配置
- stream {
- include /etc/nginx/stream.d/*.conf;
- }
- 轮询算法:
- 在/etc/nginx/stream.d下创建编辑mysql_proxy.conf
- upstream mysql_servers {
- server 192.168.222.128:3306;
- #server 192.168.222.129:3306; #如果不加backup会顺序依次将请求分发给每个服务器
- server 192.168.222.129:3306 backup;
- }
- server {
- listen 3307;
- proxy_pass mysql_servers;
- }
- 权重算法
- 在/etc/nginx/stream.d下创建编辑mysql_proxy.conf
- upstream mysql_servers {
- server 192.168.222.128:3306 weight=3;
- server 192.168.222.129:3306 weight=1;
- }
- server {
- listen 3307;
- proxy_pass mysql_servers;
- }
- 使用 http 上下文实现 IP 哈希
- 如果你需要基于 IP 哈希的负载均衡,可以考虑将 MySQL 流量通过 HTTP 模块代理。但这通常不推荐,因为 MySQL 使用的是 TCP 协议,而不是 HTTP 协议。不过,如果你的场景允许,可以尝试以下配置:
- http {
- upstream mysql_servers {
- ip_hash;
- server 192.168.222.128:3306;
- server 192.168.222.129:3306 backup;
- }
- server {
- listen 3307;
- location / {
- proxy_pass http://mysql_servers;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
- }
- }
- 3、使用Nginx的代理缓存功能加速读取操作(可选)
- 虽然这并不直接提供高可用性,但可以减轻数据库服务器的读取压力。你可以在Nginx中配置静态内容的缓存。
- 配置步骤:
- 在Nginx配置中添加缓存指令:
- location / {
- proxy_pass http://mysql_servers;
- proxy_cache one; # 使用名为"one"的缓存区,需要先定义缓存区大小等配置项。
- proxy_cache_valid 200 302 60m; # 设置缓存有效期为60分钟。
- proxy_cache_key $request_method:$scheme:$host$request_uri;
- mysql数据库中查询当前服务器host
- mysql> SELECT @@hostname AS 'Host', @@port AS 'Port';
- +-------------------------+------+
- | Host | Port |
- +-------------------------+------+
- | iZbp126fstzhkzq3ifwcmrZ | 3306 |
- +-------------------------+------+
- 1 row in set
- mysql>
- 两台不同账号同一区域阿里云服务器如何实现内网互通?
- 原文链接:https://blog.csdn.net/weixin_44678969/article/details/136769184
- 1.登录阿里云平台
- 2.[开通peer对等]
- 点击右上角的控制台,然后进行搜索专有网络VPC。
- 点击进入专有网络VPC界面操作步骤如下:
- (1)点击VPC对等连接,然后开通VPC对等连接后创建对等连接。
- (2)在另一台服务器B上也同时开通VPC对等连接服务,然后点击专有网络生成默认的专有网络。
- (3)在服务器B的这个VPC对等连接对面接收发起的对等连接即可。
- (4)分别在A,B服务器的VPC对等连接界面的配置路由条目中配置对方所在的交换机网络(IP+掩码)
- 如果在A,B服务器的VPC对等连接中都配置,那么就可以Ping对方的内网IP了。
- 问题:
- (1)在配置路由条目时,填写对方的交换机网段时报错的原因:
- 这个原因是存在网络冲突,即服务器A和服务器B的交换机网段重叠了导致配置失败。那如何解决这个问题呢?
- 首先在ESC服务器中关掉该主机,然后重新创建一个交换机,在创建时填写一个与另一个服务器的交换机不在同一个网段的地址即可。
- 创建完成之后,需要在VPC连接界面删除掉原来那个冲突的交换机实例即可。
- 最后在重新配置一下VPC连接的路由条目后就能使内网互通。
- 这是不账号同区域的情况不需要付费,如果时不同账号不同区域则需要付费使用VPC连接服务。
- 注意:
- 如果内网还是不通,记得看看两台服务器有没有开机!!!
- 看看私网地址有没有填写正确
- 最后还不能解决,可以使用工单提交你所遇到的问题,一般工程师都会快速回复你的。
- 我们配置好MySQL主主同步时,是可以实现主主同步,但是重启机器后或者其他原因导致MySQL无法同步了。
- 一、问题描述:
- 当我们配置好MySQL主主同步时,是可以实现主主同步,但是重启机器后或者其他原因导致MySQL无法同步了。
- https://www.cnblogs.com/qiangyuzhou/p/14635890.html
- https://www.cnblogs.com/l-hh/p/9922548.html#
- 如果提示数据冲突需执行下面命令一条一条跳过错误数据
- STOP SLAVE;
- SET GLOBAL sql_slave_skip_counter = 1;
- START SLAVE;
- SHOW SLAVE STATUS\G;
-
- 二、Slave两个关键进程
- mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是slave_sql_running,一个是Slave_IO_Running,一个负责与主机的io通信,一个负责自己的slave mysql进程。
- 三、如果是Slave_SQL_Running:no:
- 解决办法如下:
- mysql > stop slave;
- mysql > SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;
- mysql > start slave;
- mysql > show slave status\G;
- 四、如果是slave_io_running:no
- 解决办法如下:
- 1、查看主服务器
- mysql > show slave status\G;
- 2、在从服务器上查看
- 问题所在:发现Master_Log_File没有对应。
- 3、出现Slave_IO_Running: No的机器上操作
- MariaDB [(none)]> stop slave;
- MariaDB [(none)]>CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000026', MASTER_LOG_POS=0;
- MariaDB [(none)]> start slave;
- MariaDB [(none)]> show slave status\G
- 到此问题就解决了!
|