成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

mysqlzhimmm集群

角色

專注于為中小企業(yè)提供網(wǎng)站建設(shè)、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)湄潭免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

ip

Hostname

id

Master1

192.168.1.128

Master1

1

192.168.1.100


Master2(backup)

192.168.1.131

Master2

2


192.168.1.110

Slave1

192.168.1.132

Slave1

3


192.168.1.120

Slave2

192.168.1.133

Slave2

4


192.168.1.130

Monitor

192.168.1.134

Monitor1

無(wú)



 

 

 

在所有主機(jī)上配置/etc/hosts(master1,master2,slave1,slave2,monitor1)

[root@mini1 ~]# vim /etc/hosts

192.168.1.128 master1

192.168.1.131 master2

192.168.1.132 slave1

192.168.1.133 slave2

192.168.1.134 monitor1

[root@mini1 ~]# hostnamectl set-hostname master1

[root@master1 ~]# for i in master2 slave1 slave2 monitor; do scp /etc/hosts $i:/etc/hosts ;dne

 

 

在 所 有 主 機(jī) 上 安 裝 perl perl-devel perl-CPAN libart_lgpl.x86_64 rrdtool.x86_64

rrdtool-perl.x86_64 包

#yum -y install perl-* libart_lgpl.x86_64 rrdtool.x86_64 rrdtool-perl.x86_64

注:使用 centos7 在線yum源安裝

 

 

安裝 perl 的相關(guān)庫(kù)

#cpan -i Algorithm::Diff Class::Singleton DBI DBD::MySQL Log::Dispatch Log::Log4perl

Mail::Send Net::Ping Proc::Daemon Time::HiRes Params::Validate Net::ARP

 

 

在 master1、master2、slave1、slave2主機(jī)上安裝mysql5.7和配置復(fù)制

master1 和master2互為主從,slave1、slave2為master1的從

在每個(gè) mysql 的配置文件/etc/my.cnf中加入以下內(nèi)容, 注意server-id不能重復(fù)。

[root@master1 ~]# vim /etc/my.cnf

log-bin = mysql-bin

binlog_format = mixed

server-id = 1

relay-log = relay-bin

relay-log-index = slave-relay-bin.index

log-slave-updates = 1

auto-increment-increment = 2

auto-increment-offset = 1

[root@master2 ~]# vim /etc/my.cnf

log-bin = mysql-bin

binlog_format = mixed

server-id = 2

relay-log = relay-bin

relay-log-index = slave-relay-bin.index

log-slave-updates = 1

auto-increment-increment = 2

auto-increment-offset = 2

[root@slave1 ~]# vim /etc/my.cnf

server-id = 3

relay-log = relay-bin

relay-log-index = slave-relay-bin.index

read_only = 1

[root@slave2 ~]# vim /etc/my.cnf

server-id = 4

relay-log = relay-bin

relay-log-index = slave-relay-bin.index

read_only = 1

 

4 臺(tái)數(shù)據(jù)庫(kù)主機(jī)若要開啟防火墻,要么關(guān)閉防火墻或者創(chuàng)建訪問(wèn)規(guī)則:

[root@master1 ~]# firewall-cmd --permanent --add-port=3306/tcp

success

[root@master1 ~]# firewall-cmd --reload

Success

 

主從配置(master1 和master2配置成主主,slave1和slave2配置成master1的從):

在 master1 上授權(quán):

mysql> grant replication slave on *.* to rep@'192.168.1.%' identified by '123';

在 master2 上授權(quán):

mysql> grant replication slave on *.* to rep@'192.168.1.%' identified by '123';

把 master2、slave1和slave2配置成master1的從庫(kù):

在 master1 上執(zhí)行show master status;獲取binlog文件和Position點(diǎn)

mysql> show master status\G;

*************************** 1. row ***************************

             File: mysql-bin.000003

         Position: 451

     Binlog_Do_DB:

 Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

 

在 master2、slave1和slave2執(zhí)行

mysql> change master to master_host='192.168.1.128',master_port=3306,master_user='rep',master_password='123',master_log_file='mysql-bin.000003',master_log_pos=451;

mysql> slave start;

MySQL [(none)]> show slave status\G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.1.128

                  Master_User: rep

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000003

          Read_Master_Log_Pos: 451

               Relay_Log_File: relay-bin.000002

                Relay_Log_Pos: 320

        Relay_Master_Log_File: mysql-bin.000003

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

 

 

把 master1 配置成master2的從庫(kù):在master2上執(zhí)行show master status ;獲取binlog文件和Position點(diǎn)

 

