Ovirt實(shí)現(xiàn)虛擬機(jī)通過(guò)NAT上網(wǎng)

環(huán)境說(shuō)明

  • OS: CentOS Linux release 7.1.1503 (Core)
  • Ovirt-engine: ovirt-engine-3.5.3.1-1.el7
  • VDSM: vdsm-4.16.20-0.el7
  • GuestOS: CentOS release 6.5 (Final)
  • 硬件說(shuō)明: 單網(wǎng)卡且只有一個(gè)IP:10.10.19.100(可連接外網(wǎng))
  • :此主機(jī)同時(shí)充當(dāng)engine和node角色

1. 安裝Centos7-mini并update(省略)

2. 安裝和配置ovirt

  • 初始化相關(guān)系統(tǒng)設(shè)置

      [root@localhost ~]# echo "ovirthost01.ctcnet.com" >/etc/hostname
      
      [root@localhost ~]# systemctl stop NetworkManager
      [root@localhost ~]# systemctl disable NetworkManager
    
      [root@ovirthost01 ~]# cat >/etc/sysconfig/network-scripts/ifcfg-p4p1 <<EOF
      > DEVICE=p4p1
      > TYPE=Ethernet
      > ONBOOT=yes
      > BOOTPROTO=static
      > IPADDR=10.10.19.100
      > PFEFIX=24
      > GATEWAY=10.10.19.254
      > DNS1=10.10.19.254
      > EOF
    
      [root@ovirthost01 ~]# echo "10.10.19.100 ovirthost01 ovirthost01.ctcnet.com" >>/etc/hosts
    
      [root@ovirthost01 ~]# echo "export PATH=/bin:/sbin:$PATH" >>~/.bashrc &&source .bashrc &&echo $PATH
    
      [root@ovirthost01 ~]# setenforce 0 &&sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config 
      
      [root@ovirthost01 ~]# systemctl stop firewalld && systemctl disable firewalld    
      
      [root@ovirthost01 ~]# systemctl stop iptables && systemctl disable iptables    
      
      [root@ovirthost01 ~]# yum install net-tools
    
      [root@ovirthost01 ~]# service postgresql initdb
      [root@ovirthost01 ~]# service postgresql start
      [root@ovirthost01 ~]# chkconfig postgresql on
    
  • 安裝和配置ovirt-engine

      [root@ovirthost01 ~]# yum localinstall -y http://resources.ovirt.org/pub/yum-repo/ovirt-release35.rpm 
      
      [root@ovirthost01 ~]# yum install -y ovirt-engine
    
      [root@ovirthost01 ~]# engine-setup 
    

    遇到如下錯(cuò)誤:

      [ INFO  ] Generating post install configuration file '/etc/ovirt-engine-setup.conf.d/20-setup-ovirt-post.conf'
      [ INFO  ] Stage: Transaction commit
      [ INFO  ] Stage: Closing up
      [ INFO  ] Restarting nfs services
      [ ERROR ] Failed to execute stage 'Closing up': Command '/bin/systemctl' failed to execute
      [ INFO  ] Stage: Clean up
                Log file is located at /var/log/ovirt-engine/setup/ovirt-engine-setup-20150804004920-op260z.log
      [ INFO  ] Generating answer file '/var/lib/ovirt-engine/setup/answers/20150804005258-setup.conf'
      [ INFO  ] Stage: Pre-termination
      [ INFO  ] Stage: Termination
      [ ERROR ] Execution of setup failed
    

    檢查日志:

      less /var/log/ovirt-engine/setup/ovirt-engine-setup-20150804004920-op260z.log
    

    日志中記錄了如下錯(cuò)誤(啟動(dòng)nfs-server失敗):

      2015-08-04 00:52:58 DEBUG otopi.plugins.otopi.services.systemd plugin.execute:932 execute-output: ('/bin/systemctl', 'start', 'nfs-server.service') stdout:
    
      2015-08-04 00:52:58 DEBUG otopi.plugins.otopi.services.systemd plugin.execute:937 execute-output: ('/bin/systemctl', 'start', 'nfs-server.service') stderr:
      Job for nfs-server.service failed. See 'systemctl status nfs-server.service' and 'journalctl -xn' for details.
      
      2015-08-04 00:52:58 DEBUG otopi.context context._executeMethod:152 method exception
      Traceback (most recent call last):
        File "/usr/lib/python2.7/site-packages/otopi/context.py", line 142, in _executeMethod
          method['method']()
        File "/usr/share/ovirt-engine/setup/bin/../plugins/ovirt-engine-setup/ovirt-engine/system/nfs.py", line 307, in _closeup
          state=state,
        File "/usr/share/otopi/plugins/otopi/services/systemd.py", line 138, in state
          'start' if state else 'stop'
        File "/usr/share/otopi/plugins/otopi/services/systemd.py", line 77, in _executeServiceCommand
          raiseOnError=raiseOnError
        File "/usr/lib/python2.7/site-packages/otopi/plugin.py", line 942, in execute
          command=args[0],
      RuntimeError: Command '/bin/systemctl' failed to execute
    

    根據(jù)日志提示檢查下nfs-server服務(wù)狀態(tài)(failed):

      [root@ovirthost01 ~]# systemctl status nfs-server.service
    
      nfs-server.service - NFS server and services
         Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled)
         Active: failed (Result: exit-code) since Tue 2015-08-04 00:52:58 EDT; 7min ago
        Process: 21922 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=1/FAILURE)
        Process: 21919 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
       Main PID: 21922 (code=exited, status=1/FAILURE)
         CGroup: /system.slice/nfs-server.service
      
      Aug 04 00:52:58 ovirthost01.ctcnet.com rpc.nfsd[21922]: rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
      Aug 04 00:52:58 ovirthost01.ctcnet.com rpc.nfsd[21922]: rpc.nfsd: unable to set any sockets for nfsd
      Aug 04 00:52:58 ovirthost01.ctcnet.com systemd[1]: nfs-server.service: main process exited, code=exited, status=1/FAILURE
      Aug 04 00:52:58 ovirthost01.ctcnet.com systemd[1]: Failed to start NFS server and services.
      Aug 04 00:52:58 ovirthost01.ctcnet.com systemd[1]: Unit nfs-server.service entered failed state.
    

    搜索下得知要先啟動(dòng)rpcbind:

      [root@ovirthost01 ~]# systemctl start rpcbind
    

    再次啟動(dòng)nfs-server并檢查其狀態(tài)(success):

      [root@ovirthost01 ~]# systemctl start  nfs-server.service
    
      [root@ovirthost01 ~]# systemctl status nfs-server.service
    
      nfs-server.service - NFS server and services
         Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled)
         Active: active (exited) since Tue 2015-08-04 01:10:26 EDT; 11s ago
        Process: 22042 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
        Process: 22040 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
       Main PID: 22042 (code=exited, status=0/SUCCESS)
         CGroup: /system.slice/nfs-server.service
      
      Aug 04 01:10:26 ovirthost01.ctcnet.com systemd[1]: Starting NFS server and services...
      Aug 04 01:10:26 ovirthost01.ctcnet.com systemd[1]: Started NFS server and services.
    

    再次運(yùn)行engine-setup成功:

      [ INFO  ] Cleaning stale zombie tasks and commands
       
        --== CONFIGURATION PREVIEW ==--
       
        Firewall manager                        : firewalld
        Update Firewall                         : True
        Host FQDN                               : ovirthost01.ctcnet.com
        Engine database name                    : engine
        Engine database secured connection      : False
        Engine database host                    : localhost
        Engine database user name               : engine
        Engine database host name validation    : False
        Engine database port                    : 5432
        Engine installation                     : True
        PKI organization                        : ctcnet.com
        NFS mount point                         : /data/iso
        Configure WebSocket Proxy               : True
        Engine Host FQDN                        : ovirthost01.ctcnet.com
       
        Please confirm installation settings (OK, Cancel) [OK]: 
      [ INFO  ] Cleaning async tasks and compensations
      [ INFO  ] Checking the Engine database consistency
      [ INFO  ] Stage: Transaction setup
      [ INFO  ] Stopping engine service
      [ INFO  ] Stopping ovirt-fence-kdump-listener service
      [ INFO  ] Stopping websocket-proxy service
      [ INFO  ] Stage: Misc configuration
      [ INFO  ] Stage: Package installation
      [ INFO  ] Stage: Misc configuration
      [ INFO  ] Backing up database localhost:engine to '/var/lib/ovirt-engine/backups/engine-20150804012706.WAg6oL.dump'.
      [ INFO  ] Creating/refreshing Engine database schema
      [ INFO  ] Configuring WebSocket Proxy
      [ INFO  ] Generating post install configuration file '/etc/ovirt-engine-setup.conf.d/20-setup-ovirt-post.conf'
      [ INFO  ] Stage: Transaction commit
      [ INFO  ] Stage: Closing up
               
                --== SUMMARY ==--
               
      [WARNING] Less than 16384MB of memory is available
                SSH fingerprint: F6:83:42:C9:FF:0F:A3:CE:ED:F5:85:EC:27:22:5F:E7
                Internal CA A3:CF:B5:C1:B4:29:8B:36:A5:9B:EB:69:99:A6:8D:5B:55:81:36:8F
                Web access is enabled at:
                    http://ovirthost01.ctcnet.com:80/ovirt-engine
                    https://ovirthost01.ctcnet.com:443/ovirt-engine
               
                --== END OF SUMMARY ==--
               
      [ INFO  ] Starting engine service
      [ INFO  ] Restarting httpd
      [ INFO  ] Stage: Clean up
                Log file is located at /var/log/ovirt-engine/setup/ovirt-engine-setup-20150804012601-6zut1o.log
      [ INFO  ] Generating answer file '/var/lib/ovirt-engine/setup/answers/20150804012750-setup.conf'
      [ INFO  ] Stage: Pre-termination
      [ INFO  ] Stage: Termination
      [ INFO  ] Execution of setup completed successfully
    
  • 備份ovirt-engine文件和數(shù)據(jù)庫(kù)

      [root@ovirthost01 ~]# engine-backup --mode=backup --file=engine_backup00 --log=./engine_backup00.log
    

    如果想了解具體包含哪些配置文件酝枢,可以解壓engine_bakcup00來(lái)查看:

      [root@ovirthost01 ~]# tar -jxvf engine_backup00
    
  • 添加數(shù)據(jù)中心宴倍,集群您访,主機(jī)剥险,數(shù)據(jù)存儲(chǔ)域和ISO域(省略)

        Item              Name                 Path/IP
        -------------------------------------------------
        DataCenter        ctc_dc                    ——
        Cluster           ctc_cluster01            ——
        Host                host01                10.10.19.100
        Data_Stor_Dom     data_stor            10.10.19.99:/volume1/nfsstor
        ISO_Stor_Dom      iso_stor            10.10.19.100:/data/iso
    

    注意:由于我采用vdsm和engine都在同一主機(jī)上纺涤,添加此主機(jī)到集群(安裝vdsm)后會(huì)自動(dòng)啟動(dòng)iptables,導(dǎo)致無(wú)法訪問(wèn)webadmin-portal(port:443/80)五垮。添加相關(guān)條目到/etc/sysconfig/iptables來(lái)解決,內(nèi)容如下:

      [root@ovirthost01 ~]# cat /etc/sysconfig/iptables
    
      # Generated by iptables-save v1.4.21 on Tue Aug  4 02:58:26 2015
      *filter
      :INPUT ACCEPT [0:0]
      :FORWARD ACCEPT [0:0]
      :OUTPUT ACCEPT [250:63392]
      -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
      -A INPUT -p icmp -j ACCEPT
      -A INPUT -i lo -j ACCEPT
      -A INPUT -p tcp -m tcp --dport 54321 -j ACCEPT
      -A INPUT -p tcp -m tcp --dport 111 -j ACCEPT
      -A INPUT -p udp -m udp --dport 111 -j ACCEPT
      -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
      -A INPUT -p udp -m udp --dport 161 -j ACCEPT
      -A INPUT -p tcp -m tcp --dport 16514 -j ACCEPT
      -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
      -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
      -A INPUT -p tcp -m multiport --dports 5900:6923 -j ACCEPT
      -A INPUT -p tcp -m multiport --dports 49152:49216 -j ACCEPT
      -A INPUT -j REJECT --reject-with icmp-host-prohibited
      -A FORWARD -m physdev ! --physdev-is-bridged -j REJECT --reject-with icmp-host-prohibited
      COMMIT
      # Completed on Tue Aug  4 02:58:26 2015
    
      [root@ovirthost01 ~]# systemctl restart iptables
    

