• keepalive半同步双主一从


    ip地址如下:

    192.168.20.201 redis01  主
    192.168.20.202 redis02  主
    192.168.20.203 redis03  从
    192.168.20.205  vip
    

      修改my.cnf配置文件如下

    [root@redis01 keepalived]# cat /etc/my.cnf
    [mysqld]
    server-id=1
    log-bin=mysql-bin
    gtid_mode = ON
    enforce_gtid_consistency = ON
    master_info_repository =TABLE
    relay_log_info_repository=TABLE
    binlog_checksum=NONE
    log_slave_updates=ON
    binlog_format=ROW
    log_timestamps= SYSTEM
    #Group Replication Settings
    plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
    rpl-semi-sync-master-enabled = 1
    rpl-semi-sync-slave-enabled = 1
    slave_parallel_type=database
    slave_parallel_workers=3
    #GENERAL
    datadir=/data/mysql
    socket=/data/mysql/mysql.sock
    pid-file=/data/mysqld.pid
    user=mysql
    port=3306
    default_storage_engine=InnoDB
    #INNODB
    innodb_buffer_pool_size = 512M
    innodb_log_file_size=10M
    innodb_file_per_table=1
    innodb_flush_method=O_DIRECT
    #MYISAM
    key_buffer_size=10M
    #LOGGING
    log-error=/data/log/mysql-error.log
    slow_query_log=1                                     #是否启用慢查询日志,1为启用,0为禁用  
    slow_query_log_file=/data/log/mysql-slow.log         #指定慢查询日志文件的路径和名字,可使用绝对路径指定;默认值是'主机名_slow.log',位于datad
    #OTHER
    tmp_table_size=32M
    max_heap_table_size=32M
    #query_cache_type=0
    #query_cache_size=0
    max_connections=1000
    thread_cache_size=100
    #table_cache=100
    open_files_limit=65535
    [client]
    #socket=/var/lib/mysql/mysql.sock
    socket=/data/mysql/mysql.sock
    port=3306
    user=root
    password=ocm123
    
    其他节点修改server-id的值
    

      创建复制用户及授权,3个节点都需要创建

    create user 'repl'@'192.%' identified by 'ocm123';
    GRANT replication slave ON *.* to repl@'192.%' IDENTIFIED BY 'ocm123';
    

      安装及配置keepalived

     yum install keepalived-1*
     先备份配置文件
     cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bak
     修改配置文件如下,修改前保证防火墙已关掉,或者在/etc/sysconfig/iptables加入以下条目
     -A INPUT -d 192.168.20.205 -j ACCEPT
     配置keepalived为backup模式,master挂掉以后,vip切换到backup(redis02)主机,当master(redis01)主机启动以后不会抢回vip,从机redis03不会在切换一次
     主机redis01
     [root@redis01 keepalived]# cat 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 MYSQL-HA
    }
    
    vrrp_script chk_mysql_port {
        script "/etc/keepalived/check.sh"
    	interval 2            
        fall 2                 
        rise 1  
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        priority 150
        nopreempt
        interface eth1
        virtual_router_id 51
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.20.205
        }
        track_script {
            chk_mysql_port 
        }
    }
    
     主机redis02
     [root@redis02 keepalived]# cat 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 MYSQL-HA
    }
    
    vrrp_script chk_mysql_port {
        script "/etc/keepalived/check.sh"
        interval 2            
        fall 2                 
        rise 1  
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        priority 50
        nopreempt
        interface eth5
        virtual_router_id 51
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.20.205
        }
       track_script {
            chk_mysql_port
        }
    
    }
    
    mysql监控脚本如下
    [root@redis02 keepalived]# cat check.sh 
    #!/bin/bash
    counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
    if [ "${counter}" -eq 0 ]; then
        /etc/init.d/keepalived stop
    fi
    

      配置复制

    change master to master_host='redis01', master_user='repl', master_password='ocm123', master_auto_position=150;
    change master to master_host='redis02', master_user='repl', master_password='ocm123', master_auto_position=150;
    change master to master_host='192.168.20.205', master_user='repl', master_password='ocm123', master_auto_position=150;
    

      验证vip切换

    查看ip
    [root@redis01 sysconfig]# ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 08:00:27:2b:cf:c4 brd ff:ff:ff:ff:ff:ff
        inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::a00:27ff:fe2b:cfc4/64 scope link 
           valid_lft forever preferred_lft forever
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 08:00:27:ad:69:96 brd ff:ff:ff:ff:ff:ff
        inet 192.168.20.201/24 brd 192.168.20.255 scope global eth1
           valid_lft forever preferred_lft forever
        inet 192.168.20.205/32 scope global eth1
           valid_lft forever preferred_lft forever
        inet6 fe80::a00:27ff:fead:6996/64 scope link 
           valid_lft forever preferred_lft forever
    在redis03上查看vip在那个主机上
    [root@redis03 ~]# ssh 192.168.20.205 hostname
    redis01
    
    关掉redis01上mysql
    [root@redis01 sysconfig]# /etc/init.d/mysqld stop
    Stopping mysqld:                                           [  OK  ]
    [root@redis01 sysconfig]# ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 08:00:27:2b:cf:c4 brd ff:ff:ff:ff:ff:ff
        inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::a00:27ff:fe2b:cfc4/64 scope link 
           valid_lft forever preferred_lft forever
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 08:00:27:ad:69:96 brd ff:ff:ff:ff:ff:ff
        inet 192.168.20.201/24 brd 192.168.20.255 scope global eth1
           valid_lft forever preferred_lft forever
        inet6 fe80::a00:27ff:fead:6996/64 scope link 
           valid_lft forever preferred_lft forever
    [root@redis03 ~]# ssh 192.168.20.205 hostname
    redis02
    
    结论 redis01上mysql会自动关闭keepalived,vip切换到redis02上
    启动redis01上mysql及keepalived看vip是否会切回redis01
    [root@redis01 sysconfig]# /etc/init.d/mysqld start
    Starting mysqld:                                           [  OK  ]
    [root@redis01 sysconfig]# /etc/init.d/keepalived start
    Starting keepalived:                                       [  OK  ]
    
    [root@redis01 sysconfig]# ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 08:00:27:2b:cf:c4 brd ff:ff:ff:ff:ff:ff
        inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::a00:27ff:fe2b:cfc4/64 scope link 
           valid_lft forever preferred_lft forever
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 08:00:27:ad:69:96 brd ff:ff:ff:ff:ff:ff
        inet 192.168.20.201/24 brd 192.168.20.255 scope global eth1
           valid_lft forever preferred_lft forever
        inet6 fe80::a00:27ff:fead:6996/64 scope link 
           valid_lft forever preferred_lft forever
    
    [root@redis03 ~]# ssh 192.168.20.205 hostname
    redis02
    
    从上面得出结论,redis01启动mysql以后不会抢回vip
    

      查看从机redis03上复制状态

    mysql> show slave status G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.20.205
                      Master_User: repl
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000005
              Read_Master_Log_Pos: 230
                   Relay_Log_File: redis03-relay-bin.000074
                    Relay_Log_Pos: 435
            Relay_Master_Log_File: mysql-bin.000005
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB: 
              Replicate_Ignore_DB: 
               Replicate_Do_Table: 
           Replicate_Ignore_Table: 
          Replicate_Wild_Do_Table: 
      Replicate_Wild_Ignore_Table: 
                       Last_Errno: 0
                       Last_Error: 
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 230
                  Relay_Log_Space: 921
                  Until_Condition: None
                   Until_Log_File: 
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File: 
               Master_SSL_CA_Path: 
                  Master_SSL_Cert: 
                Master_SSL_Cipher: 
                   Master_SSL_Key: 
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error: 
                   Last_SQL_Errno: 0
                   Last_SQL_Error: 
      Replicate_Ignore_Server_Ids: 
                 Master_Server_Id: 2
                      Master_UUID: e1ce6245-b4a3-11e8-9ecc-08002771e31b
                 Master_Info_File: mysql.slave_master_info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
               Master_Retry_Count: 86400
                      Master_Bind: 
          Last_IO_Error_Timestamp: 
         Last_SQL_Error_Timestamp: 
                   Master_SSL_Crl: 
               Master_SSL_Crlpath: 
               Retrieved_Gtid_Set: be2030ff-b4a3-11e8-8764-0800272bcfc4:1-54,
    e1ce6245-b4a3-11e8-9ecc-08002771e31b:1
                Executed_Gtid_Set: be2030ff-b4a3-11e8-8764-0800272bcfc4:1-54,
    e1ce6245-b4a3-11e8-9ecc-08002771e31b:1
                    Auto_Position: 1
             Replicate_Rewrite_DB: 
                     Channel_Name: 
               Master_TLS_Version: 
    1 row in set (0.00 sec)
    
    mysql> select * from mysql.slave_master_info G
    *************************** 1. row ***************************
           Number_of_lines: 25
           Master_log_name: mysql-bin.000005
            Master_log_pos: 230
                      Host: 192.168.20.205
                 User_name: repl
             User_password: ocm123
                      Port: 3306
             Connect_retry: 60
               Enabled_ssl: 0
                    Ssl_ca: 
                Ssl_capath: 
                  Ssl_cert: 
                Ssl_cipher: 
                   Ssl_key: 
    Ssl_verify_server_cert: 0
                 Heartbeat: 30
                      Bind: 
        Ignored_server_ids: 0
                      Uuid: e1ce6245-b4a3-11e8-9ecc-08002771e31b
               Retry_count: 86400
                   Ssl_crl: 
               Ssl_crlpath: 
     Enabled_auto_position: 1
              Channel_name: 
               Tls_version: 
    1 row in set (0.00 sec)
    
    mysql> select * from mysql.slave_relay_log_infoG
    *************************** 1. row ***************************
      Number_of_lines: 7
       Relay_log_name: ./redis03-relay-bin.000073
        Relay_log_pos: 435
      Master_log_name: mysql-bin.000016
       Master_log_pos: 230
            Sql_delay: 0
    Number_of_workers: 3
                   Id: 1
         Channel_name: 
    1 row in set (0.00 sec)
    
    mysql> select * from mysql.slave_worker_info G
    *************************** 1. row ***************************
                            Id: 1
                Relay_log_name: ./redis03-relay-bin.000005
                 Relay_log_pos: 730
               Master_log_name: mysql-bin.000001
                Master_log_pos: 1349594
     Checkpoint_relay_log_name: ./redis03-relay-bin.000005
      Checkpoint_relay_log_pos: 438
    Checkpoint_master_log_name: mysql-bin.000001
     Checkpoint_master_log_pos: 1349302
              Checkpoint_seqno: 0
         Checkpoint_group_size: 64
       Checkpoint_group_bitmap:                                                                
                  Channel_name: 
    *************************** 2. row ***************************
                            Id: 2
                Relay_log_name: 
                 Relay_log_pos: 0
               Master_log_name: 
                Master_log_pos: 0
     Checkpoint_relay_log_name: 
      Checkpoint_relay_log_pos: 0
    Checkpoint_master_log_name: 
     Checkpoint_master_log_pos: 0
              Checkpoint_seqno: 0
         Checkpoint_group_size: 64
       Checkpoint_group_bitmap:                                                                 
                  Channel_name: 
    *************************** 3. row ***************************
                            Id: 3
                Relay_log_name: ./redis03-relay-bin.000002
                 Relay_log_pos: 910010
               Master_log_name: mysql-bin.000001
                Master_log_pos: 909805
     Checkpoint_relay_log_name: ./redis03-relay-bin.000002
      Checkpoint_relay_log_pos: 555275
    Checkpoint_master_log_name: mysql-bin.000001
     Checkpoint_master_log_pos: 555070
              Checkpoint_seqno: 0
         Checkpoint_group_size: 64
       Checkpoint_group_bitmap:                                                                
                  Channel_name: 
    3 rows in set (0.00 sec)
    

      

  • 相关阅读:
    智慧园区数字孪生平台GIS+三维可视化的研究
    树莓派联通家庭宽带端口映射
    NetCore 5.0 Dokcer中发布报NU3028、NU3037
    django导入导出excel实践
    MySQL JSON类型
    业务、设计模式、算法
    VIM 简单教程
    k8s go-client 使用简介
    如何健壮你的后端服务
    公共dto打包时按条件导出实现feignclient接口的bean,解决feign.Feign$Builder类找不到的问题
  • 原文地址:https://www.cnblogs.com/omsql/p/9626316.html
Copyright © 2020-2023  润新知