mysql> change master to master_host='192.168.1.131',master_port=3306,master_user='rep',master_password='123',master_log_file='mysql-bbin.000002',master_log_pos=1045;

mysql> start slave;

mysql> show slave status\G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.1.131

                  Master_User: rep

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000002

          Read_Master_Log_Pos: 1045

               Relay_Log_File: relay-bin.000002

                Relay_Log_Pos: 320

        Relay_Master_Log_File: mysql-bin.000002

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

 

4、mysql-mmm配置:在4臺(tái)mysql節(jié)點(diǎn)上創(chuàng)建用戶

 

創(chuàng)建代理賬號(hào):

 

mysql> grant super,replication client,process on *.* to 'mmm_agent'@'192.168.1.%' identified by '123';

創(chuàng)建監(jiān)控賬號(hào):

 

mysql> grant replication client on *.* to 'mmm_monitor'@'192.168.1.%' identified by '123';

注 1:因?yàn)橹暗闹鲝膹?fù)制,以及主從已經(jīng)是ok的,所以我在master1服務(wù)器執(zhí)行就ok了。

 

檢查 master2 和slave1、slave2三臺(tái)db上是否都存在監(jiān)控和代理賬號(hào)

mysql> select user,host from mysql.user where user in ('mmm_monitor','mmm_agent');

+-------------+-------------+

| user        | host        |

+-------------+-------------+

| mmm_agent   | 192.168.1.% |

| mmm_monitor | 192.168.1.% |

+-------------+-------------+

mysql> show grants for 'mmm_agent'@'192.168.1.%';

+------------------------------------------------------------------------------+

| Grants for mmm_agent@192.168.1.%                                             |

+------------------------------------------------------------------------------+

| GRANT PROCESS, SUPER, REPLICATION CLIENT ON *.* TO 'mmm_agent'@'192.168.1.%' |

+------------------------------------------------------------------------------+

MySQL [(none)]>  show grants for 'mmm_monitor'@'192.168.1.%' ;

+----------------------------------------------------------------+

| Grants for mmm_monitor@192.168.1.%                             |

+----------------------------------------------------------------+

| GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.1.%' |

+----------------------------------------------------------------+

 

 

在 monitor 主機(jī)(192.168.31.106)上安裝監(jiān)控程序

[root@monitor1 ~]# tar zxf mysql-mmm-2.2.1.tar.gz

[root@monitor1 mysql-mmm-2.2.1]#

[root@monitor1 mysql-mmm-2.2.1]# make install

 

在數(shù)據(jù)庫(kù)服務(wù)器(master1、master2、slave1、slave2)上安裝代理

[root@master1 ~]# tar zxf mysql-mmm-2.2.1.tar.gz

[root@master1 ~]# cd mysql-mmm-2.2.1/

 

 

配置 mmm

編寫配置文件,五臺(tái)主機(jī)必須一致:完成安裝后,所有的配置文件都放到了/etc/mysql-mmm/下面。管理服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器上都要包含一個(gè)共同的文件mmm_common.conf,內(nèi)容如下:active_master_rolewriter#積極的master角色的標(biāo)示,所有的db服務(wù)器要開啟read_only參數(shù),對(duì)于writer服務(wù)器監(jiān)控代理會(huì)自動(dòng)將read_only屬性關(guān)閉。

 

[root@monitor1 mysql-mmm-2.2.1]# cd /etc/mysql-mmm/

 

[root@monitor1 mysql-mmm]# vim mmm_common.conf

 

active_master_role      writer

 

 

<host default>

        cluster_interface               ens32      #網(wǎng)卡名

 

        pid_path                             /var/run/mmm_agentd.pid   #pid 路徑

        bin_path                             /usr/lib/mysql-mmm/   #可執(zhí)行文件路徑

 

    replication_user        rep    #復(fù)制用戶    

    replication_password    123   #復(fù)制用戶密碼

 

        agent_user                           mmm_agent   #代理用戶

        agent_password                  123        #代理用戶密碼

</host>

 

<hostmaster1>     #master1的host名

        ip                                              192.168.1.128   #ip

        mode                                    master   #角色屬性

        peer                                    master2   #對(duì)等的服務(wù)器host名

</host>

 

<hostmaster2>

        ip                                              192.168.1.131

        mode                                    master

        peer                                    master1

</host>

 

<host slave1>  #從庫(kù)的host名,多個(gè)則重復(fù)配置

        ip                                              192.168.1.132

        mode                                    slave

</host>

<hostslave2>

        ip                                              192.168.1.133

        mode                                    slave