3. 創(chuàng)建虛擬機(jī)(通過(guò)NAT連接外網(wǎng))

1.導(dǎo)入iso鏡像文件

    [root@ovirthost01 ~]# engine-iso-uploader -i iso_stor upload  /data/iso/*.iso

    Please provide the REST API password for the admin@internal oVirt Engine user (CTRL+D to abort): 
    Uploading, please wait...
    INFO: Start uploading /data/iso/CentOS-6.5-x86_64-minimal.iso 
    INFO: /data/iso/CentOS-6.5-x86_64-minimal.iso uploaded successfully
    INFO: Start uploading /data/iso/CentOS-7.0-1406-x86_64-Minimal.iso 
    INFO: /data/iso/CentOS-7.0-1406-x86_64-Minimal.iso uploaded successfully
    INFO: Start uploading /data/iso/virtio-win-0.1.96.iso 
    INFO: /data/iso/virtio-win-0.1.96.iso uploaded successfully

2.創(chuàng)建NAT網(wǎng)絡(luò)配置文件/etc/libvirt/qemu/networks/nat.xml,內(nèi)容如下

    <network>
        <name>nat</name>
        <uuid>b09d09a8-ebbd-476d-9045-e66012c9e83d</uuid>
        <forward mode='nat'/>
        <bridge name='natbr0' stp='on' delay='0' />
        <mac address='52:54:00:9D:82:DE'/>
        <ip address='192.168.1.1' netmask='255.255.255.0'>
            <dhcp>
                <range start='192.168.1.2' end='192.168.1.250' />
            </dhcp>
        </ip>
    </network>

