#服务器规划: mysql1:192.168.2.153 mysql2:192.168.2.154 mysql-vip:192.168.2.157 #主主复制:
-
创建复制账号: 主库:mysql> grant replication slave on . to repl@'192.168.2.%' identified by 'slave'; 备库:mysql> grant replication slave on . to repl@'192.168.2.%' identified by 'slave';
-
配置主库和备库:修改my.cnf
#mysql1 [mysqld] server-id = 26 port = 3306 user = mysql basedir = /mvtech/mysql datadir = /mvtech/mysql/data tmpdir = /mvtech/mysql/ socket = /mvtech/mysql/mysql.sock skip-external-locking skip-name-resolve lower_case_table_names=1 auto_increment_offset = 1 auto_increment_increment = 2 ########## binlog ########## log_bin = /mvtech/mysql/log/mysql-bin binlog_format = row binlog_cache_size = 2M expire-logs-days = 7 ########## error log ########## log_error = /mvtech/mysql/log/mysql-error.log ########## slow log ########## slow_query_log = 1 slow_query_log_file = /mvtech/mysql/log/mysql-slow.log long_query_time = 5 ########## per_thread_buffers ########## max_connections = 1024 max_connect_errors = 1000 key_buffer_size = 64M max_allowed_packet = 128M table_open_cache = 6144 table_definition_cache = 4096 sort_buffer_size = 512K read_buffer_size = 512K join_buffer_size = 512K tmp_table_size = 64M max_heap_table_size = 64M thread_cache_size = 64 thread_concurrency = 32 bulk_insert_buffer_size = 64M ########innodb######## innodb_data_file_path = ibdata1:76M;ibdata2:1G:autoextend innodb_buffer_pool_size = 30G innodb_log_file_size = 500M innodb_log_buffer_size = 64M innodb_flush_log_at_trx_commit = 2 innodb_file_per_table = 1 innodb_file_io_threads = 4 innodb_flush_method = O_DIRECT innodb_thread_concurrency = 0 innodb_additional_mem_pool_size = 16M [mysqlhotcopy] interactive-timeout [mysqld_safe] open_files_limit = 65535
mysql
1#mysql2: 2[mysqld] 3server-id = 27 4port = 3306 5user = mysql 6basedir = /mvtech/mysql 7datadir = /mvtech/mysql/data 8tmpdir = /mvtech/mysql/ 9socket = /mvtech/mysql/mysql.sock 10skip-external-locking 11skip-name-resolve 12lower_case_table_names=1 13auto_increment_offset = 2 14auto_increment_increment = 2 15########## binlog ########## 16log_bin = /mvtech/mysql/log/mysql-bin 17binlog_format = row 18binlog_cache_size = 2M 19expire-logs-days = 7 20########## error log ########## 21log_error = /mvtech/mysql/log/mysql-error.log 22########## slow log ########## 23slow_query_log = 1 24slow_query_log_file = /mvtech/mysql/log/mysql-slow.log 25long_query_time = 5 26########## per_thread_buffers ########## 27max_connections = 1024 28max_connect_errors = 1000 29key_buffer_size = 64M 30max_allowed_packet = 128M 31table_open_cache = 6144 32table_definition_cache = 4096 33sort_buffer_size = 512K 34read_buffer_size = 512K 35join_buffer_size = 512K 36tmp_table_size = 64M 37max_heap_table_size = 64M 38thread_cache_size = 64 39thread_concurrency = 32 40bulk_insert_buffer_size = 64M 41########innodb######## 42innodb_data_file_path = ibdata1:76M;ibdata2:1G:autoextend 43innodb_buffer_pool_size = 30G 44innodb_log_file_size = 500M 45innodb_log_buffer_size = 64M 46innodb_flush_log_at_trx_commit = 2 47innodb_file_per_table = 1 48innodb_file_io_threads = 4 49innodb_flush_method = O_DIRECT 50innodb_thread_concurrency = 0 51innodb_additional_mem_pool_size = 16M 52[mysqlhotcopy] 53interactive-timeout 54[mysqld_safe] 55open_files_limit = 65535 56 57 58* 复制配置 59 登陆mysql1:查看show binary logs; 60 mysql2上操作:根据查询结果修改下面语句mysql2上操作: 61 CHANGE MASTER TO MASTER_HOST='192.168.2.153', 62 MASTER_USER='repl', 63 MASTER_PASSWORD='slave', 64 MASTER_LOG_FILE='mysql-bin.000006', 65 MASTER_LOG_POS=0; 66 查看状态:show slave status\G 67 Slave_IO_Running: No 68 Slave_SQL_Running: No 69 70 启动slave 71 start slave 72 查看mysql2状态:show slave status\G 73 Slave_IO_Running: Yes 74 Slave_SQL_Running: Yes 75 查看mysql2线程: 76 show processlist\G 77 登陆mysql2: 78 查看show binary logs; 79 mysql> show binary logs; 80 +------------------+-----------+ 81 | Log_name | File_size | 82 +------------------+-----------+ 83 | mysql-bin.000001 | 143 | 84 | mysql-bin.000002 | 229383637 | 85 | mysql-bin.000003 | 120 | 86 +------------------+-----------+ 87 3 rows in set (0.00 sec) 88 89 90 mysql1操作: 91 CHANGE MASTER TO MASTER_HOST='192.168.2.154', 92 MASTER_USER='repl', 93 MASTER_PASSWORD='slave', 94 MASTER_LOG_FILE='mysql-bin.000003', 95 MASTER_LOG_POS=120; 96 启动slave 97 start slave 98 查看mysql1状态:show slave status\G 99 Slave_IO_Running: Yes 100 Slave_SQL_Running: Yes 101 查看mysql1线程: 102 show processlist\G
#keepalived配置:
1* mysql1:keepalived.conf 2! Configuration File for keepalived 3 4global_defs { 5 router_id LVS_DEVEL 6} 7 8vrrp_instance VI_1 { 9 state BACKUP 10 interface em1 11 virtual_router_id 61 12 priority 100 13 advert_int 1 14 nopreempt 15 authentication { 16 auth_type PASS 17 auth_pass 1111 18 } 19 virtual_ipaddress { 20 192.168.2.157 21 } 22} 23 24virtual_server 192.168.2.157 3306 { 25 delay_loop 2 26 lb_algo wrr 27 lb_kind DR 28 nat_mask 255.255.255.0 29 persistence_timeout 50 30 protocol TCP 31 32 real_server 192.168.2.153 3306 { 33 weight 3 34 notify_down /mvtech/mysql/keepalive-mysql.sh 35 TCP_CHECK { 36 connect_timeout 3 37 nb_get_retry 3 38 delay_before_retry 3 39 connect_port 3306 40 } 41 } 42} 43 44 45 46* mysql2:keepalived.conf 47! Configuration File for keepalived 48 49global_defs { 50 router_id LVS_DEVEL 51} 52 53vrrp_instance VI_1 { 54 state BACKUP 55 interface em1 56 virtual_router_id 61 57 priority 90 58 advert_int 1 59 nopreempt 60 authentication { 61 auth_type PASS 62 auth_pass 1111 63 } 64 virtual_ipaddress { 65 192.168.2.157 66 } 67} 68 69virtual_server 192.168.2.157 3306 { 70 delay_loop 2 71 lb_algo wrr 72 lb_kind DR 73 nat_mask 255.255.255.0 74 persistence_timeout 50 75 protocol TCP 76 77 real_server 192.168.2.154 3306 { 78 weight 3 79 notify_down /mvtech/mysql/keepalive-mysql.sh 80 TCP_CHECK { 81 connect_timeout 3 82 nb_get_retry 3 83 delay_before_retry 3 84 connect_port 3306 85 } 86 } 87} 88 89 90 91#keepalive-mysql.sh 92#!/usr/bin/env bash 93service keepalived stop
服务启动
- 启动 1.启动mysql1上的mysql;登陆查看mysql-slave状态:show slave status\G;启动slave:start slave; 2.启动mysql2上的mysql;登陆查看mysql-slave状态:show slave status\G;启动slave:start slave; 3.启动mysql1上的keepalived;查看vip状态:ip addr 4.启动mysql2上的keepalived。
- 关闭 1.查看vip漂在那台机器上,例如:在mysql1上; 2.关闭mysql2的keepalived; 3.关闭mysql1的keepalived; 4.关闭mysql1上的mysql; 5.关闭mysql2上的mysql。
keepalived模拟切换
- 关闭mysql1上的mysql,vip漂至mysql2主机上;
- 启动mysql1上的mysql同时启动keepalived,vip不漂回mysql1主机上,这是由于keepalive.conf 配置文件中将两台机器都设为backup,并增加nopreempt,此模式为不抢占模式。避免高并发网站频繁切换造成数据库数据不一致问题。
#mysql主主复制测试 mysql1和mysql2上均新建数据库,检查同步现象 #取消主主复制
1mysql> show slave status\G 2mysql> stop slave IO_THREAD; 3mysql> stop slave; 4mysql> reset master; 5mysql> show slave status\G 6mysql> reset slave all;