mysql5.7.20(主主集羣)+keepalived1.3.6高可用

基本設置
sed -i 's/SELINUX=enforcing/SELinux=disabled/g' /etc/selinux/config
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface eno16777984 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload

 

MYSQL5.7編譯安裝

 

tar xvf  mysql-5.7.20.tar.gz
tar xvf boost_1_59_0.tar.gz

 

yum -y install gcc gcc-c++ ncurses ncurses-devel bison libgcrypt perl make cmake

mkdir /usr/local/boost
cp -r boost_1_59_0 /usr/local/boost/

groupadd mysql
useradd -r -g mysql -s /bin/false -M mysql

mkdir -p /usr/local/mysql /usr/local/mysql/{data,logs,pids}
chown -R mysql:mysql /usr/local/mysql/

cd  /opt/mysql-5.7.20
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_TCP_PORT=3306 -DMYSQL_USER=mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost
make
make install

echo "export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH" >> /etc/profile
source /etc/profile

初始化數據庫
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
###     --initialize-insecure 表示不生成密碼

開機啓動項設置
cp /opt/mysql-5.7.20/support-files/mysql.server /etc/init.d/mysqld
chmod a=x /etc/init.d/mysql

chkconfig --add mysqld
chkconfig mysqld on

vim /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
symbolic-links=0

[mysqld_safe]
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/pids/mysqld.pid

[client]
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock

[mysql]
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
!includedir /etc/my.cnf.d

touch /usr/local/mysql/logs/mysqld.log
touch /usr/local/mysql/pids/mysqld.pid
chown mysql.mysql -R /usr/local/mysql/

注:報錯處理{/var/lock/subsys/mysql[FAILED]} 解決方法:rm -rf /var/lock/subsys/mysql

連接mysql
mysql -u root
注:此行如果報錯 ,請查看 /etc/my.cnf是否配置正確

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> use mysql;
mysql> select host,user,authentication_string from user;
#5.7以後password 已經沒有了,password改成了authentication_string

+-----------+---------------+-------------------------------------------+
| host      | user          | authentication_string                     |
+-----------+---------------+-------------------------------------------+
| localhost | root          |                                           |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys     | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+---------------+-------------------------------------------+
3 rows in set (0.00 sec)

設置密碼:
update user set authentication_string =password("overseas") where user='root';
flush privileges;
mysql> exit

mysql -uroot -p
Enter password:

 

配置mysql支持遠程連接
mysql> use mysql
mysql> update user set Host='%' where user='root';
mysql> flush privileges;

配置主主
master1:172.17.2.122
master2:172.17.2.123

master配置
/etc/my.cnf
log-bin = mysql-bin
binlog_format = mixed
server-id = 1
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
auto-increment-increment = 2
auto-increment-offset = 1

slave配置

log-bin = mysql-bin
binlog_format = mixed
server-id = 2
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
auto-increment-increment = 2
auto-increment-offset = 2

注:master1和master2只有server-id不同和 auto-increment-offset不同。
mysql中有自增長字段,在做數據庫的主主同步時需要設置自增長的兩個相關配置:auto_increment_offset和auto_increment_increment。
auto-increment-increment表示自增長字段每次遞增的量,其默認值是1。它的值應設爲整個結構中服務器的總數,本案例用到兩臺服務器,所以值設爲2。
auto-increment-offset是用來設定數據庫中自動增長的起點(即初始值),因爲這兩能服務器都設定了一次自動增長值2,所以它們的起點必須得不同,這樣才能避免兩臺服務器數據同步時出現主鍵衝突,
注:可以在my.cnf文件中添加“binlog_do_db=數據庫名”配置項(可以添加多個)來指定要同步的數據庫


在master1主機上創建授權賬戶,允許在master1(172.17.2.123)主機上連接
mysql> grant replication slave on *.* to 'syn'@'172.17.2.123' identified by 'syn123';
flush privileges;
查看binlog狀態
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

在master2主機上創建授權賬戶,允許在master1(172.17.2.122)主機上連接
mysql>change master to master_host='172.17.2.122',master_user='syn',master_password='syn123',master_log_file='mysql-bin.000002 ',master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.17.2.122
                  Master_User: syn
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 154
               Relay_Log_File: relay-bin.000004
                Relay_Log_Pos: 367
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
            
            
****************************************************
注:取消命令爲
mysql> stop slave;
mysql> change master to master_host='';

****************************************************

查看master2的當前binlog狀態信息
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      601 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

在master2主機上創建授權賬戶,允許在master1(172.17.2.122)主機上連接

grant replication slave on *.* to 'syn'@'172.17.2.122' identified by 'syn123';

在master1上將master2設爲自已的主服務器並開啓slave功能。
mysql>change master to master_host='172.17.2.123',master_user='syn',master_password='syn123',master_log_file='mysql-bin.000002 ',master_log_pos=601;

mysql>flush privileges;
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.17.2.122
                  Master_User: syn
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: slave-relay-bin.000002
                Relay_Log_Pos: 321
        Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
            

--------------------------------------------------------------------------

備註:Slave_IO_Running和Slave_SQL_Running都爲yes才表示同步成功。
Slave_IO_Running=NO
需要先
stop slave;
reset slave;
重新啓動start slave;
-------------------------------------------------------------------------

驗證主主同步
在master1上創建要同步的數據庫名test_db,並在測試db中創建一張測試表如tab
mysql> create database test_db;
Query OK, 1 row affected (0.00 sec)
mysql> create table tab(id int, name varchar(30));
mysql> use test_db;
Database changed
在master2中查看是否同步,並且在測試db測試tab中插入數據
mysql> insert into tab(id,name) values (1,'test');
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

查看master1主機是否同步了master2上的數據變化
mysql> select * from tab;
+------+------+
| id   | name |
+------+------+
|    1 | test |
+------+------+
1 row in set (0.00 sec)



現在任何一臺MySQL上更新數據都會同步到另一臺MySQL,MySQL同步完成。

keepalived 安裝配置

安裝依賴包
yum install -y gcc openssl-devel

解壓keepalived軟件包
[root@wanda-portal-test1 opt]# tar xvf keepalived-1.3.6

編譯安裝
[root@wanda-portal-test1 opt]# cd keepalived-1.3.6
[root@wanda-portal-test1 keepalived-1.3.6]# ./configure
[root@wanda-portal-test1 keepalived-1.3.6]# make & make install
[root@wanda-portal-test1 keepalived-1.3.6]# cp keepalived/etc/init.d/keepalived /etc/init.d/
[root@wanda-portal-test1 keepalived-1.3.6]# cp keepalived/etc/sysconfig/keepalived  /etc/sysconfig/
[root@wanda-portal-test1 keepalived-1.3.6]# cp /usr/local/sbin/keepalived /usr/sbin/
[root@wanda-portal-test1 keepalived-1.3.6]# mkdir /etc/keepalived/
[root@wanda-portal-test1 keepalived-1.3.6]# cp -a /usr/local/etc/keepalived/keepalived.conf  /etc/keepalived/

配置keepalived
MASTER 配置
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server mail.sinoi.com.cn
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER         
    interface eno16777984
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        172.17.2.120/16
        
    }
}

[root@wanda-portal-test1 keepalived]# scp keepalived.conf [email protected]:/etc/keepalived/

BACKUP 配置
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server mail.sinoi.com.cn
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP         
    interface eno16777984
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        172.17.2.120/16
        
    }
}

[root@wanda-portal-test1 keepalived]# systemctl enable  keepalived
[root@wanda-portal-test1 keepalived]# systemctl start  keepalived

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章