3.通過(guò)libvirt/virsh創(chuàng)建NAT網(wǎng)絡(luò)

    [root@ovirthost01 ~]# cat /etc/pki/vdsm/keys/libvirt_password 
    shibboleth
    
    [root@ovirthost01 ~]# virsh

    Welcome to virsh, the virtualization interactive terminal.
    
    Type:  'help' for help with commands
           'quit' to quit
    
    virsh # connect qemu:///system
    Please enter your authentication name: vdsm@ovirt
    Please enter your password: shibboleth
    
    virsh # net-list
     Name                 State      Autostart     Persistent
    ----------------------------------------------------------
     ;vdsmdummy;          active     no            no
     vdsm-ovirtmgmt       active     yes           yes
    
    virsh # net-define /etc/libvirt/qemu/networks/nat.xml
    Network nat defined from /etc/libvirt/qemu/networks/nat.xml
    
    virsh # net-autostart nat
    Network nat marked as autostarted
    
    virsh # net-start nat
    Network nat started
    
    virsh # net-list --all
     Name                 State      Autostart     Persistent
    ----------------------------------------------------------
     ;vdsmdummy;          active     no            no
     nat                  active     yes           yes
     vdsm-ovirtmgmt       active     yes           yes

    以上操作將創(chuàng)建nat功能的網(wǎng)橋睬棚,如下
    [root@ovirthost01 ~]# brctl show
    bridge name     bridge id               STP enabled     interfaces
    ;vdsmdummy;             8000.000000000000       no
    natbr0          8000.5254009d82de       yes             natbr0-nic
    ovirtmgmt               8000.b083fea27fed       no              p4p1