</host>

 

 

<role writer>  #寫角色配置

        hosts                              master1,master2   #master1,master2#能進(jìn)行寫操作的服務(wù)器的host名,如果不想切換寫操作這里可以只配置master,這樣也可以避免因?yàn)榫W(wǎng)絡(luò)延時(shí)而進(jìn)行write的切換,但是一旦master出現(xiàn)故障那么當(dāng)前的MMM就沒(méi)有writer了只有對(duì)外的read操作。

 

        ips                                             192.168.1.100  #寫的虛擬ip

        mode                                    exclusive #代表只允許存在一個(gè)主,也就是只能提供一個(gè)寫的IP

</role>

 

<role reader>  #讀角色分配置

        hosts                                   master2,slave1,slave2

        ips                                             192.168.1.130, 192.168.1.110, 192.168.1.120

        mode                                    balanced  #負(fù)載均衡

</role>

 

[root@monitor1 mysql-mmm]# for i in master1 master2 slave1 slave2; do scp /etc/mysql-mmm/mmm_common.conf $i:/etc/mysql-mmm/ ;done

 

代理文件配置編輯 4 臺(tái)mysql節(jié)點(diǎn)機(jī)上的/etc/mysql-mmm/mmm_agent.conf

在數(shù)據(jù)庫(kù)服務(wù)器上,還有一個(gè) mmm_agent.conf 需要修改,其內(nèi)容是:

[root@master1 mysql-mmm-2.2.1]# vim /etc/mysql-mmm/mmm_agent.conf

include mmm_common.conf

thismaster1  #每臺(tái)數(shù)據(jù)庫(kù)host

 

啟動(dòng)代理進(jìn)程

在 /etc/init.d/mysql-mmm-agent 的腳本文件的#!/bin/sh下面,加入如下內(nèi)容

source /root/.bash_profile

 

[root@master1 mysql-mmm-2.2.1]# cd /etc/init.d/

[root@master1 init.d]# chkconfig --add mysql-mmm-agent

[root@master1 init.d]# chkconfig mysql-mmm-agent on

[root@master1 init.d]# /etc/init.d/mysql-mmm-agent start

Daemon bin: '/usr/sbin/mmm_agentd'

Daemon pid: '/var/run/mmm_agentd.pid'

Starting MMM Agent daemon... Ok    #表示啟動(dòng)成功

 

[root@master1 init.d]# ss -lanp|grep mmm

tcp    LISTEN     0      10     192.168.1.128:9989                  *:*                   users:(("mmm_agentd",pid=9680,fd=3))

[root@master1 init.d]# firewall-cmd --add-port=9989/tcp --permanent

[root@master1 init.d]# firewall-cmd --reload

 

 

 

編輯 monitor 主機(jī)上的/etc/mysql-mmm/mmm_mon.conf

[root@monitor1 mysql-mmm]# vim /etc/mysql-mmm/mmm_mon.conf

 

include mmm_common.conf

 

<monitor>

        ip                                              127.0.0.1

        pid_path                                /var/run/mmm_mond.pid

        bin_path                                /usr/lib/mysql-mmm/

        status_path                             /var/lib/misc/mmm_mond.status

        auto_set_online 0

ping_ips                                192.168.1.128, 192.168.1.131, 192.168.1.132,192.168.1.133        #四臺(tái)數(shù)據(jù)庫(kù)的真實(shí)ip

</monitor>

<check default>

check_period 5

trap_period 10

timeout 2

restart_after 10000

max_backlog 86400

</check>

<host default>

        monitor_user                    mmm_monitor

        monitor_password                123

</host>

 

debug 0

 

啟動(dòng)監(jiān)控進(jìn)程

在 /etc/init.d/mysql-mmm-monitor 的腳本文件的#!/bin/sh下面,加入如下內(nèi)容

source /root/.bash_profile

添加成系統(tǒng)服務(wù)并設(shè)置為自啟動(dòng)

[root@monitor1 init.d]# vim /etc/init.d/mysql-mmm-monitor

[root@monitor1 init.d]# chkconfig --add mysql-mmm-monitor

[root@monitor1 init.d]# chkconfig mysql-mmm-monitor on

[root@monitor1 init.d]# ./mysql-mmm-monitor start

Daemon bin: '/usr/sbin/mmm_mond'

Daemon pid: '/var/run/mmm_mond.pid'

Starting MMM Monitor daemon: Ok

 

