Mongodb Replica Set副本方式集群搭建和keepalived服务高可用配置

1.虚拟两台centos服务器 服务器A:192.168.7140 服务器B:192.168.7141

原理:Primary节点宕机之后,通过仲裁节点arbiter选举新的从节点Secondary为主节点。

主要成员(Primary):主要接收所有写操作。就是主节点。

副本成员(Secondary):从主节点通过复制操作以维护相同的数据集,即备份数据,不可写操作,但可以读操作(但需要配置)。是默认的一种从节点类型。

仲裁者(Arbiter):不保留任何数据的副本,只具有投票选举作用。当然也可以将仲裁服务器维护为副。

2.安装mongodb

服务器A:140 

Primary主节点 mongodb配置如下:

dbpath = /usr/local/mongodb/data/db

# 设置日志文件的存放目录及其日志文件名

logpath = /usr/local/mongodb/data/log/mongodb.log

# 设置端口号(默认的端口号是 27017)

port = 27017

# 设置为以守护进程的方式运行,即在后台运行

fork = true

# 为本地连接远程

bind_ip=0.0.0.0

nohttpinterface = true

replSet = away

服务器B:141  

Secondary从节点 mongodb 配置

 

dbpath = /usr/local/mongodb/data/db

# 设置日志文件的存放目录及其日志文件名

logpath = /usr/local/mongodb/data/log/mongodb.log

# 设置端口号(默认的端口号是 27017)

port = 27017

# 设置为以守护进程的方式运行,即在后台运行

fork = true

# 为本地连接远程

bind_ip=0.0.0.0

nohttpinterface = true

replSet = away

Arbiter 仲裁节点 mongodb配置

dbpath = /usr/local/mongodb-arbiter/data/db

# 设置日志文件的存放目录及其日志文件名

logpath = /usr/local/mongodb-arbiter/data/log/mongodb.log

# 设置端口号(默认的端口号是 27017)

port = 27018

# 设置为以守护进程的方式运行,即在后台运行

fork = true

# 为本地连接远程

bind_ip=0.0.0.0

nohttpinterface = true

replSet = away

3.主从配置

1.启动Primary节点mongodb

2.设置主、从、仲裁点

use admin;

nbgj = {

    _id: "away",

    members: [{

        _id: 0,

        host: "192.168.71.140:27017",

        priority: 2

    }, {

        _id: 1,

        host: "192.168.71.141:27017",

        priority: 1

    }, {

        _id: 2,

        host: "192.168.71.141:27018",

        arbiterOnly: true

    }]

};

nbgj可以是任意名字,第一个_id表示replica set名字,名字必须和mongodb配置一致,

Members包含所有节点地址得有优先级,优先级字段priority,值越高优先选择为主节点,arbiterOnly:true 标记为仲裁点

3.配置生效

rs.initiate(nbgj);

  1. 查看状态

rs.status();

显示

{

    "set": "away",

    "date": ISODate("2022-12-19T07:07:09.657Z"),

    "myState": NumberInt("7"),

    "term": NumberLong("7"),

    "heartbeatIntervalMillis": NumberLong("2000"),

    "members": [

        {

            "_id": NumberInt("0"),

            "name": "192.168.71.140:27017",

            "health": 1,

            "state": NumberInt("1"),

            "stateStr": "PRIMARY",

            "uptime": NumberInt("2889"),

            "optime": {

                "ts": Timestamp(1671431371, 1),

                "t": NumberLong("7")

            },

            "optimeDate": ISODate("2022-12-19T06:29:31.000Z"),

            "lastHeartbeat": ISODate("2022-12-19T07:07:07.456Z"),

            "lastHeartbeatRecv": ISODate("2022-12-19T07:07:09.2Z"),

            "pingMs": NumberLong("0"),

            "electionTime": Timestamp(1671430748, 1),

            "electionDate": ISODate("2022-12-19T06:19:08.000Z"),

            "configVersion": NumberInt("1")

        },

        {

            "_id": NumberInt("1"),

            "name": "192.168.71.141:27017",

            "health": 1,

            "state": NumberInt("2"),

            "stateStr": "SECONDARY",

            "uptime": NumberInt("6266"),

            "optime": {

                "ts": Timestamp(1671431371, 1),

                "t": NumberLong("7")

            },

            "optimeDate": ISODate("2022-12-19T06:29:31.000Z"),

            "lastHeartbeat": ISODate("2022-12-19T07:07:05.875Z"),

            "lastHeartbeatRecv": ISODate("2022-12-19T07:07:08.285Z"),

            "pingMs": NumberLong("0"),

            "syncingTo": "192.168.71.140:27017",

            "configVersion": NumberInt("1")

        },

        {

            "_id": NumberInt("2"),

            "name": "192.168.71.141:27018",

            "health": 1,

            "state": NumberInt("7"),

            "stateStr": "ARBITER",

            "uptime": NumberInt("6267"),

            "configVersion": NumberInt("1"),

            "self": true

        }

    ],

    "ok": 1

}