4.安裝vdsm-hook-extnet

    [root@ovirthost01 ~]# yum install -y vdsm-hook-extnet

注:此處將下載extnet的hooks文件并存放到以下兩目錄

    [root@ovirthost01 ~]# ll /usr/libexec/vdsm/hooks/before_device_create
    total 4
    -rwxr-xr-x. 1 root root 1925 Jun  5 01:47 50_extnet
    [root@ovirthost01 ~]# ll /usr/libexec/vdsm/hooks/before_nic_hotplug
    total 4
    -rwxr-xr-x. 1 root root 1925 Jun  5 01:47 50_extnet

5.添加自定義設(shè)備屬性extnet

    [root@ovirthost01 ~]# engine-config -s CustomDeviceProperties='{type=interface;prop={extnet=^[a-zA-Z0-9_ ---]+$}}'
    Please select a version:
    1. 3.0
    2. 3.1
    3. 3.2
    4. 3.3
    5. 3.4
    6. 3.5
    6

    [root@ovirthost01 ~]# engine-config -g CustomDeviceProperties
    CustomDeviceProperties:  version: 3.0
    CustomDeviceProperties:  version: 3.1
    CustomDeviceProperties:  version: 3.2
    CustomDeviceProperties:  version: 3.3
    CustomDeviceProperties: {type=interface;prop={SecurityGroups=^(?:(?:[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}, *)*[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}|)$}} version: 3.4
    CustomDeviceProperties: {type=interface;prop={extnet=^[a-zA-Z0-9_ ---]+$}} version: 3.5

    [root@ovirthost01 ~]# systemctl restart ovirt-engine