[root@monitor1 ~]# mmm_control show

  master1(192.168.1.128) master/HARD_OFFLINE. Roles:

  master2(192.168.1.131) master/HARD_OFFLINE. Roles:

  slave1(192.168.1.132) slave/HARD_OFFLINE. Roles:

  slave2(192.168.1.133) slave/HARD_OFFLINE. Roles:

啟動(dòng)所有mysql,然后讓所有服務(wù)上線

[root@monitor1 ~]# mmm_control set_online master1

OK: State of 'master1' changed to ONLINE. Now you can wait some time and check its new roles!

[root@monitor1 ~]# mmm_control show

  master1(192.168.1.128) master/ONLINE. Roles: writer(192.168.1.100)

  master2(192.168.1.131) master/ONLINE. Roles: reader(192.168.1.130)

  slave1(192.168.1.132) slave/ONLINE. Roles: reader(192.168..120)

  slave2(192.168.1.133) slave/ONLINE. Roles: reader(192.168.1.110)

[root@master1 init.d]# ip addr

2: eno16777728: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 00:0c:29:d8:de:a3 brd ff:ff:ff:ff:ff:ff

    inet 192.168.1.128/24 brd 192.168.1.255 scope global noprefixroute dynamic eno16777728

       valid_lft 5352004sec preferred_lft 5352004sec

    inet 192.168.1.100/32 scope global eno16777728

       valid_lft forever preferred_lft forever

    inet6 fe80::20c:29ff:fed8:dea3/64 scope link noprefixroute

       valid_lft forever preferred_lft forever

 

當(dāng)master1 down vip地址則漂到master2

[root@master1 init.d]# service mysqld stop

[root@monitor1 ~]# mmm_control show

  master1(192.168.1.128) master/HARD_OFFLINE. Roles:

  master2(192.168.1.131) master/ONLINE. Roles: reader(192.168.1.130), writer(192.168.1.100)

  slave1(192.168.1.132) slave/ONLINE. Roles: reader(192.168.1.120)

  slave2(192.168.1.133) slave/ONLINE. Roles: reader(192.168.1.110)

 

 

 

#查看整個(gè)集群的狀態(tài),可以看到整個(gè)集群狀態(tài)正常

[root@monitor1 ~]# mmm_control show

 

日志文件:

日志文件往往是分析錯(cuò)誤的關(guān)鍵,所以要善于利用日志文件進(jìn)行問(wèn)題分析。

db 端:/var/log/mysql-mmm/mmm_agentd.log

監(jiān)控端:/var/log/mysql-mmm/mmm_mond.log

命令文件:

mmm_agentd:db代理進(jìn)程的啟動(dòng)文件

mmm_mond:監(jiān)控進(jìn)程的啟動(dòng)文件

mmm_backup:備份文件

mmm_restore:還原文件

mmm_control:監(jiān)控操作命令文件

db 服務(wù)器端只有mmm_agentd程序,其它的都是在monitor服務(wù)器端。

 

 

mmm_control 用法

mmm_control 程序可以用于監(jiān)控群集狀態(tài)、切換writer、設(shè)置online\offline操作等。

Valid commands are:

help - show this message #幫助信息

ping - ping monitor #ping 當(dāng)前的群集是否正常

show - show status #群集在線狀態(tài)檢查

checks [<host>|all [<check>|all]] - show checks status#執(zhí)行監(jiān)控檢查操作

set_online<host> - set host <host> online #將host設(shè)置為online

set_offline<host> - set host <host> offline #將host設(shè)置為offline

mode - print current mode. #打印輸出當(dāng)前的mode

set_active - switch into active mode.

set_manual - switch into manual mode.

set_passive - switch into passive mode.

move_role [--force] <role><host> - move exclusive role <role> to host <host> #移除writer服務(wù)器

為指定的 host 服務(wù)器(Only use --force if you know what you are doing!)

set_ip<ip><host> - set role with ip<ip> to host <host>

 

檢查所有的 db 服務(wù)器群集狀態(tài):

[root@monitor1 ~]# mmm_control checks all

檢查項(xiàng)包括:ping、mysql是否正常運(yùn)行、復(fù)制線程是否正常等

檢查群集環(huán)境在線狀況:

[root@monitor1 ~]# mmm_control show

對(duì)指定的 host 執(zhí)行offline操作:

[root@monitor1 ~]# mmm_controlset_offline slave2

對(duì)指定的 host 執(zhí)行onine操作:

[root@monitor1 ~]# mmm_controlset_online slave2

執(zhí)行 write 切換(手動(dòng)切換):

[root@monitor1 ~]# mmm_controlmove_role writer master1

 

 

 

總結(jié)