3 配置keepalived实现高可用

官网地址:http://www.keepalived.org(以下以2.0.6版本为例)

安装位置:/usr/local/ 

 

解压到 /usr/local

 

安装依赖包

yum -y install curl gcc openssl-devel libnl3-devel net-snmp-devel

yum -y install libnfnetlink-devel

yum -y install ipvsadm

安装keepalived

cd keepalived

./configure

make && make install

生成启动脚本

cat /usr/lib/systemd/system/keepalived.service

 

将keepalved加进系统服务并且在/etc/sysconfig/写入配置文件以及将keepalived命令/usr/bin 和 /usr/sbin

具体操作

cp /usr/local/keepalived/keepalived/etc/init.d/keepalived /etc/init.d/keepalived  #最好查看下keeplaived是否有执行权限

mkdir /etc/keepalived/

cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

cp /usr/local/sbin/keepalived /usr/bin/  #方便以后查看keepalived的版本,用keepalived  -v可以查看

cp /usr/local/sbin/keepalived /usr/sbin/

修改配置文件

vi  /etc/keepalived/keepalived.conf

配置服务器A:140

! Configuration File for keepalived

global_defs {

   router_id LVS_DEVEL

   vrrp_skip_check_adv_addr

   #vrrp_strict

   vrrp_garp_interval 0

   vrrp_gna_interval 0

}

vrrp_instance VI_1 {

    state MASTER

    interface ens33

    virtual_router_id 51

    priority 100

    advert_int 1

    #nopreempt #不抢占模式,只有优先级高的机器上设置即可,优先级低的机器可不设置

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.71.200

    }

}

virtual_server 192.168.71.200 27017 {

    delay_loop 2

    lb_algo wrr

    lb_kind DR

    persistence_timeout 60 #会话保持时间

    protocol TCP

    real_server 192.168.71.140 27017 {

        weight 3

        notify_down /root/shutdown.sh #检测到服务down后执行的脚本

        TCP_CHECK {

            nb_get_retry 3 #重连次数

            connect_timeout 10 #连接超时时间

            delay_before_retry 3 #重连间隔时间

            connect_port 27017 #健康检查端口

        }

    }

}

服务器B:141

! Configuration File for keepalived

global_defs {

   router_id LVS_DEVEL # 标识本节点的字条串,通常为hostname

   vrrp_skip_check_adv_addr

   #vrrp_strict #这个最好注释掉,否则可能造成物理机的浏览器无法访问应用

   vrrp_garp_interval 0

   vrrp_gna_interval 0

}

vrrp_instance VI_1 {

    #state MASTER

    state BACKUP

    interface ens33

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress { # Block limited to 20 IP addresses @IP

        192.168.71.200

    }

}

#虚拟服务器定义块

virtual_server 192.168.71.200 27017 {

    delay_loop 2

    lb_algo wrr

    lb_kind DR

    persistence_timeout 60

    protocol TCP

    real_server 192.168.71.141 27017 {

        weight 3

        notify_down /root/shutdown.sh

        TCP_CHECK {

            nb_get_retry 3 #重连次数

            connect_timeout 10 #连接超时时间

            delay_before_retry 3 #重连间隔时间

            connect_port 27017 #健康检查端口

        }

    }

}

编写检测服务down后所要执行的脚本shutdown.sh

shutdown.sh 内容

#!/bin/bash

killall keepalive

启动keepalived并查看日志

chkconfig keepalived on

service keepalived start #启动服务

service keepalived stop #停止服务

service keepalived restart #重启服务

systemctl enable keepalived.service #设置开机启动

启动后查看日志

tail -f /var/log/messages

 

测试

远程客户端通过vip登录测试

 


版权声明:本文为zhanghua0324原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。