6.通過(guò)webadmin-portal創(chuàng)建虛擬機(jī),并通過(guò)ISO安裝GuestOS(省略)

7.添加nat端口配置集

圖1-ovirt-nat0.JPG

8.添加vnic到虛擬機(jī)第煮,并關(guān)聯(lián)nat端口配置集

ovirt-nat1.JPG

9.進(jìn)入到虛擬機(jī)驗(yàn)證(成功)

檢查網(wǎng)卡是否添加

    [root@VM01-CentOS6 ~]# ifconfig -a
圖3-ovirt-nat2.JPG

從vdsm主機(jī)的dhcp服務(wù)器處獲取IP

    [root@VM01-CentOS6 ~]# dhclient eth0
圖4-ovirt-nat3.JPG

通過(guò)ping外網(wǎng)來(lái)檢查NAT是否成功

    [root@VM01-CentOS6 ~]# ping www.ovirt.org
圖5-ovirt-nat4.JPG

10.參考資料

http://www.ovirt.org/VDSM-Hooks/network-nat
http://blog.lofyer.org/add-nat-ovirt-vdsm-hooks/
http://users.ovirt.narkive.com/WVp1moNk/ovirt-users-ovirt-3-5-nat
https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Virtualization/3.5/html-single/Installation_Guide/index.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市抑党,隨后出現(xiàn)的幾起案子包警,更是在濱河造成了極大的恐慌,老刑警劉巖底靠,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件害晦,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡苛骨,警方通過(guò)查閱死者的電腦和手機(jī)篱瞎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)痒芝,“玉大人俐筋,你說(shuō)我怎么就攤上這事⊙铣模” “怎么了澄者?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我粱挡,道長(zhǎng)赠幕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任询筏,我火速辦了婚禮榕堰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嫌套。我一直安慰自己逆屡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布踱讨。 她就那樣靜靜地躺著魏蔗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪痹筛。 梳的紋絲不亂的頭發(fā)上莺治,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音帚稠,去河邊找鬼谣旁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛翁锡,可吹牛的內(nèi)容都是我干的蔓挖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼馆衔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了怨绣?” 一聲冷哼從身側(cè)響起角溃,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎篮撑,沒(méi)想到半個(gè)月后减细,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赢笨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年未蝌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茧妒。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡萧吠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出桐筏,到底是詐尸還是另有隱情纸型,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站狰腌,受9級(jí)特大地震影響除破,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜琼腔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一瑰枫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丹莲,春花似錦光坝、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至擂达,卻和暖如春土铺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背板鬓。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工悲敷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人俭令。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓后德,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親抄腔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瓢湃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)赫蛇,斷路器绵患,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • Codis 3.2 部署配置匯總 概念總結(jié) 集群配置前需要了解架構(gòu),集群分片主要分三種: 客戶端分片:這個(gè)需要自己...
    三杯水Plus閱讀 6,000評(píng)論 0 11
  • 概況 掌握 Docker 在Centos的安裝: 操作系統(tǒng):Win 10 家庭中文版 虛擬機(jī)軟件:Oracle V...
    andy0898閱讀 1,105評(píng)論 1 9
  • 今年的夏天特別炎熱悟耘, 整個(gè)城市就如火辣辣的烤爐? 萬(wàn)里無(wú)云的天空落蝙,毒辣的陽(yáng)光, 讓人感到莫名的昏暈暂幼, 常常只能呆在...
    生生云閱讀 756評(píng)論 0 2
  • 單例 單例是一種設(shè)計(jì)模式筏勒,確保一個(gè)類(lèi)最多同時(shí)存在一個(gè)實(shí)例,并易于訪問(wèn)旺嬉。 單例實(shí)現(xiàn) 1管行、私有構(gòu)造方法 2、內(nèi)部鍵靜態(tài)...
    BruceLeeJ閱讀 143評(píng)論 0 0