1.對(duì)外提供讀寫的虛擬IP是由monitor程序控制。如果monitor沒(méi)有啟動(dòng)那么db服務(wù)器

不會(huì)被分配虛擬 ip,但是如果已經(jīng)分配好了虛擬ip,當(dāng)monitor程序關(guān)閉了原先分配的虛擬ip

不會(huì)立即關(guān)閉外部程序還可以連接訪問(wèn)(只要不重啟網(wǎng)絡(luò)),這樣的好處就是對(duì)于 monitor

的可靠性要求就會(huì)低一些,但是如果這個(gè)時(shí)候其中的某一個(gè) db 服務(wù)器故障了就無(wú)法處理切

換,也就是原先的虛擬 ip 還是維持不變,掛掉的那臺(tái)DB的虛擬ip會(huì)變的不可訪問(wèn)。

2.agent 程序受monitor程序的控制處理write切換,從庫(kù)切換等操作。如果monitor進(jìn)

程關(guān)閉了那么 agent 進(jìn)程就起不到什么作用,它本身不能處理故障。

3.monitor 程序負(fù)責(zé)監(jiān)控db服務(wù)器的狀態(tài),包括Mysql數(shù)據(jù)庫(kù)、服務(wù)器是否運(yùn)行、復(fù)制

線程是否正常、主從延時(shí)等;它還用于控制 agent 程序處理故障。

4.monitor 會(huì)每隔幾秒鐘監(jiān)控db服務(wù)器的狀態(tài),如果db服務(wù)器已經(jīng)從故障變成了正常,

那么 monitor 會(huì)自動(dòng)在60s之后將其設(shè)置為online狀態(tài)(默認(rèn)是60s可以設(shè)為其它的值),有

監(jiān)控端的配置文件參數(shù)“auto_set_online”決定,群集服務(wù)器的狀態(tài)有三種分別是:

HARD_OFFLINE→AWAITING_RECOVERY→online

5.默認(rèn)monitor會(huì)控制mmm_agent會(huì)將writer db服務(wù)器read_only修改為OFF,其它的

db 服務(wù)器read_only修改為ON,所以為了嚴(yán)謹(jǐn)可以在所有的服務(wù)器的my.cnf文件中加入

read_only=1 由monitor控制來(lái)控制writer和read,root用戶和復(fù)制用戶不受read_only參數(shù)的

影響。

 

 

總結(jié)

(1)master2備選主節(jié)點(diǎn)宕機(jī)不影響集群的狀態(tài),就是移除了master2備選節(jié)點(diǎn)的讀狀態(tài)。

(2)master1 主節(jié)點(diǎn)宕機(jī),由master2備選主節(jié)點(diǎn)接管寫角色,slave1,slave2指向新master2

主庫(kù)進(jìn)行復(fù)制,slave1,slave2 會(huì)自動(dòng)change master到master2.

(3)如果master1主庫(kù)宕機(jī),master2復(fù)制應(yīng)用又落后于master1時(shí)就變成了主可寫狀態(tài),

這時(shí)的數(shù)據(jù)主無(wú)法保證一致性。

如果 master2,slave1,slave2 延遲于master1主,這個(gè)時(shí)master1宕機(jī),slave1,slave2將會(huì)

等待數(shù)據(jù)追上 db1 后,再重新指向新的主node2進(jìn)行復(fù)制操作,這時(shí)的數(shù)據(jù)也無(wú)法保證

同步的一致性。

(4)如果采用MMM高可用架構(gòu),主,主備選節(jié)點(diǎn)機(jī)器配置一樣,而且開啟半同步進(jìn)一步

提高安全性或采用 MariaDB/mysql5.7 進(jìn)行多線程從復(fù)制,提高復(fù)制的性能。

標(biāo)題名稱:mysqlzhimmm集群
文章網(wǎng)址:http://jinyejixie.com/article2/ggidic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司品牌網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、微信公眾號(hào)、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開發(fā)
龙海市| 辰溪县| 塔城市| 格尔木市| 白河县| 林甸县| 修武县| 康定县| 永善县| 兰州市| 中牟县| 柳州市| 西昌市| 米泉市| 疏勒县| 诏安县| 山东省| 吴堡县| 凤凰县| 准格尔旗| 西贡区| 金阳县| 盘山县| 中方县| 襄垣县| 兴安县| 札达县| 沧州市| 长治县| 佛山市| 广汉市| 辽阳市| 休宁县| 宜都市| 凌云县| 双流县| 兰溪市| 溧阳市| 沈阳市| 故城县| 深水埗区|